Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z pętlami
krzysiek9394
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.09.2009

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


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ć?
Go to the top of the page
+Quote Post
jarrod
post
Post #2





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

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


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





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.09.2009

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


  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']; ?>


Ten post edytował krzysiek9394 27.09.2009, 12:56:33
Go to the top of the page
+Quote Post
jarrod
post
Post #4





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

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


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
Go to the top of the page
+Quote Post
krzysiek9394
post
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 4.09.2009

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


już poprawiłem haha.gif ale wciąż nie wiem gdzie jest błąd...

Edit: problem rozwiązany smile.gif . Temat do zamknięcia

Ten post edytował krzysiek9394 27.09.2009, 14:45:19
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 Aktualny czas: 20.08.2025 - 10:03