Witam, otóż mam dziwny błąd podczas wyświetlania wyników z mysql'a na smartach.

Dwa przykłady:

Kod tpl:

  1. Ta działa: <br />
  2.  
  3. {foreach item=row1 from=$tplwykonanyobiekt}
  4. {$row1.nazwa} <br />
  5. {/foreach}
  6.  
  7. Wyswietla wszystkie wyniki.
  8.  
  9. {foreach item=row2 from={$tplobiekt->getCos}}
  10. {$row2.nazwa} <br />
  11. {/foreach}
  12.  
  13. Ta nie wyswietla nic...


Kod php:

  1. <?php
  2. class testobiekt
  3. {
  4. // ...
  5.  
  6. public function getCos()
  7. {
  8. $query = $this->db->query("SELECT * FROM `sciagi`");
  9. while ($row = $this->db->fetch_array($query))
  10. $results[] = $row;
  11. return $results;
  12. }
  13. }
  14.  
  15. //...
  16.  
  17. $obiekt = new testobiekt($db);
  18. $smarty = new Smarty;
  19.  
  20. $smarty->assign('tplwykonanyobiekt', $obiekt->getCos()); //zmienna pomocnicza dla pierwszej petli ktora dziala
  21. $smarty->registerObject('tplobiekt', $obiekt); // przekazanie obiektu dla drugiej petli ktora nie wyświetla nic
  22. $smarty->display('tabelka2.tpl');
  23. //...
  24. ?>


Więc, jak już wcześniej opisałem w komentarzach, chodzi o to, że są to praktycznie dwie identyczne pętle. Pierwsza jest tylko używana z użyciem zmiennej pomocniczej z tym obiektem i działa prawidłowo a druga która bezpośrednio czyta z obiektu nie wyświetla nic. Według mnie to jest dziwna sprawa.

Co nie gra w tej drugiej pętli. Chciałbym właśnie używać drugiej pętli bo co jak chciałbym np. użyć parametru ? np from={$tplobiekt->getCos -p1 'parametr'}. Pierwsza pętla mi na takie coś nie pozwala i jest praktycznie bez użyteczna dlatego chce zrobić aby zadziałała jakoś ta druga pętla i mógłbym się odwoływać bezpośrednio bez zmiennej pomocniczej.