Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Lista nieuporządkowana rekurencyjnie
windman
post 15.01.2008, 14:48:32
Post #1





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


Witam,

mam funkcję rekurencyjną do wyświetlania stron

  1. <?php
  2. function menu($rodzic,$poziom) {
  3.  GLOBAL $prefix_tabela;
  4.  $rezultat=mysql_query("SELECT id,name,id_rodzica,page,publ FROM {$prefix_tabela}_pages ORDER BY id");
  5.  $razem=mysql_num_rows($rezultat);
  6.  while($wiersz = mysql_fetch_row($rezultat)){
  7. $id_k[]=$wiersz[0];
  8. $nazwa_k[]=$wiersz[1];
  9. $id_rodzica_k[]=$wiersz[2];
  10. $page_k[]=$wiersz[3];
  11. $publ_k[]=$wiersz[4];
  12.  }//while($wiersz = mysql_fetch_row($rezultat)){
  13.  
  14.  foreach($id_rodzica_k as $k=>$v) {
  15. if($v==$rodzic){
  16.  $e=str_repeat(' - ', $poziom);
  17.  echo $e.$nazwa_k[$k]."<br />";
  18.  menu($id_k[$k],$poziom+1);
  19. }//if($v==$rodzic){
  20. }//foreach($id_rodzica_k as $k=>$v) {
  21.  }//function menu($rodzic,$poziom) {
  22. ?>


i 2 pytania:

1) Wjaki sposób wyświetlić listę stron w postaci prawdziwej listy nieuporządkowanej.
2) Jka widać funkcja przy każdej rekurencji pobiera dane z bazy. Chciałem najpierw pobrać wszystko do tablicy aby funkcja operowała na tablicy, jednakże wtedy nie wyświetla się całe drzewo.

Ten post edytował windman 15.01.2008, 15:02:05
Go to the top of the page
+Quote Post
deirathe
post 15.01.2008, 14:51:32
Post #2





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


zmien tag na z html na php bo nic nie widac tongue.gif
super smile.gif

Ten post edytował deirathe 15.01.2008, 14:59:27


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
sefs
post 15.01.2008, 14:52:30
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 20.08.2007
Skąd: Szczecin

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


Może ci się przyda taka funkcja którą napisałem kiedyś:
Kod
function print_list($list) {
    $tab=explode("\n",$list);
    echo "<ul>\n";
    $tmp_lvl=0;
    foreach($tab as $line) {
        $lvl=substr_count($line, '+');
        $line=str_replace('+', '', $line);
        if($lvl>$tmp_lvl) for($i=$lvl-$tmp_lvl; $i>0; --$i) echo "<li>\n<ul>\n";
        else for($i=$tmp_lvl-$lvl; $i>0; --$i) echo "</ul>\n</li>\n";
        echo "<li>$line</li>\n";
        $tmp_lvl=$lvl;
    }
    for($i=$tmp_lvl; $i>0; --$i) echo "</ul>\n</li>\n";
    echo "\n</ul>";
}


Zamienia ona na listę nieuporządkowaną takie coś:
Cytat
pierwszy rząd
drugi rząd
+podkategoria 1
+podkategoria 2
+++podkategoria 3
+++podkategoria 4
+++++podkategoria last
+++++++podkategoria last 2
++++chyba?
++udalo sie chyba
++++++powali sie
++++++++++++bla bla
Go to the top of the page
+Quote Post
Sh4dow
post 15.01.2008, 14:59:32
Post #4





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


  1. <?php
  2. function menu($rodzic,$poziom) {
  3. GLOBAL $prefix_tabela;
  4. $rezultat=mysql_query("SELECT id,name,id_rodzica,page,publ FROM {$prefix_tabela}_pages ORDER BY id");
  5. $razem=mysql_num_rows($rezultat);
  6. while($wiersz = mysql_fetch_row($rezultat)){
  7. $id_k[]=$wiersz[0];
  8. $nazwa_k[]=$wiersz[1];
  9. $id_rodzica_k[]=$wiersz[2];
  10. $page_k[]=$wiersz[3];
  11. $publ_k[]=$wiersz[4];
  12. }//while($wiersz = mysql_fetch_row($rezultat)){
  13.  
  14. foreach($id_rodzica_k as $k=>$v) {
  15. if($v==$rodzic){
  16. $e=str_repeat(' - ', $poziom);
  17. echo $e.$nazwa_k[$k]."
  18. ";
  19. menu($id_k[$k],$poziom+1);
  20. }//if($v==$rodzic){
  21. }//foreach($id_rodzica_k as $k=>$v) {
  22. }//function menu($rodzic,$poziom) {
  23. ?>


