Od razu zaznaczam, że przeszukiwałem 4 godziny google i wszystkie możliwe fora, aby znaleźć rozwiązanie mojego problemu jednak z żadnym efektem. Problem jest dość banalny, ale nie mam już żadnego pomysłu jak go rozwiązać.
1. Piszę w Zend Frameworku a widok mam pisany z użyciem Smarty.
Mam następujący problem (maksymalnie upraszczam i wyrywam z kontekstu):
Kontroller:
Kod
//wybieramy wszystkie kategorie z bazy danych i przesylamy do widoku
$category = new Shopcategory();
$this->view->category = $category->fetchAll(NULL, NULL, NULL, NULL);
$category = new Shopcategory();
$this->view->category = $category->fetchAll(NULL, NULL, NULL, NULL);
Widok:
Kod
//wyświetlamy kategorie dwa razy tą samą pętlą foreach
{foreach from=$category item=category name=category}
Zmienna ma wartość: {$category->name}
{/foreach}
{foreach from=$category item=category name=category}
Zmienna ma wartość: {$category->name}
{/foreach}
{foreach from=$category item=category name=category}
Zmienna ma wartość: {$category->name}
{/foreach}
{foreach from=$category item=category name=category}
Zmienna ma wartość: {$category->name}
{/foreach}
Tak! To są dwie takie same pętle.
Wykonuje się tylko pierwsza, każda kolejna nie.
Wcześniej, gdy używałem języka PHP w widoku (przed zainstalowaniem smarty) wszystko działało ślicznie, pętla powtarzała się tyle razy, ile chciałem.
Kod
foreach($this->category as $category) :
echo 'Zmienna ma wartość: '. $category->name .' ';
endforeach;
foreach($this->category as $category) :
echo 'Zmienna ma wartość: '. $category->name .' ';
endforeach;
echo 'Zmienna ma wartość: '. $category->name .' ';
endforeach;
foreach($this->category as $category) :
echo 'Zmienna ma wartość: '. $category->name .' ';
endforeach;
Moje pytanie brzmi: Jak zmusić drugą pętlę foreach w smarty do tego, żeby się wykonała od początku?
Czego próbowałem:
1. {assign var=$smarty.foreach.category.index value=0} - wartość się nie zmienia w żadnym momencie [ani w pętli, ani poza nią].
2. {php} Działający kod PHP {/php} - wyrzuca błąd
3. Wstawienie w kontrolerze do każdego przedmiotu z osobna tablicy z całą listą kategorii (wyrzuca błędy, bardzo nieeleganckie rozwiązanie).
Nie będę na razie się za bardzo rozpisywał, bo coś czuję, że rozwiązanie tego problemu jest banalnie proste, tylko ja raczkuję w Smarty..
W oryginale jest to jedna zagnieżdżona pętla, która ma się wyświetlać tyle samo razy, ile jest wyświetlonych przedmiotów jako menu do zmiany kategorii owego przedmiotu.
Pozdrawiam i będę rad za wskazówkę ...