php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Scripts > BRAINSTORMING PHP/SQL/HTML/JS/CSS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


BRAINSTORMING PHP/SQL/HTML/JS/CSS Ihr habt eine Idee, aber keinen genauen Ansatz? Diskutiert mit anderen Usern des Forums über eure Gedankengänge um evtl. hilfreiche Ideen zu bekommen!
Normale Fragen bitte weiterhin in die entsprechenden Foren!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 04-03-2005, 09:13
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Question Template cachen - Ja, schon wieder...

Ich weiß, so langsam könnte das Thema nervig werden.
Aber vielleicht hat ja trotzdem jemand Lust...

Erstmal das,was funktioniert:

Ich habe Templates, die nach jeder Änderung "kompiliert" werden, so dass ich ein Datei mit PHP-Code erhalte, die dann bei jedem Aufruf des Templates abgearbeitet wird.

Schreibe ich irgendwo in ein Template
Code:
{cache_file /}
, so wird das Template kompiliert wie vorher auch, allerdings gibt es noch eine weitere Funktion, die beim ersten Aufruf des kompilierten Templates ausgeführt wird, das Template "still" (also ohne Ausgabe) prozessiert und dann das kompilierte Template so umschreibt, dass es nur noch das Ergebnis der "stillen" Ausführung zurückliefert.
Das nutze ich z. B. bei FAQ-Seiten, die online gepflegt werden können.
Da sich deren Inhalt nicht allzu oft ändert, wird nach Ändern der FAQs das kompilierte Template einfach gelöscht.
Beim nächsten Aufruf der FAQ-Seite wird es erneut kompiliert, "still" ausgeführt und das Ergebnis davon wird gespeichert, so dass ich nicht jedesmal über Arrays iterieren und ähnliches muss.

Jetzt das, was noch nicht funktioniert:
Code:
{cache_file /}
cached das komplette Template, ich hätte jetzt aber gerne noch die Möglichkeit nur bestimmte Teile eines Templates zu cachen

Beispiel:
Code:
{cache}
{loop sitemap}
  {if _first}<ul>{endif}
   <li><a href="{link_link}">{link_title escape}</a>
    {recursion sitemap /}
   </li>
  {if _last}</ul>{endif}
{endloop}
Die Sitemap ist gültig seit dem {_now date_format "d.m.Y"}
{endcache}
Hallo, heute ist der {_now date_format "d.m.Y"}
Soll mir die komplette Sitemap anzeigen und zwar nur beim ersten Aufruf des Templates, danach soll sie statisch im kompilierten Template stehen.
Das Datum soll aber immer aktuell ausgegeben werden.

Aus
PHP-Code:
$result '';
$result .= loop_sitemap($sitemapt);
$result .= 'Die Sitemap ist gültig seit dem ';
$result .= date('d.m.Y'time());
$result .= 'Hallo, heute ist der ';
$result .= date('d.m.Y'time());
return 
$result
sollte dann also das hier werden:
PHP-Code:
$result 'HTML-Code der Sitemap
$result .= '
Die Sitemap ist gültig seit dem 04.03.2005';
$result .= '
Halloheute ist der ';
$result .= date('
d.m.Ytime());
return 
$result
Hat jemand einen tollen Ansatz wie ich sowas realisieren könnte?

Wenn nicht, muss ich erstmal selbst weiter überlegen und wenn mir weiterhinnichts einfällt, muss ich aus dem Sitemap-Template wohl oder übel zwei Templates machen. Eines für die Sitemap,das dann komplett gecached wird und eines für den "Hallo, heute ist..."-Teil
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #2 (permalink)  
Alt 04-03-2005, 10:58
marc75
 PHP Senior
Links : Onlinestatus : marc75 ist offline
Registriert seit: Jul 2003
Ort: daheim
Beiträge: 1.366
marc75 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
//eventuell verstehe ich dich falsch


$result '';
$result .= loop_sitemap($sitemapt);
$result .= 'Die Sitemap ist gültig seit dem ';
$result .= date('d.m.Y'time());
$result .= 'Hallo, heute ist der ';
$result .= date('d.m.Y'time()); 
// du müsstest deiner engine irgendwie mitteilen das 
// es die zweite Datefunktion nicht ausführen soll
//$result .= function_erhalten('date('d.m.Y', time())'); 
return $result
__________________
mfg
marc75

<Platz für anderes>
Mit Zitat antworten
  #3 (permalink)  
Alt 04-03-2005, 11:32
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Die zweite Date-Funktion soll immer ausgeführt werden

1. Aufruf
PHP-Code:
$result '';
$result .= loop_sitemap($sitemap);
$result .= 'Die Sitemap ist gültig seit dem ';
$result .= date('d.m.Y'time());
//Jetzigen Inhalt von $result an die Stelle des bisherigen Codes setzen
$result .= 'Hallo, heute ist der ';
$result .= date('d.m.Y'time());
return 
$result
2. Aufruf
PHP-Code:
$result 'Das, was beim ersten Aufruf rauskam';
$result .= 'Hallo, heute ist der ';
$result .= date('d.m.Y'time()); 
Mir fehlt momentan der Ansatz, wie ich an die zu cachenden Teile des Templates komme.

