View previous topic :: View next topic |
Author |
Message |
Athris Smarty n00b
Joined: 06 Apr 2017 Posts: 4
|
Posted: Thu Apr 06, 2017 9:39 pm Post subject: Cache system falsch verstanden? (Login Formular) |
|
|
Hallo,
ich nutze erst seit kurzem Smarty und habe das Cache System aktiviert. Jetzt hatte ich bisher das Problem, dass ich meine Webseite mehrsprachig gestalte. Hierfür wird in der PHP Datei der deutsche oder halt englische String an das Template weitergeleitet. Das Cachesystem sorgte aber dafür, dass trotzdem immer noch der alte String angezeigt wird. Um dies zu beheben habe ich beim Display das Sprachkürzel als zweiten Parameter mitgegeben:
$pntSmarty->display($template, GetLanguageCode());
Jetzt habe ich das nächste Problem. Ich habe ein Logindialog, welcher natürlich verschiedene Fehlermeldungen provozieren kann. Diese speichere ich in der PHP Datei in einem Array welches ich dann an das Template gebe:
$pntSmarty->assign('login_errors', $error_array);
Leider schlägt auch hier wieder das Cachesystem zu und erkennt z.B. nicht wann es Fehlermeldungen gibt oder nicht.
Verstehe ich eventuell das Cachesystem falsch? Oder gehe ich da komplett falsch ran? |
|
Back to top |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
Posted: Fri Apr 07, 2017 5:54 am Post subject: |
|
|
Hey, probiere es doch mal mit dem dritten übergabeparameter "nocache":
Code: | $pntSmarty->assign('login_errors', $error_array, true); |
Ansonsten könntest du - wenn du die Fehler schmeist - den Cache vorher leeren. |
|
Back to top |
|
Athris Smarty n00b
Joined: 06 Apr 2017 Posts: 4
|
Posted: Mon Apr 10, 2017 9:04 pm Post subject: |
|
|
Mhm der dritte Parameter bewirkt leider gar nichts... es funktioniert nur wenn ich direkt im Template mittels {nocache} arbeite.
Ich habe es so probiert:
PHP Datei:
//Return error messages
if (count($error_array) > 0) {
$pntSmarty->assign('login_errors', $error_array, true);
}
Template Datei:
{if isset($login_errors)}
<div class="alert alert-danger">
{foreach from=$login_errors item=error_message}
{$error_message}<br />
{/foreach}
</div><br />
{/if}
Die anderen assign Funktionen in der PHP Datei haben diesen dritten Parameter nicht gesetzt. Ich habe dann auch den Cache Ordner geleert, doch weiterhin wird die Gecachte Version angezeigt. In diesem Fall keine Fehlermeldungen, obwohl das Fehlerarray gefüllt ist. |
|
Back to top |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
Posted: Tue Apr 11, 2017 6:34 am Post subject: |
|
|
Es wird ja dann im normalfall das Template gecached. Und wenn beim erstaufruf die Variable nicht existiert, wird auch nichts ausgegeben.
D. h. du solltest die Zeile:
Code: | if (count($error_array) > 0) { |
entfernen und stattdessen im Template durchführen. Aber die Variable, auch wenn diese leer ist, trotzdem assignen.
Probiers mal. Habe es jedoch nicht getestet. |
|
Back to top |
|
Athris Smarty n00b
Joined: 06 Apr 2017 Posts: 4
|
Posted: Tue Apr 11, 2017 5:17 pm Post subject: |
|
|
Hatte jetzt mal probiert die Variable immer zu übergeben und im Template über count / isset zu prüfen:
PHP
Code: | $pntSmarty->assign('login_errors', $error_array, true); |
Template
Code: |
{if count($login_errors) > 0}
<div class="alert alert-danger">
{foreach from=$login_errors item=error_message}
{$error_message}<br />
{/foreach}
</div><br />
{/if}
|
Gleiches Ergebnis. Funktioniert leider nicht.
Kurioser Weise habe ich festgestellt wenn ich die Variable vorher einfach mal ins Template einfüge, dann klappts:
Template
Code: |
Test: {$login_errors}
{if count($login_errors) > 0}
<div class="alert alert-danger">
{foreach from=$login_errors item=error_message}
{$error_message}<br />
{/foreach}
</div><br />
{/if}
|
Aber das kann ja auch irgendwie nicht sein, dass ich die Variable vorher schon im Template verwenden muss. |
|
Back to top |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
Posted: Wed Apr 12, 2017 5:33 am Post subject: |
|
|
Hmm, das ist komisch. Wahrscheinlich liegt es an der überprüfung.
Ich muss sagen, dass ich mit dem Cache, so wie du ihn machst, gar nichts gemacht habe. Ich verwende immer die
Code: | $smarty->caching = true; |
Variante und setze es dann auf true, ab wann es gecached werden soll bzw. dann wieder auf false, wenn nicht mehr. |
|
Back to top |
|
Athris Smarty n00b
Joined: 06 Apr 2017 Posts: 4
|
Posted: Wed Apr 12, 2017 5:32 pm Post subject: |
|
|
Das ist natürlich auch clever dass im PHP Code zu steuern
Wobei ich mich frage ob es generell Sinn macht bei meinem Projekt das Cachesystem zu verwenden. Ein Browsergame ist eigentlich recht dynamisch... |
|
Back to top |
|
Grizzly Smarty Pro
Joined: 15 Apr 2011 Posts: 172 Location: Germany
|
Posted: Thu Apr 13, 2017 5:34 am Post subject: |
|
|
Das musst du wissen,
natürlich macht es nur da sinn zu cachen, wo auch nicht oft etwas geändert wird.
Ich habe in meinem CMS so gemacht, dass gecached wird solange ich die Page nicht bearbeite. |
|
Back to top |
|
mwaack Smarty Rookie
Joined: 01 Mar 2017 Posts: 7
|
Posted: Sun May 07, 2017 10:10 am Post subject: |
|
|
Entscheide doch im php ob Cache oder nicht.
Nutze Cache und compile ID
Code: | $this->smarty->display('Page.tpl',$this->controller->cacheId,$this->controller->compileId); |
Abfragen ob der Cache existiert:
Code: | $this->smarty->isCached('Page.tpl',$this->controller->cacheId,$this->controller->compileId) |
Und zum loeschen
Code: |
$this->smarty->clearCache(null,$this->cacheId,$this->compileId);
|
|
|
Back to top |
|
|