Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z pętlami
Forum PHP.pl > Forum > Gotowe rozwiązania
krzysiek9394
Witam. Mam takie tabele w MySQL:
  1. Tabela linki_cat
  2. =>id // id kategorii
  3. =>nazwa //Nazwa kategorii
  4.  
  5. Tabela linki
  6. =>cat // Id kategorii do której jest przyporządkowany link
  7. =>tytul // Tytuł linka
  8. =>adres //Adres do którego prowadzi

Przykładowe dane:
  1. przykład - linki_cat[id][nazwa] || linki[cat][tytul][adres]
  2. linki_cat[1][Stronka]
  3. linki_cat[2][Inne]
  4. linki[1][Abc][abc]
  5. linki[1][Abcd][Abcd]
  6. linki[2][Dana][Dana]
  7. linki[2][Abecadło][Abecadło]

kod w php:
  1. $zapytanie = mysql_query("SELECT * FROM linki_cat ORDER BY id");
  2. $x = 0;
  3. while($wynik = mysql_fetch_array($zapytanie))
  4. {
  5. $cat[$x] = $wynik;
  6. $cat[$x]['id'] = $wynik['id'];
  7. $cat[$x]['nazwa'] = $wynik['nazwa'];
  8. $x++;
  9. }
  10.  
  11. $zapytanie = mysql_query("SELECT * FROM linki ORDER BY cat");
  12. $x = 0;
  13. while($wynik = mysql_fetch_array($zapytanie))
  14. {
  15. $linki[$x] = $wynik;
  16. $linki[$x]['id'] = $wynik['cat'];
  17. $linki[$x]['tytul'] = $wynik['tytul'];
  18. $linki[$x]['adres'] = $wynik['adres'];
  19. $x++;
  20. }
  21. $smarty->assign('cat', $cat);
  22. $smarty->assign('linki', $linki);

oraz kod w Smarty:
  1. {section name=x loop=$cat}
  2. <b>{$cat[x].nazwa}</b><br/>
  3. {section name=y loop=$linki}
  4. {if $linki[y].id !== $cat[x].id}
  5. {php}break;{/php}
  6. {/if}
  7. <dd><a href='{$linki[y].adres}'>{$linki[y].tytul}</a></dd><br/>
  8. {/section}
  9. {/section}

I problem polega na tym że nie wyświetlają się linki z kategorii 2 (pojawiają sie tylko linki z kategorii 1 oraz nazwa kategorii 2). Co tu poprawić?
jarrod
Ja bym to zrobił tak:

  1. $sql = "SELECT l.tytul, l.adres, c.nazwa
  2. FROM linki as l
  3. LEFT JOIN linki_cat as c
  4. ON c.id = l.cat
  5. ORDER BY c.id";
  6. $res = mysql_query($sql);
  7. $results = array();
  8. while($row = mysql_fetch_assoc($res)){
  9. $results[$row['nazwa']][] = array( 'tytul' => $row['tytul'], 'adres' => $row['adres'] );
  10. }
  11.  
  12. $smarty->assign('linki', $results);


i w smarty:
  1. {foreach from=$linki key=category item=linki_data name=linki_loop}
  2. {if $smarty.foreach.linki_loop.index == 0}
  3. <b>{$category}</b>
  4. {/if}
  5. <dd><a href="{$linki_data.adres}">{$linki_data.tytul}</a></dd><br/>
  6. {/foreach}
krzysiek9394
  1. Notice: Undefined index: tytul in (...)

Błąd wskazuje na tą linijkę: (ze skompilowanego już template'a):
  1. <?php echo $this->_tpl_vars['linki_data']['tytul']; ?>
jarrod
błąd Undefined index: tytul a wskazujesz linię w której jest $this->_tpl_vars['linki_data']['nazwa']; czyli nazwa...
Kod pisałem "z palca" więc powinieneś sprawdzić czy prawidłowo działa i ewentualnie poprawić smile.gif
krzysiek9394
już poprawiłem haha.gif ale wciąż nie wiem gdzie jest błąd...

Edit: problem rozwiązany smile.gif . Temat do zamknięcia
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.