Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [phptal] warunek w pętli
brobo
post 22.02.2012, 09:03:56
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 22.02.2012

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


Witam wszystkich, to mój dziewiczy post biggrin.gif

O jakiegoś czasu korzystam z PHPTAL - jestem zachwycony, jednak ostatnio próbuję skorzystać z warunków w pętli i się nie udaje . Niby wygląda ok, ale nie działa. Oto fragment szablonu:
  1. <li tal:repeat="item items">${item/title} -
  2. <span tal:condition="php: item.status EQ 0" class="status${item/status}" tal:omit-tag="">BAD</span>
  3. <span tal:condition="php: item.status NE 0" class="status${item/status}" tal:omit-tag="">OK</span>
  4. </li>


Status przyjmuje wartości 0,1,2.
Efekt pętli jest taki, że zawsze jest spełniony warunek 1 (jakby ${item/status} miał wartość cały czas 0), pomimo iż wartość statusu do klasy podstawiana jest poprawnie (0-2).

Jak powinien poprawnie wyglądać ten warunek?

Ten post edytował brobo 22.02.2012, 09:05:34
Go to the top of the page
+Quote Post
viking
post 22.02.2012, 17:22:04
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Warunek wygląda popranie. Pokaż var_dump($items);


--------------------
Go to the top of the page
+Quote Post
brobo
post 22.02.2012, 17:43:35
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 22.02.2012

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


Dzięki za odpowiedź, bałem się, że system jest jednak zbyt mało popularny... Oto jeden z elementów:

  1. array(2) {
  2. ["title"]=>
  3. string(5) "59.74"
  4. ["status"]=>
  5. int(3)
  6. }



Swoją drogą to dokumentacja nie jest mocną stroną tego systemu.

Ten post edytował brobo 22.02.2012, 17:44:03
Go to the top of the page
+Quote Post
viking
post 22.02.2012, 20:28:24
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


A masz włączone na devie raportowanie błędów? Kropka w php: oznacza -> co jest w dokumentacji opisane. Da ci to Notice: Trying to get property of non-object

  1. <?php
  2. /* tag "span" from line 47 */ ;
  3. if ($ctx->item->status != 0): ;
  4. ?>
  5. OK<?php endif; ?>
  6.  
  7. </li><?php
  8. endforeach ;
  9. $ctx = $tpl->popContext() ;
  10. ?>


TAL jest świetnie opisany z masą przykładów jak poszukasz oryginału z Pythona. Nie wszystko w PHPTAL jest zaimplementowane.


--------------------
Go to the top of the page
+Quote Post
brobo
post 23.02.2012, 10:19:13
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 22.02.2012

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


Nie chciałbym się wykazywać tutaj jakąś ignorancją, ale szczerze powiedziawszy Twój post trochę przerósł moje umiejętności i wiedzę więc prosze o szczegóły.

Cytat(viking @ 22.02.2012, 20:28:24 ) *
A masz włączone na devie raportowanie błędów?

