[ Príspevkov: 12 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.11.13
Prihlásený: 05.02.14
Príspevky: 11
Témy: 3 | 3
NapísalOffline : 20.11.2013 14:33 | Url adresa zo stromu pomocou rekurzie

Pekný deň prajem všetkým,

Som tu nový, potreboval by som pomoc skúsenejších. Vypisujem strom klasicky z DB (Id, IdP, Name) pomocou rekurzie :

Kód:

<?php

function display_children($parent, $level) {
 
                $r = "SELECT a.Id, a.Name, Deriv1.Count FROM `Tree` a  LEFT OUTER JOIN (SELECT IdP, COUNT(*) AS Count FROM `Tree` GROUP BY IdP) Deriv1 ON a.Id = Deriv1.IdP WHERE a.IdP=".$parent." ORDER BY Poradie";
                $result = mysql_query($r);
                echo "<ul id='menu'>";
                while ($row = mysql_fetch_array($result)) {
                    if ($row['Count'] > 0) {
                       
                        if($row['Id'] != '-2147483647') {
           
                        echo "<li><a title='test' href='index.php?s=produkty&k=".$row['Id']."'>" . $row['Name'] . "</a> [ ".$row['Id']." ] ";
 
                        display_children($row['Id'], $level + 1);
                         
                        echo "</li>";
                       
                        }
                       
                    } elseif ($row['Count']==0) {
                        /*
                        $Select = MySQL_Query("SELECT count(Id2) as Total FROM Tree WHERE Id = '".$row['Id']."'");
                        $Data = mysql_fetch_assoc($Select);
                        */
                        echo "<li><a href='index.php?s=produkty&k=".$row['Id']."'>" . $row['Name'] . "</a>  [ ".$row['Id']." ] ";
                       
                        echo "</li>";
                    } else;
                }
                echo "</ul>";
            }

display_children(0, 1);

?>



Funkcia robí čo má, vytvorí strom ktorý sa dá ďalej upravovať a vypisovať podľa potrieb. Avšak keďže v DB nemám uložené žiadne Url chcel by som ich generovať pomocou Id - čiek, síce budú škaredé ale aj to sa dá potom dotiahnuť.

Každá položka v strome pekne vedľa seba vypíše svoje Id, ja by som však potreboval aby každá položka vedľa seba vypísala aj Id všetkých položiek pred sebou. Určite sú aj jednoduchšie riešenia a znalejší to vedia.

Momentálne:

Kód:
-Hry [1]
--Counter Strike [2]
---Counter Strike 1.5 [3]
---Counter Strike 1.6 [4]
-Knihy [5]
--Programovanie [6]
---C++ [7]
---PHP5 [8]
...


Ja si predstavujem niečo takéto:

Kód:
-Hry [1]
--Counter Strike [1] - [2]
---Counter Strike 1.5 [1] -[2] - [3]
---Counter Strike 1.6 [1] -[2] - [4]
-Knihy [5]
--Programovanie [5] - [6]
---C++ [5] - [6] - [7]
---PHP5 [5] - [6] - [8]
...


S tých Id čiek si potom budem vedieť postaviť konkrétnu cestu.

Všetkým ochotným vopred Ďakujem. :)

Joffi


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.09
Prihlásený: 08.07.15
Príspevky: 169
Témy: 46 | 46
NapísalOffline : 20.11.2013 16:32 | Url adresa zo stromu pomocou rekurzie

Skus nieco taketo, nahrad len to co som ti poslal ostatok si nechaj
(Neskusal som to ale nejak takto by to malo fungovat)
Kód:
function display_children($parent, $level, &$id='')
{
   if($row['Id'] != '-2147483647') {
           
     $id = $row['Id']." - ";
     echo "<li><a title='test' href='index.php?s=produkty&k=".$row['Id']."'>" . $row['Name'] . "</a> [ ".$id." ] ";
 
     display_children($row['Id'], $level + 1, $id);
                         
     echo "</li>";
                       
  }
}


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.11.13
Prihlásený: 05.02.14
Príspevky: 11
Témy: 3 | 3
Napísal autor témyOffline : 20.11.2013 18:20 | Url adresa zo stromu pomocou rekurzie

Ahoj DeiForm,

Ďakujem za odpoveď, upravil som to a vyskusal

Kód:

function display_children($parent, $level, &$id='') {
 
                $r = "SELECT a.Id, a.Name, Deriv1.Count FROM `Tree` a  LEFT OUTER JOIN (SELECT IdP, COUNT(*) AS Count FROM `Tree` GROUP BY IdP) Deriv1 ON a.Id = Deriv1.IdP WHERE a.IdP=".$parent." ORDER BY Poradie";
                $result = mysql_query($r);
                echo "<ul id='menu'>";
                while ($row = mysql_fetch_array($result)) {
                    if ($row['Count'] > 0) {
                       
                        if($row['Id'] != '-2147483647') {
           
                        $id = $row['Id']." - ";
                       
                        echo "<li><a title='test' href='index.php?s=produkty&k=".$row['Id']."'>" . $row['Name'] . "</a> [ ".$id." ]";
 
                        display_children($row['Id'], $level + 1, $id);
                         
                        echo "</li>";
                       
                      }
                       
                    } elseif ($row['Count']==0) {

                        echo "<li><a href='index.php?s=produkty&k=".$row['Id']."'>" . $row['Name'] . "</a> [ ".$id." ]";
                       
                        echo "</li>";
                    } else;
                }
                echo "</ul>";
            }
                       
?>



Na každej vetve vypíše opať len jednu hodnotu, ale tektokrát niekedy rodiča nie orig. Id ... takže posun tam je :-) ... skusim porozmýšlať aj ja, ale toto je pre mňa ešte ďaleká cesta.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.09
Prihlásený: 08.07.15
Príspevky: 169
Témy: 46 | 46
NapísalOffline : 20.11.2013 20:57 | Url adresa zo stromu pomocou rekurzie

Pri priradzovani hodnoty do premennej $id to zmen na

Kód:
$id .= $row['Id']." - ";


Neviem ako sa to bude spravat rekurziu som davno nerobil. Ak tie hodnoty budu uchvoane aj pre dalsie polozky tak potom musis to $id vynulovat ked je level = 0


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.11.13
Prihlásený: 05.02.14
Príspevky: 11
Témy: 3 | 3
Napísal autor témyOffline : 20.11.2013 21:52 | Url adresa zo stromu pomocou rekurzie

Hej bolo to v tej bodke, teraz to ukazuje pekne akurát nabaľuje hodnoty ako si napísal ... ja som tiež s rekurziou dlho nerobil, ešte som zvedavý ako to idem vynulovať :-D , skúsim to cez unset();


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.09
Prihlásený: 08.07.15
Príspevky: 169
Témy: 46 | 46

Kód:
function display_children($parent, $level=0, &$id='') {
 
                $r = "SELECT a.Id, a.Name, Deriv1.Count FROM `Tree` a  LEFT OUTER JOIN (SELECT IdP, COUNT(*) AS Count FROM `Tree` GROUP BY IdP) Deriv1 ON a.Id = Deriv1.IdP WHERE a.IdP=".$parent." ORDER BY Poradie";
                $result = mysql_query($r);
                echo "<ul id='menu'>";
                while ($row = mysql_fetch_array($result)) {
                    if ($row['Count'] > 0) {
                       
                        if($row['Id'] != '-2147483647') {

                        if ($level == 0) $id='';                         

                        $id = $row['Id']." - ";
                       
                        echo "<li><a title='test' href='index.php?s=produkty&k=".$row['Id']."'>" . $row['Name'] . "</a> [ ".$id." ]";
 
                        display_children($row['Id'], $level + 1, $id);
                         
                        echo "</li>";
                       
                      }
                       
                    } elseif ($row['Count']==0) {

                        echo "<li><a href='index.php?s=produkty&k=".$row['Id']."'>" . $row['Name'] . "</a> [ ".$id." ]";
                       
                        echo "</li>";
                    } else;
                }
                echo "</ul>";
            }


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.11.13
Prihlásený: 05.02.14
Príspevky: 11
Témy: 3 | 3
Napísal autor témyOffline : 21.11.2013 16:52 | Url adresa zo stromu pomocou rekurzie

Ja som skúšal,

Kód:

if ($level == 0) { unset($id); }



Ale prakticky mi to robilo to isté. Stále sa to nabaľuje ako aj v prípade

Kód:

if ($level == 0) $id='';



Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.09
Prihlásený: 08.07.15
Príspevky: 169
Témy: 46 | 46
NapísalOffline : 21.11.2013 19:32 | Url adresa zo stromu pomocou rekurzie

pozeram si si aj zaciatok funckie ? na zaciatok som pripisal $level=0


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.11.13
Prihlásený: 05.02.14
Príspevky: 11
Témy: 3 | 3
Napísal autor témyOffline : 22.11.2013 11:45 | Url adresa zo stromu pomocou rekurzie