Mir fiele nur sowas ein:
PHP-Code:
$result '';
/* cache 35763743437 (oder ein anderer Zufallswert */
$result .= $cache35763743437 loop_sitemap($sitemap);
$result .= $cache35763743437 .= 'Die Sitemap ist gültig seit dem ';
$result .= $cache35763743437 .= date('d.m.Y'time());
store_cache('35763743437'$cache35763743437);
/* cache 35763743437 (oder ein anderer Zufallswert */
$result .= 'Hallo, heute ist der ';
$result .= date('d.m.Y'time());
return 
$result
Und dann im Anschluss daran alles zwischen den Kommanteren durch den entsprechenden Block ersetzen.

Aber dann müsste ich dafür sorgen, dass sich cache-Blöcke nicht verschachteln, ich überall die Cache-Zwischenspeichervariable eintrage, meine Bedingen umprogrammieren, da die nicht mit if und elseif und ähnlichem realisiert sind, sondern mit
PHP-Code:
$result .= 'Die Bedingung ist '.(bedingung 'erfüllt' 'nicht erfüllt').'.'
Insofern hoffe ich auf einen Geistesblitz der mir oder jemand anderem noch kommen wird
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #4 (permalink)  
Alt 16-03-2005, 19:38
Floriam
 PHP Senior
Links : Onlinestatus : Floriam ist offline
Registriert seit: May 2003
Ort: Deutschland
Beiträge: 1.432
Floriam ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,


Ist es eventuell möglich das du dem Cache-Block einem Namen gibst (z.B. "sitemap")?


Wenn das Template zum ersten mal aufgerufen wird:

Die beiden Cache-Tags werden einfach ignoriert, dass ganze Template wird geparst. Danach ließt du mithilfe der beiden Cache-Tags den Bereich aus welcher gecacht werden soll, diesen Speicherst du dann in einer Cache-Datei (im Dateinamen müsste irgendwo der Name des Cache-Tags drinsein, mitsamt dem Template Namen (also theoretisch "templatename_cacheblockname.cache" o.ä.)).



Beim 2. Aufruf:

Du prüfst ob der Cache-Block schon existiert (den Namen mithilfe regulärer Ausdrücke auslesen?) und dann musst du dir wieder den Cache-Datei-Namen zusammenbasteln. Dann einfach alles zwischen den beiden Cache-Tags mit dem Inhalt aus der Cache-Datei ersetzen und das ganze Template am Ende wieder parsen..



Weiß nicht ob ich da was falsch verstanden hab, ich weiß noch nicht einmal wie leicht bzw. schwer sich das umsetzen lässt..



Floriam



Zitat:
[..]dass sich cache-Blöcke nicht verschachteln[..]
Kannst du mich darüber aufklären wieso sich die Cache-Blöcke verschachteln sollten?

Geändert von Floriam (16-03-2005 um 19:41 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 17-03-2005, 08:27
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Zitat:
Original geschrieben von Floriam
Kannst du mich darüber aufklären wieso sich die Cache-Blöcke verschachteln sollten?
Z. B., weil in einem File, das per include eingebunden wird, auch so ein cacheblock ist?
Code:
{cache}Ganz viel text
{include "irgendwas.tpl"/}
{endcache}
Code von irgendwas.tpl
Code:
Etwas Text und dann ein Riesenloop
{cache}
{loop riesig}
In {_key} steht {_value}
{endloop}
{endcahce}
@Rest
Ma schauen, ich hab da schon so eine Idee, die in etwa in die Richtung geht
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Projektmanagement Damals und Heute
Projektmanagement Damals und HeuteWerfen Sie einen Blick auf das, was sich verändert hat, und entdecken Sie, wo die Zukunft dieses Gebietes hinsteuert.

18.01.2021 | Berni

Arbeitsmanagement-Tools
Arbeitsmanagement-ToolsWarum jedes Team Arbeitsmanagement-Tools benötigt. Man schätzt, dass 25% eines durchschnittlichen Mitarbeiter-Tages durch ineffiziente Arbeit vergeudet werden.

11.12.2020 | Berni


 

Aktuelle PHP Scripte

Simple Forum PHP ansehen Simple Forum PHP

If you need simple forum or discussion on your website, then you've come to the right place. Simple Forum PHP is a script that is very easy to install and administer.

28.08.2021 nevenov | Kategorie: PHP/ Forum PHP Software
Formmailer Bootstrap 4

Mit dem Formmailer kann man sich eMails über seine Seite zukommen lassen.

08.07.2021 arne-home | Kategorie: PHP/ Formular
Fehlerseite Bootstrap 4

Bei Aufruf einer nicht existierenden Seite, teilen Sie Besuchern mit einer eigenen Fehlerseite mit, dass die gewünschte Seite nicht gefunden wurde. Die eigene Fehlerseite sollte dasselbe Design wie die Website haben. Zudem sollte ein Link zur Startseite a

04.07.2021 arne-home | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:58 Uhr.