co do pierwszego pytania to nie rozumiem, co do drugiego to masz zla strukture bazy danych. Musial bys pobrac wszystkie dane i przetworzyc ja zeby zrobic z tego jakies sensowne drzewo. Na wortalu jest artykuł o drzewkach. Mozesz poszukac na necie 'SQL tree'.


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
windman
post 15.01.2008, 20:27:43
Post #5





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


Cytat(Sh4dow @ 15.01.2008, 14:59:32 ) *
co do pierwszego pytania to nie rozumiem, co do drugiego to masz zla strukture bazy danych. Musial bys pobrac wszystkie dane i przetworzyc ja zeby zrobic z tego jakies sensowne drzewo. Na wortalu jest artykuł o drzewkach. Mozesz poszukac na necie 'SQL tree'.


Chodzi o to aby lista stron załadowała się do listy nieuporządkowanej
  1. <ul><li> Strona główna
  2. <ul><li>podstrona1
  3. </ul>
  4. </ul>


W tej chwili wyświetlają się myśliniki:
Strona gówna
- Podstrona1
-- PodstronaApodstrony1

Ten post edytował windman 15.01.2008, 20:31:12
Go to the top of the page
+Quote Post
deirathe
post 15.01.2008, 22:17:26
Post #6





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


  1. <?php
  2. function root($id)
  3. {
  4. $q=mysql_query("SELECT *FROM {$prefix_tabela}_pages WHERE id=".$id);
  5. $d = mysql_fetch_array($q);
  6. echo "<li>".$d['name'];
  7.  
  8. $q=mysql_query("SELECT *FROM {$prefix_tabela}_pages WHERE id_rodzica=".$id);
  9. echo "<ul>";
  10. while($temp = mysql_fetch_array($q))
  11. {
  12. root($temp['id']);
  13. }
  14. echo "</ul>";
  15. }
  16. echo "</li>";
  17.  
  18. }
  19. $q = mysql_query("SELECT *FROM {$prefix_tabela}_pages WHERE id_rodzica=0");
  20. while($t = mysql_fetch_array($q))
  21. {
  22. root($t['id']);
  23. }
  24. ?>

pisane z palca sprawdz czy nie ma bldow


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
Go to the top of the page
+Quote Post
windman
post 16.01.2008, 00:58:41
Post #7





Grupa: Zarejestrowani
Postów: 184
Pomógł: 13
Dołączył: 7.01.2008

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


Działa deirathe.

Dzięki wielkie!
Go to the top of the page
+Quote Post
sobstel
post 16.01.2008, 09:23:33
Post #8





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


ja tylko doradzę, że wyciąganie w ten sposób jest niezbyt wydajne (ze względu na mnożące się zapytania). polecam lekturę:
http://www.sitepoint.com/article/hierarchi...data-database/2
http://dev.mysql.com/tech-resources/articl...hical-data.html

Ten post edytował sopel 16.01.2008, 09:24:03


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
deirathe
post 16.01.2008, 12:19:16
Post #9





Grupa: Zarejestrowani
Postów: 426
Pomógł: 32
Dołączył: 24.05.2007

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


Narzekasz tongue.gif. A tak na poważnie to też popieram ale to było szybkie rozwiązanie z palca jezeli drzewko nie jest olbrzymie to sie sprawdzi. Co do lektury to tez sie zgadzam z naciskiem na ta 2-ga


--------------------
Kawałek mojego blogu
Everything should be as simple as possible but not simpler.
A Einstein
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: 5.06.2025 - 21:54