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

Cache system falsch verstanden? (Login Formular)

 
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
Athris
Smarty n00b


Joined: 06 Apr 2017
Posts: 4

PostPosted: Thu Apr 06, 2017 9:39 pm    Post subject: Cache system falsch verstanden? (Login Formular) Reply with quote

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
View user's profile Send private message
Grizzly
Smarty Pro


Joined: 15 Apr 2011
Posts: 172
Location: Germany

PostPosted: Fri Apr 07, 2017 5:54 am    Post subject: Reply with quote

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
View user's profile Send private message Visit poster's website
Athris
Smarty n00b


Joined: 06 Apr 2017
Posts: 4

PostPosted: Mon Apr 10, 2017 9:04 pm    Post subject: Reply with quote

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
View user's profile Send private message
Grizzly
Smarty Pro


Joined: 15 Apr 2011
Posts: 172
Location: Germany

PostPosted: Tue Apr 11, 2017 6:34 am    Post subject: Reply with quote

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
View user's profile Send private message Visit poster's website
Athris
Smarty n00b


Joined: 06 Apr 2017
Posts: 4

PostPosted: Tue Apr 11, 2017 5:17 pm    Post subject: Reply with quote

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
View user's profile Send private message
Grizzly
Smarty Pro


Joined: 15 Apr 2011
Posts: 172
Location: Germany

PostPosted: Wed Apr 12, 2017 5:33 am    Post subject: Reply with quote

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
View user's profile Send private message Visit poster's website
Athris
Smarty n00b


Joined: 06 Apr 2017
Posts: 4

PostPosted: Wed Apr 12, 2017 5:32 pm    Post subject: Reply with quote

Das ist natürlich auch clever dass im PHP Code zu steuern Very Happy

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
View user's profile Send private message
Grizzly
Smarty Pro


Joined: 15 Apr 2011
Posts: 172
Location: Germany

PostPosted: Thu Apr 13, 2017 5:34 am    Post subject: Reply with quote

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
View user's profile Send private message Visit poster's website
mwaack
Smarty Rookie


Joined: 01 Mar 2017
Posts: 7

PostPosted: Sun May 07, 2017 10:10 am    Post subject: Reply with quote

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
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