[ 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

716

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

1080

15.10.2007 20:27

Blackshadow

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

Ako sa dá zmeniť URL adresa v článku na Webnode?

v Webhosting a servery

0

1273

04.01.2022 8:44

webko

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

Nastavenie "radio button" pomocou URL

v Ostatné

1

325

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

339

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

580

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

754

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

506

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

522

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

958

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

757

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

1593

08.11.2009 22:37

Draex

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

IP Adresa

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Siete

31

9478

16.12.2010 18:30

jarka golodzejova

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

Absolútna adresa

v Ostatné

7

1647

09.01.2008 16:25

filip102

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

ip adresa

v Sieťové a internetové programy

3

470

21.08.2011 11:43

trso

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

IP adresa

v Sieťové a internetové programy

3

998

26.07.2006 19:21

ScorpionSX



© 2005 - 2024 PCforum, edited by JanoF