Zacząłem swoją przygodę ze smarty ale mam problem, ponieważ chce zmodyfikować działający już skrypt, a raczej CMS dodając smarty i tutaj rodzi się problem.
Mam coś takiego jak switche do podstron: wygląda to tak: /start/inna lub następna podstrona /start/nastepna
No i teraz miałem cały kod w pliku start.php a w tym pliku był switch z wyborem danej podstrony.
Teraz chciałbym aby cały html był w pliku start.tpl podzielony na te podstrony i tutaj rodzi się pytanie czy można to zrobić za pomocą czegoś innego jak {IF} w smarty. Może jest coś jak switch czy coś podobnego?
a co ty chcesz w tych switchach zawierać? logika powinna być w php, więc tam zrób switcha i wyświetlaj odpowiednią tplkę po prostu.
switch
w smartach nie istnieje jako tako, ale jest plugin: http://pynej.blogspot.com/2010/02/switch-statment-for-smarty-3.html
tylko trochę nieaktualny (w sumie jak całe smarty) i nie wiem czy zadziała z bieżącą wersją
Dzięki za odpowiedź. Już sobie poradziłem z tym i narodziło się nowe pytanie.
Czy da się jakoś przejść if w smarty, czyli jeśli mam coś takiego:
{if $cos > 0)
blablabla
{else}
blabla2
{/if}
to czy jak będzie wyświetlane blablabla to da się jakoś dostać do blabla2.
Takie pytanie raczej dotyczące zabezpieczenia aplikacji internetowej.
jeżeli blabla2
jest wpisane na sztywno - to jeżeli nie zabezpieczysz możliwości ładowania plików *.tpl przez przeglądarkę (zwykłe .htaccess
i deny from all
) będzie do odczytu.
jeżeli dana pochodzi ze zmiennej - to i tak zabezpiecz pliki *.tpl (i folder ze skompilowanymi szablonami także) - w tpl będzie widać tylko nazwę zmiennej.
upewnij się też, że logika aplikacji jest właściwa - jeżeli jakieś wrażliwe dane zależą od ifa w tpl-ce to raczej nie za dobrze - wrażliwego ifa zrób też w php i tam decyduj czy wrażliwe dane w ogóle do smartów powinieneś przypisywać.
Część głupich pytań dalsza. :)
To już może bardziej nie związane ze smarty ale mam coś takiego w funkcji:
<?php
if($cos == 0) {
return $msg_error = 'cosiek';
} else {
return $msg_succes = 'cosiek';
}
I teraz jak to zrobić aby w zależności od zmiennej było inne formatowanie tekstu.
$msg_error - czerwony
$msg_succes - zielony
Wcześniej miałem to tak:
if($cos == 0) {
return $msg = '<div class='error'>cosiek</div>';
} else {
return $msg = '<div class='succes'>cosiek</div>';
}
No ale teraz oddzielam wszystko za pomocą smarty i nie zostawię kawałków kodu HTML w czystym PHP.
Określ style dla error i success.
Znajdź jakiegoś liba dla messages
if($cos == 0) {
return $msg_error = 'cosiek';
} else {
return $msg_succes = 'cosiek';
}
taki zapis zwraca DOKŁADNIE to samo. zwracana jest tylko wartość cosiek
, nie nazwa zmiennej.
możesz sobie zwrócić tablicę:
array('msg_error' => 'tresc');
// albo
return array('msg_success' => 'tresc');
Chyba trochę za szybko wybiegasz z nauką naprzód, skoro wykładasz się na podstawach - przemyśl to dobrze, bo jeszcze wypuścisz jakiegoś dziurawca w sieć ;)
Mam nadzieje, że dziurawy nie będzie. :)
Trudno się przerabia własne dzieło, które pisało się pół roku temu i to w dodatku na smarty, gdzie w ogóle w nim nie było takiego założenia, aby oddzielać kod php od html itp.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.