Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ 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
Príspevok NapísalOffline : 20.11.2013 14:33

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
Príspevok NapísalOffline : 20.11.2013 16:32

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
Príspevok Napísal autor témyOffline : 20.11.2013 18:20

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
Príspevok NapísalOffline : 20.11.2013 20:57

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
Príspevok Napísal autor témyOffline : 20.11.2013 21:52

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
Príspevok NapísalOffline : 21.11.2013 6:59

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
Príspevok Napísal autor témyOffline : 21.11.2013 16:52

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
Príspevok NapísalOffline : 21.11.2013 19:32

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
Príspevok Napísal autor témyOffline : 22.11.2013 11:45

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
Príspevok NapísalOffline : 22.11.2013 15:15

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
Príspevok Napísal autor témyOffline : 24.11.2013 11:36

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
Príspevok Napísal autor témyOffline : 25.11.2013 14:42

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.


Odpovedať na tému [ Príspevkov: 12 ] 


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

688

30.03.2009 20:07

enuwa1 Zobrazenie posledných príspevkov

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

v PHP, ASP

15

1033

15.10.2007 20:27

Blackshadow Zobrazenie posledných príspevkov

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

989

04.01.2022 8:44

webko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nastavenie "radio button" pomocou URL

v Ostatné

1

296

24.01.2015 21:36

weroro Zobrazenie posledných príspevkov

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

v JavaScript, VBScript, Ajax

6

305

29.05.2013 14:18

xxx9955 Zobrazenie posledných príspevkov

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

v PHP, ASP

9

529

01.04.2010 17:36

camo Zobrazenie posledných príspevkov

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

v PHP, ASP

1

579

10.07.2011 14:31

Ďuri Zobrazenie posledných príspevkov

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

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

0

463

25.04.2011 16:35

zaefrim Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. SimpleXML -> addChild na začiatok stromu

v PHP, ASP

2

498

24.08.2009 22:03

Tominator Zobrazenie posledných príspevkov

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

905

26.04.2014 22:21

F3RY Zobrazenie posledných príspevkov

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

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

1

716

30.06.2009 12:42

neutronmind Zobrazenie posledných príspevkov

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

v Internetový marketing, SEO, reklama

9

1515

08.11.2009 22:37

Draex Zobrazenie posledných príspevkov

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

v Siete

2

677

19.06.2008 16:11

Electrol Zobrazenie posledných príspevkov

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

v Siete

11

520

13.06.2012 19:19

erik518 Zobrazenie posledných príspevkov

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

v Sieťové a internetové programy

3

788

04.10.2007 15:12

Jaro Zobrazenie posledných príspevkov

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

v Sieťové a internetové programy

3

702

17.10.2008 14:54

Freelan Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra