Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/smarty] - rozbudowana pętla if else
Forum PHP.pl > Forum > PHP
slawoo
Witam,

Nie znam smartów ni w ząb. Jednak chciałem utworzyć taką pętle/wybór:

  1. {if:arr:simple:status eq '1'}
  2. AAA
  3. {elseif :arr:simple:status eq '2'}
  4. BBB
  5. :
  6. :
  7. :
  8. :
  9. HHH
  10. {/if}


na taką z możliwością wprowadzenia dwunastu przypadków a nie tylko dwóch.
Znalazłem, że jest wyrażenie elseif ale to zwiększa mi możlowść w/w kodu do trzech przypadków - chyba, że się to jakoś zagnieżdża. Z góry dziękuję za pomoc
Berg
Else if można stosować wielokrotnie tak samo jak w php, tj:
  1. if(warunek) {
  2. }
  3. else if(warunek) {
  4. }
  5. else if(warunek) {
  6. }
  7. else {
  8. }
slawoo
Domyślam się, jednak nie wiem jaka dokładnie ma być składnia w smartach
Napisałem tak i pokazuje błąd w zaznaczonej linijce

  1.  
  2. {if:arr:simple:about eq '1'}
  3. AAA
  4.  
  5. {elseif:arr:simple:about eq '2'}
  6. BBB
  7.  
  8. {elseif:arr:simple:about eq '3'} ---> syntax error, unexpected T_ELSE in
  9. CCC
  10.  
  11. {elseif:arr:simple:about eq '4'}
  12. DDD
  13.  
  14. {elseif:arr:simple:about eq '5'}
  15. EEE
  16.  
  17. {elseif:arr:simple:about eq '6'}
  18. FFF
  19.  
  20. {elseif:arr:simple:about eq '7'}
  21. GGG
  22.  
  23. {elseif:arr:simple:about eq '8'}
  24. HHH
  25.  
  26. {elseif:arr:simple:about eq '9'}
  27. HHH
  28.  
  29. {elseif:arr:simple:about eq '10'}
  30. III
  31.  
  32. {elseif:arr:simple:about eq '11'}
  33. JJJ
  34.  
  35. {elseif:arr:simple:about eq '12'}
  36. KKK
  37.  
  38. {/if}
thek
Składnia z manuala do Smarty. Tak ciężko zajrzeć?
Kod
{if $name eq 'Fred'}
    Welcome Sir.
{elseif $name eq 'Wilma'}
    Welcome Ma'am.
{else}
    Welcome, whatever you are.
{/if}

slawoo
nie wiem czy to ja jestem już zmęczony czy Ty, ale ten przykład który podałeś z manuala też widziałem. tyczy się to 3przypadków i z tym nie ma problemu. Pytam właśnie jak to rozszerzyć do większej liczby przypadków - kod podałem powyżej. Kiedy wpiszę samo else (bez elsif) w 3linijce nic to nie poprawia. Jeśli wpiszę w ostatnie to również nie działa sad.gif
cudny
  1. {if $name eq 'Fred'}
  2. Welcome Sir.
  3. {elseif $name eq 'Wilma'}
  4. Welcome Ma'am.
  5. {elseif $name eq 'trzeciPrzypadek'}
  6. Welcome third.
  7. {elseif $name eq 'czwartyPrzypadek'}
  8. Welcome fourth.
  9. {elseif $name eq 'iTakDalej'}
  10. Welcome infinity.
  11. {else}
  12. Welcome, whatever you are.
  13. {/if}


Ale lepiej użyć funkcji switch();
thek
Trzeba tylko dodawać {elseif} jak wspomniał cudny. A co do switcha... Smarty nie ma tej struktury, ale z tego co gdzieś czytałem to użytkownicy sobie sami ją "stworzyli", choć oficjalnie ona w bibliotekach Smarty nie istnieje. Na forum Smarty temat o switchu swego czasu czytałem i tam właśnie o tym pisali.
slawoo
Naprawdę nie wiem dlaczego nie działa, ale nie działa to u mnie.

