Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem ze smarty
Forum PHP.pl > Forum > PHP
jureusz
Czy istnieje mozliwosc refresh display? Moze ktos juz sie z tym zmierzyl. Tpl'ty wyswietlane sa w kolejnosci np. header, body, footer. W momencie operacji logowania, ktora wykonywana jest przed display body a po display header chcialbym zeby header.tpl sie zmienil (i np. na nim wyswietlac "wyloguj").

[php:1:5bccc585c7]<?php
$smarty->display('header.tpl');

// operacje logowania dla body

// przypisanie np. loginu (w wyniku bylo by np. "Wyloguj jureusz")
$smarty->assign('LOGIN',$userlogin);
// refresh header questionmark.gif

$smarty->display('body.tpl');
?>[/php:1:5bccc585c7]
Bielo
Miałem duużo podobnych problemów ze smarty np. wstawianie title'a do pliku header.tpl po użyciu display. Przekopałem sie przez cały manual smarty i w końcu zrobiłem własny engine
jureusz
Generalnie to juz znalazlem rozwiazanie, nieco toporne ale w moim przypadku sie sprawdzilo.

Kod
<script>window.location='*.php'</script>


Refresh ...

Jezeli jednak ktos znajdzie inny sposob ... to chetnie skorzystam smile.gif
rzseattle
Hey

display jest metoda ktorej z zalozenia powinno sie uzywac na samym koncu skryptu po przetworzeniu wszystkich danych , dlatego najprostszym i poprawnym rozwiazaniem jest przesuniecie wszystkich metod display na koniec skryptu.
Bielo
tylko ze przypisuje jakieś dane metodą assign i nazwe szablonu do ktorego przypisuję dane podaje sie dopiero przy display
rzseattle
Cytat
tylko ze przypisuje jakieś dane metodą assign i nazwe szablonu do ktorego przypisuję dane podaje sie dopiero przy display

No tak nazwe szablonu podaje sie przy dislpay (lub fetch ), ale nie rozumiem do czego dazysz ? Masz dane przypisujesz je do szablonu i na koncu go wyswietlasz. SMARTY nie musi wiedziec ktorego szablonu uzyje podczas przypisywania zmiennych przez assign. Jesli odwrocisz kolejnosc to pojawiaja sie wlasnie takie problemy jak w pierwszym poscie.
Bielo
a co jak np powtórzą sie nazwy w assignach??
rzseattle
Cytat
a co jak np powtórzą sie nazwy w assignach??
To owszem jest bardzo powazny problem przy budowaniu bardzo rozwinietych stron/systemow. SMARTY niestety jak dotat nie oferuje mozliwosci przypisywania zmiennych bezposrednio do danego obiektu szablonu. Poradzic sobie z tym mozna na wiele sposobow. Najprostszym jest uzywanie prefixow czyli np {$header_title} , {$center_content}, ostatnio sam kombinuje z blokami ktore by pozsiadaly wlasna przestrzen nazw. Jednak wyswietlanie czesci szablonu przed koncemdzialania skryptu zdecydowanie jest zlym nawykiem i powoduje powstawanie wielu uciazliwych niedogodnosci.
jureusz
Cytat
display jest metoda ktorej z zalozenia powinno sie uzywac na samym koncu skryptu po przetworzeniu wszystkich danych , dlatego najprostszym i poprawnym rozwiazaniem jest przesuniecie wszystkich metod display na koniec skryptu.


... a jak to wyglada w przypadku gdy roznorodnosc warunkow powoduje zmiane wyswietlen tpl (body) np.:

[php:1:cc49ce0f7f]<?php
$smarty->display('header.tpl');
if(isset($_GET['cos'])) {
$smarty->display('body.tpl');
}
else {
$smarty->display('body2.tpl');
}
?>[/php:1:cc49ce0f7f]
Bora
[php:1:1e34a2ce70]<?php
//$smarty->display('header.tpl'); najlepiej include przez template w pliku *.tpl
if(isset($_GET['cos'])) {
$schemat='body.tpl';
}
else {
$schemat='body2.tpl';
}
// .... reszta kodu.
$smarty->display($schemat);
?>[/php:1:1e34a2ce70]
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.