Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/smarty] - rozbudowana pętla if else
slawoo
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
Berg
post
Post #2





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
slawoo
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2009

Ostrzeżenie: (0%)
-----


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}
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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}

Go to the top of the page
+Quote Post
slawoo
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
cudny
post
Post #6





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


  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();
Go to the top of the page
+Quote Post
thek
post
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.
Go to the top of the page
+Quote Post
slawoo
post
Post #8





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2009

Ostrzeżenie: (0%)
-----


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ś (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
thek
post
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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

Ten post edytował thek 25.09.2009, 10:28:15
Go to the top of the page
+Quote Post
slawoo
post
Post #10





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
sebekzosw
post
Post #11





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


slawoo, naucz się Smarty bo to co napisałeś z tymi dwukropkami jest błędne (IMG:style_emoticons/default/winksmiley.jpg) :| to co napisał cudny i thek jest prawidłową budową w Smarty (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
thek
post
Post #12





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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 (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
slawoo
post
Post #13





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.09.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
sebekzosw
post
Post #14





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mls
post
Post #15





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dziwne, że jak dotąd nikt nie zauważył, że zastosowany system szablonów to nie Smarty...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 00:50