Hej všimol som som si to, skúšal som to presne tak ako si vypísal ... avšak stále sa to nabaluje.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.08.09
Prihlásený: 08.07.15
Príspevky: 169
Témy: 46 | 46
NapísalOffline : 22.11.2013 15:15 | Url adresa zo stromu pomocou rekurzie

Pozeral som ako mam spravenu rekurziu v menu ja. Takze:

- po vybere z databazy to ukladam do pola, ak obsahuje polozka pod polozky ukladam to do 'subcats' a tam sa vytvara dalsie pole, potom na vypisovanie mam dalsiu funkciu.

Takze to skus zmenit tak aby ti to vytvaralo 2 rozmerne pole takejto struktury

Kód:
array(
1=>array('id'=>1, 'name'=>'Hry', subcats=>array(
       1=>array('id'=>1, 'name'=>'CS 1.6'), 2=>array('id'=>2, 'name'=>'CS 1.5')
    );
);


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.11.13
Prihlásený: 05.02.14
Príspevky: 11
Témy: 3 | 3
Napísal autor témyOffline : 24.11.2013 11:36 | Url adresa zo stromu pomocou rekurzie

Skúsim to, ďakujem za radu.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 20.11.13
Prihlásený: 05.02.14
Príspevky: 11
Témy: 3 | 3
Napísal autor témyOffline : 25.11.2013 14:42 | Url adresa zo stromu pomocou rekurzie

Napadla ma taká vec. Neviem či je to extra dobre riešenie, ale pokiaľ ja vlastne viem posledné Id, tak si tie údaje viem vytiahnuť spätnou rekurziou. Skúšal som to a funguje to. A ešte raz ďakujem za rady.


 [ Príspevkov: 12 ] 


Url adresa zo stromu pomocou rekurzie



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

vyber pomocou URL

v PHP, ASP

10

464

30.03.2009 20:07

enuwa1

V tomto fóre nie sú ďalšie neprečítané témy.

Meniaca URL pomocou include

v PHP, ASP

15

620

15.10.2007 20:27

Blackshadow

V tomto fóre nie sú ďalšie neprečítané témy.

Nastavenie "radio button" pomocou URL

v Ostatné

1

101

24.01.2015 21:36

weroro

V tomto fóre nie sú ďalšie neprečítané témy.

reset stromu dTree

v JavaScript, VBScript, Ajax

6

96

29.05.2013 14:18

xxx9955

V tomto fóre nie sú ďalšie neprečítané témy.

Ukladanie mimo stromu dokumentov

v PHP, ASP

9

253

01.04.2010 17:36

camo

V tomto fóre nie sú ďalšie neprečítané témy.

SEF url alebo pekná url

v PHP, ASP

1

301

10.07.2011 14:31

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Vypis binarneho stromu ako grafu

v Assembler, C, C++, Pascal, Java

0

321

25.04.2011 16:35

zaefrim

V tomto fóre nie sú ďalšie neprečítané témy.

SimpleXML -> addChild na začiatok stromu

v PHP, ASP

2

370

24.08.2009 22:03

Tominator

V tomto fóre nie sú ďalšie neprečítané témy.

realna adresa IP vs virualna Ip adresa

v Sieťové a internetové programy

5

318

26.04.2014 22:21

F3RY

V tomto fóre nie sú ďalšie neprečítané témy.

adresa

v Assembler, C, C++, Pascal, Java

1

463

30.06.2009 12:42

neutronmind

V tomto fóre nie sú ďalšie neprečítané témy.

adresa

v Internetový marketing, SEO, reklama

9

1118

08.11.2009 22:37

Draex

V tomto fóre nie sú ďalšie neprečítané témy.

IP ADRESA

v Sieťové a internetové programy

21

1166

07.10.2009 13:06

driver144

V tomto fóre nie sú ďalšie neprečítané témy.

IP adresa

v Ostatné

4

623

12.03.2009 18:30

sedlon

V tomto fóre nie sú ďalšie neprečítané témy.

IP ADRESA

v Siete

1

97

02.12.2013 18:38

_Mailo_

V tomto fóre nie sú ďalšie neprečítané témy.

MAC ADRESA

v Ovládače

4

901

03.01.2010 16:42

Vikinger

V tomto fóre nie sú ďalšie neprečítané témy.

IP adresa

v Služby a webstránky

1

94

06.02.2017 20:59

killer



© 2005 - 2017 PCforum, edited by JanoF