Wątek przeniesiony 2014-12-18 11:33 z PHP przez ŁF.

Czy istnieje "switch" w Smarty?

0

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?

0

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ą

0

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.

0

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

0

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.

0

Określ style dla error i success.
Znajdź jakiegoś liba dla messages

0
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ć ;)

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1