Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

Problem mit Caching

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: German
View previous topic :: View next topic  
Author Message
Ralfi
Smarty n00b


Joined: 05 Jul 2004
Posts: 4

PostPosted: Mon Jul 05, 2004 3:28 pm    Post subject: Problem mit Caching Reply with quote

Hallo,

ich habe ein kleines Problem mit dem Caching. Wie ich einen bestimmten Bereich vom Cachen ausschliessen kann, weiss ich mittlerweile. Dafür nutze ich {insert name=login tpl="login.htm"}, was auch sehr gut klappt.

Ich versuche mein Problem einmal so verständlich wie möglich zu beschreiben:

In meinem Haupttemplate "main.htm" habe ich einen Content Bereich, der einfach über {$content} ausgegeben wird. Die Variable $content wird von meinem CMS mit Inhalten befüllt. Im Prinzip lese ich einen Artikel aus der Datenbank in meine Variable $text, passe den gelesenen Text etwas an und übergebe den String $text per $smarty->assign("content", $text) an das Template. Soweit so gut.

In diesen Artikelttext, den ich aus der Datenbank lese, möchte ich nun ebenfalls einen Bereich integrieren, der nicht gecacht werden soll. In dem String $text steht somit irgendwo auch ein "...{insert name=form form='form.htm'}...". Wenn ich nun per $smarty->fetch("main.htm", $cacheid) das Template verarbeiten möchte, erscheint in der Ausgabe unter anderem auch der Text "...{insert name=form form='form.htm'}...", d.h. der {insert} Befehl wurde nicht ausgeführt.

Ich verstehe schon, dass es so nicht klappt, weil beim $smarty->fetch("main.htm", $cacheid) ja erst die Variable "content" für Smarty mit Inhalten den Inhalten aus $text befüllt wird. Ich müsste also den String $text, den ich per assign() an Smarty übergebe, auch irgendwie verarbeiten können.

1. Gibt es bei Smarty die Möglichkeit, auch Strings zu verarbeiten, also ähnlich wie bei der fetch() Methode? Wenn ja, wie heisst die Methode?

2. Gibt es einen anderen Weg, wie ich mein Problem lösen könnte? Wenn ja, wie kann ich das genau machen?

Bin für jeden Hinweis dankbar.

Viele Grüsse,

Ralfi
Back to top
View user's profile Send private message
coach
Smarty Regular


Joined: 03 Jun 2004
Posts: 65

PostPosted: Tue Jul 06, 2004 7:06 am    Post subject: Re: Problem mit Caching Reply with quote

Hallo Ralfi,

Ralfi wrote:

Ich verstehe schon, dass es so nicht klappt, weil beim $smarty->fetch("main.htm", $cacheid) ja erst die Variable "content" für Smarty mit Inhalten den Inhalten aus $text befüllt wird. Ich müsste also den String $text, den ich per assign() an Smarty übergebe, auch irgendwie verarbeiten können.

1. Gibt es bei Smarty die Möglichkeit, auch Strings zu verarbeiten, also ähnlich wie bei der fetch() Methode? Wenn ja, wie heisst die Methode?

Nicht das ich wüßte. Du könntest, wenn du es wolltest, dynamisch ein Template erzeugen und in einem temporären Verzeichnis speichern und dann fetch() oder display() machen.

Ralfi wrote:

2. Gibt es einen anderen Weg, wie ich mein Problem lösen könnte? Wenn ja, wie kann ich das genau machen?

Den insert im Text ersetzen per str_replace oder regulärem Ausdruck. Du könntest z.B. <!-- smarty file --> in Text 1 finden und dann einen fetch() von diesem File machen (Text 2) und dann quasi diesen im Text 1 überschreiben.

Lies mal ein paar Artikel weiter - da ist ein Posting von mir mit ähnlichem Thema.


Coach
Back to top
View user's profile Send private message
Ralfi
Smarty n00b


Joined: 05 Jul 2004
Posts: 4

PostPosted: Tue Jul 06, 2004 8:04 am    Post subject: Reply with quote

Hallo Coach,

erst einmal danke für deine Hilfe. Ich habe mir auch deinen anderen Beitrag durchgelesen, jedoch nicht unbedingt alles verstanden Sad. Ich stehe halt noch relativ am Anfang bei der Benutzung von Smarty.

Vielleicht beschreibe ich noch mal anhand von einem konkreten Beispiel, wo mein Problem liegt. Vielleicht ist mein gesamter Aufbau auch kompletter Mist.

Mein Template main.htm in vereinfachter Darstellung:

-----------------------------------------------------------------------------------
<html>
<head>
<title>{$title}</title>
</head>
<body>
<div id="menu">
{section name=nr loop=$menu}
<a href="{$menu[nr].url}">{$menu[nr].name}</a>
{/section}
</div>
<div id="content">
{$content}
</div>
</body>
</html>
-----------------------------------------------------------------------------------