Przetwarzam szablony zgodnie z manualem (jak tutaj http://phptal.org/manual/en/split/firstexample.html), więc błedy mam wyświetlane, jakie są jeszcze możliwości raportowania - nie mam pojęcia.

Cytat
Kropka w php: oznacza -> co jest w dokumentacji opisane. Da ci to Notice: Trying to get property of non-object

Próbowałem już różnych opcji ($item/status, ${item/status}), ale takiego błędu nie otrzymałem.

Cytat
  1. <?php
  2. /* tag "span" from line 47 */ ;
  3. if ($ctx->item->status != 0): ;
  4. ?>
  5. OK<?php endif; ?>
  6.  
  7. </li><?php
  8. endforeach ;
  9. $ctx = $tpl->popContext() ;
  10. ?>

Nawet nie wiedziałem, że mogę posługiwać się wewnątrz szablonu do tego stopnia php, ale jednak chciałbym tego uniknąć - właśnie ta wymuszona czystość kodu szablonów najbardziej mi się podoba(ła). Jak mogę się jeszcze dostać do wartości w tej tablicy/zmiennej w tym warunku? Chyba jest jakiś sposób...

Cytat
TAL jest świetnie opisany z masą przykładów jak poszukasz oryginału z Pythona. Nie wszystko w PHPTAL jest zaimplementowane.

Dzięki, spróbuję, choć dodtychczas bałem się, że mój zupełny brak znajomości Pythona może być dużą przeszkodą.
Go to the top of the page
+Quote Post
viking
post 23.02.2012, 12:08:05
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Raportowanie błędów dotyczy samego PHP.

  1. ini_set('display_errors', 1);


Albo w logach serwera. Chyba oczywistym powinno być że pisanie w domu/pracy -> włączamy wszystkie żeby uniknąć błędów w kodzie. Na serwerze produkcyjnym na wszelki wypadek wyłączamy.

Kod który Ci wkleiłem to efekt kompilacji tego fragmentu kodu. Jak widzisz kropka wewnątrz php: to -> co daje próbę odniesienia do obiektu w czasie gdy ty przekazujesz do szablonu tablicę. Zrzucasz tu logikę na widok. Najlepiej sprawdź gdzieś w modelu warunek i przekaż tylko true/false.


--------------------
Go to the top of the page
+Quote Post
brobo
post 23.02.2012, 19:00:27
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 22.02.2012

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


Cytat(viking @ 23.02.2012, 12:08:05 ) *
Raportowanie błędów dotyczy samego PHP.

  1. ini_set('display_errors', 1);


Albo w logach serwera. Chyba oczywistym powinno być że pisanie w domu/pracy -> włączamy wszystkie żeby uniknąć błędów w kodzie. Na serwerze produkcyjnym na wszelki wypadek wyłączamy.


To jasne, myślałem, że piszesz o talu. Jeśli chodzi o raportowanie (wszystkich) błędów to zawsze robię to warunkowo - jedną zmienną włączam/wyłączam raportowanie php, szablonów i mysql. W praktyce wygląda to dokładnie jak napisałeś - podczas pisania włączam, później wyłączam. Czasami, gdy zachodzi potrzeba obejrzenia błędów już podczas pracy ograniczam je drugą zmienną do (mojego) ip. Prosto i skutecznie.

Cytat
Kod który Ci wkleiłem to efekt kompilacji tego fragmentu kodu. Jak widzisz kropka wewnątrz php: to -> co daje próbę odniesienia do obiektu w czasie gdy ty przekazujesz do szablonu tablicę. Zrzucasz tu logikę na widok. Najlepiej sprawdź gdzieś w modelu warunek i przekaż tylko true/false.

Liczyłem na to, że uda się bez tworzenia kolejnych elementów tablicy sad.gif
Go to the top of the page
+Quote Post
viking
post 23.02.2012, 19:32:25
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


To po co w takim razie tworzysz tablicę?
  1. $jakisitem = new stdClass;
  2. $jakisitem->status = 1;
  3. $jakisitem->title = 'sss';


--------------------
Go to the top of the page
+Quote Post
brobo
post 24.02.2012, 14:57:04
Post #9





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 22.02.2012

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


I to jest chyba jedyny i właściwy kierunek, choć mnie osobiście średnio odpowiada, dlatego go unikałem (staare przyzwyczajenia).

Dzięki.
Go to the top of the page
+Quote Post
viking
post 24.02.2012, 15:54:22
Post #10





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Zależy jak generujesz model, czy np korzystasz z jakiegoś frameworka. Zawsze masz http://php.net/manual/en/class.arrayobject.php. Albo w PDO / innym zwracany obiekt bezpośrednio przekazać do PHPTALa. Wtedy praca jest super przyjemna. Ja osobiście korzystam z http://martinfowler.com/eaaCatalog/dataMapper.html . A wybór według mnie bardzo dobry i będziesz zadowolony. Nie wyobrażam sobie pracy z pseudo-sieczkowymi szablonami które akceptują dane jak popadnie. Później pojawia się płacz że parser XMLa w przeglądarkach jest zły, bo nie akceptuje różnych głupot.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 21:16