Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SMARTY] Błąd cache'u
Forum PHP.pl > Forum > PHP
NickOver
Cześć.
Mam problem z cache'owaniem. Używam smartów 3. Problem polega na tym iż przy włączonym cacheowaniu cały czas ładuje się ta sama strona.
Strona ładuje się w taki sposób:

Główny plik tpl ładuje wszystkie pliki (menu, header itp.) ładowany jest też plik który dostaje ścieżkę do konkretnego widoku z konkretnego modułu.

Niestety musi to być tak zrobione ponieważ strona polega na modułach. Mimo tego, zmiany adresu nie powodują zmiany strony.
Dawałem przy plikach do includowania treści strony nocaching, lecz niestety to nie pomaga.
Macie jakieś pomysły?
Dodam że strona stoi i będzie stać na raspberry PI B+
Pyton_000
Wydaje mi się że musisz zrobić tak że musisz najpierw przeparsować content dynamiczny a potem wstawić go do głównego szablonu jako zmienną.

Ew. używać extends i parsować tylko ten "najniższy" szablon czyli content strony, a extends robisz na main_layput.
NickOver
Próbowałem juz się bawić z cachowaniem tylko części tpl'ek. Niestety nic to nie daje.

Zapomniałem dodać pewną ważną ciekawostkę. Na raspberry cache nie działa, a na stacjonarce śmiga.
Na raspberry mam pehapa w wersji 5.4.36-0+deb7u3 i apacha w wersji 2.2.22
Pyton_000
Pokaż jakiś przykład jaką masz strukturę TPL jak dołączasz pliki, co parsujesz
NickOver
Główny plik tpl:
  1. {config_load file="config/view.conf"}
  2.  
  3. {include file="header.tpl"}
  4.  
  5. {include file="content.tpl"}
  6.  
  7. {include file="footer.tpl"}


plik content.tpl
  1. <div id="wrapper">
  2. {include file="phpVarToJs.tpl"}
  3. {include file="navigation.tpl"}
  4. <div id="page-wrapper">
  5. <div class="container-fluid">
  6. {if $displayTpl != NULL}
  7. {include file="$displayTpl/content.tpl"}
  8. {else}
  9. {include file="default.tpl"}
  10. {/if}
  11. </div>
  12. </div>
  13. </div>


zawartość pliku który includuje się jeśli jest $displayTpl
  1. {assign var=view value=$dataForModule.device.view}
  2. {assign var=href value=$dataForModule.device.linkToTpl}
  3. {assign var=file value="$href/$view.tpl"}
  4. {include file="$file"}
Pyton_000
Wg. mnie masz zły flow. Powinieneś wykożystać {extends} i parsować tylko content.tpl zamiast główny.

Wtedy powinieneś móc sterować tym co robi cache.
NickOver
Mogłbyś powiedziec coś wiecej na temat tego extends?
Niestety manual smartów za dużo mi nie mówi.
Pyton_000
http://www.smarty.net/inheritance -> Example With Inheritance
NickOver
Problem rozwiązałem trochę na opak. Dla ciekawskich pozmieniałem trochę ustawienia smartów w następujący sposób:
  1. const SmartyForceCompile = false;
  2. const SmartyDebugging = false;
  3. const SmartyCaching = 0;
  4. const SmartyCacheLifeTime = 0;


Dzięki wielkie Pyton za tak aktywny udział w temacie smile.gif
Pyton_000
Ale to co Ty zrobiłeś to wyłączenie cache całkowicie. A raczej nie to chciałeś osiągnąć wink.gif

PS. Jak możesz jeszcze zmienić to weź Twig, tam takich problemów nie ma wink.gif Ew. lżejszy Blade od Laravel'a
NickOver
Zmienić nie mogę. Za dużo widoków.

No własnie wyłączyłem ale nie całkowicie ponieważ wcześniej strona ładowała się koło 6-7 sekkund, a teraz może pół sekundy smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.