Aus der Datenbank hole ich mir nun die Daten für einen Artikel (das Lesen des Menus lasse ich mal aussen vor). Ich habe dann in der Variable $title die Überschrift des Artikels und in der Variable $content den Artikeltext. Der Artikeltext kann in etwa wie folgt aussehen:

-----------------------------------------------------------------------------------
{h1}eine Überschrift{/h1}
Hier steht dann ganz viel Text.
{pic_1_left}Um dieses Bild herum fliesst ein Text.
{h2}noch eine Überschrift{/h2}
{form=plugin_login}
bla bla bla
-----------------------------------------------------------------------------------

Die Tags in geschweiften Klammern sind keine Smarty Tags sondern Tags, die ich in meinem CMS verwende. Ich könnte natürlich teilweise auch <h1> statt {h1} verwenden, aber ich möchte, dass meine CMS Tags alle einheitlich aufgebaut werden. Z.B. wird an der Stelle, wo "{pic_1_left}" steht durch mein CMS ein Bild eingebunden, das dem Artikel im CMS zugeordnet worden ist. Über entsprechende Funktionen wird also der Artikeltext vor der Übergabe an Smarty von mir geparst.

Nun möchte ich an einer bestimmten Stelle ein Formular einbinden, das nicht gecacht werden soll. Mein CMS ersetzt meinen CMS Tag "{form=plugin_login}" durch die Smarty Funktion '{insert name=form form="plugin_login"}'. Zudem habe ich eine Funktion "insert_form" geschrieben, die durch die Smarty Funktion '{insert}' aufgerufen werden soll.

Zu dem Aufruf dieser Funktion kommt es jedoch nicht. Mein geparster Artikeltext steht also weiterhin in der Variable $content und wird mit Hilfe von $smarty->assign("content", $content); an Smarty übergeben. Dadurch erscheint nun aber '{insert name=form form="plugin_login"}' im Klartext, d.h. beim $smarty->fetch("main.htm", $cacheid); wird die {insert} nicht abgearbeitet.

Das Problem liegt meiner Meinung nach daran, dass meine Smarty Funktion '{insert name=form form="plugin_login"}' nicht in der Templatedatei "main-htm", sondern in der Variable $content steht und somit von Smarty nicht verarbeitet werden kann.

Von anderen Templatesystemen kenne ich es, dass beim Parsen des Templates (also fetch() bei Smarty) zuerst die angegebene Template Datei (also bei mir main.htm) in einen String geladen und dann erst geparst wird. Es sollte bei Smarty also eine Methode geben, die den Inhalt dieses Strings parst. Mit der Funktion könnte ich mein Problem evtl. lösen, nur leider finde ich nichts passendes dazu.

Ok, ich weiss nicht, ob das Ganze nun klarer oder noch verwirrender geworden ist. Ich kann mir auch gut vorstellen, dass mein Ansatz ein völlig falscher ist und ich das Problem anders lösen muss / kann / sollte.

Ich bin weiterhin für jeden Tipp dankbar.

Viele Grüsse,

Ralfi
Back to top
View user's profile Send private message
messju
Administrator


Joined: 16 Apr 2003
Posts: 3336
Location: Oldenburg, Germany

PostPosted: Tue Jul 06, 2004 8:22 am    Post subject: Reply with quote

schau dir mal: http://smarty.php.net/manual/de/language.function.eval.php an.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Ralfi
Smarty n00b


Joined: 05 Jul 2004
Posts: 4

PostPosted: Tue Jul 06, 2004 8:39 am    Post subject: Reply with quote

Hallo messju,

messju wrote:
schau dir mal: http://smarty.php.net/manual/de/language.function.eval.php an.


genial! Very Happy

Ich habe mein

<div id="content">
{$content}
</div>

einfach durch

<div id="content">
{eval var=$content}
</div>

ausgetauscht und schon klappt es wie gewünscht. Genau danach habe ich gesucht. Ich habe bisher in der Doku nur bei den Funktionen für Programmierer geschaut. Dass es so eine Funktion für Template Designer gibt, darauf wäre ich nie gekommen! Embarassed

Ich wusste doch, dass es gehen muss, was ich vorhabe. Nochmals vielen Dank! Je tiefer ich in Smarty einsteige, desto mehr Laune macht es. Smile

Gruss,

Ralfi
Back to top
View user's profile Send private message
Ralfi
Smarty n00b


Joined: 05 Jul 2004
Posts: 4

PostPosted: Tue Jul 06, 2004 8:43 am    Post subject: Reply with quote

Kurzer Nachtrag:

und auch wenn in der Doku zu eval() steht, dass die Ausgabe bei eingeschaltetem Caching mit gecacht werden soll, scheint dies für insert() nicht zu gelten. Ein {$smarty.now|date_format:"%d.%m.%Y %H:%M:%S"} in dem inkludierten Template ist der Beweis. Smile

Viele Grüsse,

Ralf
Back to top
View user's profile Send private message
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: German All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP