| | |
| Stránka: 1 z 1
| [ Príspevkov: 12 ] | |
Autor | Správa |
---|
Registrovaný: 20.11.13 Prihlásený: 05.02.14 Príspevky: 11 Témy: 3 | Napísal Joffi: 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
|
|
Registrovaný: 27.08.09 Prihlásený: 08.07.15 Príspevky: 169 Témy: 46 |
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>"; } }
|
|
Registrovaný: 20.11.13 Prihlásený: 05.02.14 Príspevky: 11 Témy: 3 | Napísal autor témy Joffi: 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.
|
|
Registrovaný: 27.08.09 Prihlásený: 08.07.15 Príspevky: 169 Témy: 46 |
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
|
|
Registrovaný: 20.11.13 Prihlásený: 05.02.14 Príspevky: 11 Témy: 3 | Napísal autor témy Joffi: 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ť , skúsim to cez unset();
|
|
Registrovaný: 27.08.09 Prihlásený: 08.07.15 Príspevky: 169 Témy: 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>"; }
|
|
Registrovaný: 20.11.13 Prihlásený: 05.02.14 Príspevky: 11 Témy: 3 | Napísal autor témy Joffi: 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='';
|
|
Registrovaný: 27.08.09 Prihlásený: 08.07.15 Príspevky: 169 Témy: 46 |
pozeram si si aj zaciatok funckie ? na zaciatok som pripisal $level=0
|
|
Registrovaný: 20.11.13 Prihlásený: 05.02.14 Príspevky: 11 Témy: 3 | Napísal autor témy Joffi: 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.
|
|
Registrovaný: 27.08.09 Prihlásený: 08.07.15 Príspevky: 169 Témy: 46 |
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') ); );
|
|
Registrovaný: 20.11.13 Prihlásený: 05.02.14 Príspevky: 11 Témy: 3 | Napísal autor témy Joffi: 24.11.2013 11:36 | |
|
Skúsim to, ďakujem za radu.
|
|
Registrovaný: 20.11.13 Prihlásený: 05.02.14 Príspevky: 11 Témy: 3 | Napísal autor témy Joffi: 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.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 12 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| vyber pomocou URL v PHP, ASP | 10 | 688 | 30.03.2009 20:07 enuwa1 | | Meniaca URL pomocou include v PHP, ASP | 15 | 1033 | 15.10.2007 20:27 Blackshadow | | Ako sa dá zmeniť URL adresa v článku na Webnode? v Webhosting a servery | 0 | 989 | 04.01.2022 8:44 webko | | Nastavenie "radio button" pomocou URL v Ostatné | 1 | 296 | 24.01.2015 21:36 weroro | | reset stromu dTree v JavaScript, VBScript, Ajax | 6 | 305 | 29.05.2013 14:18 xxx9955 | | Ukladanie mimo stromu dokumentov v PHP, ASP | 9 | 529 | 01.04.2010 17:36 camo | | SEF url alebo pekná url v PHP, ASP | 1 | 579 | 10.07.2011 14:31 Ďuri | | Vypis binarneho stromu ako grafu v Assembler, C, C++, Pascal, Java | 0 | 463 | 25.04.2011 16:35 zaefrim | | SimpleXML -> addChild na začiatok stromu v PHP, ASP | 2 | 498 | 24.08.2009 22:03 Tominator | | realna adresa IP vs virualna Ip adresa v Sieťové a internetové programy | 5 | 905 | 26.04.2014 22:21 F3RY | | adresa v Assembler, C, C++, Pascal, Java | 1 | 716 | 30.06.2009 12:42 neutronmind | | adresa v Internetový marketing, SEO, reklama | 9 | 1515 | 08.11.2009 22:37 Draex | | IP ADRESA v Siete | 2 | 677 | 19.06.2008 16:11 Electrol | | Ip adresa v Siete | 11 | 520 | 13.06.2012 19:19 erik518 | | IP adresa v Sieťové a internetové programy | 3 | 788 | 04.10.2007 15:12 Jaro | | IP adresa v Sieťové a internetové programy | 3 | 702 | 17.10.2008 14:54 Freelan |
| 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
|
|