Kiedy wprowadzam taki kod to działa:
  1. {if:arr:simple:about eq '1'}
  2. Bankiet
  3. {else}
  4. Jubileusz
  5. {/if}



natomiast kiedy wprowadzam coś takiego to już wywala:
  1. {if:arr:simple:about eq '1'}
  2. Bankiet
  3. {elseif:arr:simple:about eq '2'}
  4. Imienieny
  5. {else}
  6. Jubileusz
  7. {/if}



Jako błąd wywala:
Parse error: syntax error, unexpected T_ELSE in /home/serwer/ftp/admin/class/tpl.class.php(166) : eval()'d code on line 47

poniżej fragment kodu z pliku tpl.class.php

public function TPL ( $tpl = '' )
{
$this->args = $tpl;
$this->initial();
$this->set_root_dir();
$this->set_theme(); # usunac jesli wiele themow
$this->set_default_mod();
$this->set_lang(); # usunac jesli wiele jezykow
} ----------> linia nr 47!!!

public function source ($name)
{
return $this->config[$name];
}


Jak pisałem nie znam się na tym zbyt dobrze, ale myślałem że taka drobna modyfikacja to pikuś, Pan Pikuś winksmiley.jpg
thek
Ja to się zastanawiam nad składnią IF na Twoim miejscu. Co prawda Smarty tylko "polizałem" ale nie widziałem tam czegoś takiego jak
if:arr:simple:about eq '1'
A konkretnie tych dwukropków. Przyjrzyj się przykładom. Tam po IF brak spacji i takie "złączenie" może sprawiać, że szuka czegoś, co nie istnieje. Choć myślę, że w przypadku jaki podałeś pluło by się o nieznany tag a nie grzebało w jakiejś klasie. Spróbuj warunek poprawić i powiedz czy dało to spodziewany efekt. Jak dla mnie to w nim tkwi problem
slawoo
tutaj tak jest zrobione i działać musi, bo kiedy daję dwa przypadki to nie ma problemu i dzaiła.
Dla pewności zrobiłem spację i usunąłem dwukropek i wtedy znowu błąd sad.gif
sebekzosw
slawoo, naucz się Smarty bo to co napisałeś z tymi dwukropkami jest błędne winksmiley.jpg :| to co napisał cudny i thek jest prawidłową budową w Smarty smile.gif
thek
Jeśli już jesteśmy przy błędach to jaki błąd wywala po wstawieniu spacji i usunięciu dwukropka?
Inne pytanie mnie też interesuje... Za co odpowiada ":arr:simple:about" jaka to struktura danych? Pytam dlatego, że nie widziałem nigdy by odwołanie do jakiejkolwiek odbywało się poprzez pojedynczy dwukropek. Jedynie przez podwójny do zmiennej statycznej. Stąd mnie dziwi takie podejście do wyciągania wartości. Zaznaczam, że dziś tylko jeszcze odpisuję i być może jutro... Potem 2 tygodnie urlopu bez netu tongue.gif
slawoo
Niestety nie ja to pisałem. Ja chce to tylko zmodyfikować, wiec nie wiem dlaczego jest tak a nie inaczej.

Tutaj podaje cały plik formularza w pliku tpl:
http://www.wklej.org/id/156356/

Tutaj natomiast podaje cały plik wyświetlanej listy po wprowadzeniu danych z formularza
http://www.wklej.org/id/156358/

jak widać sprawa dotyczaca rezerwacji stalej i tymczasowej działa.
sebekzosw
nie czaję też po co te dwukropki? może napisz od nowa to wszystko... i taka sugestia...

w select napisz to wszystko na pętli smile.gif
mls
Dziwne, że jak dotąd nikt nie zauważył, że zastosowany system szablonów to nie Smarty...
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.