Diskuze: Stromový systém
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Kukni sa na kod nizsie. Ten ti vrati pole so vsetkymi cestami a nazvami suborov. Ako si to nastylujes je na tebe.
<?php
$path = realpath('/cesta/do/adresara');
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $name => $object){
//echo "$name\n";
var_dump($object);
}
?>
Promiň, zapomněl jsem říct, že nejde o fyzické složky, ale o data v databázi. Strukturu můžu klidně upravit, zatím mám ale tabulku se sloupci "folder.title" a "folder.parent_id". V PHP pak potřebuju vypsat do první úrovně složky bez rodiče a pod ně složky, které mají jako rodiče danou složku. Snad mi rozumíš.
Co se týče tý struktury, tak záleží, jakou databázi používáš(myslím, že třeba mysql není moc efektivní, co se týče rekurzivních dotazů), množství dat v tý tabulce, jestli se do tý tabulky budou často přidávat další položky nebo se z ní bude spíše číst a v neposlední řadě, jestli ti záleží na pořadí prvků při výpisu.
Mrkni se na http://www.slideshare.net/…rchical-data
Pak si stačí dohledat nástroje pro práci s těmito typy uložení, nebo si je napsat sám. To už záleží na tobě.
Prošel jsem to a vypadá to, že všechna řešení pro MySQL by byla neefektivní. Zřejmě udělám jen dvě vnoření. Ale moc díky za pomoc.
Taky jsem tohle dřive řešil.
Když chceš ten 'strom' vykreslit tak s nejprve vytáhni všechna data z
databáze a s těmy pak pracuj (s polem)
Nějak takhle by to mohlo vypada (píšu z hlavy):
public function getCategoryTreeRecursive($id_parent = 0)
{
foreach ($this->category as $row)
{
if ($row['id_parent'] === $id_parent)
{
echo '<ul>';
echo '<li>';
echo '<i class="fa fa-folder"></i>' . $row['name'];
$this->getCategoryTreeRecursive($row['id']);
echo '</li>';
echo '</ul>';
}
}
}
Tabulka vypadá takto:
id | id_parent | name |
1 | 0 | folder1 |
2 | 0 | folder2 |
3 | 2 | folder3 |
...
Nejprve si někde zavoláš dotaz do DB a vytáhneš si z ní vše (zde
$this->category).
Pak zavoláš tuto metodu, která to projede. Řekl bych, že to je docela i
rychlé, protože jde jen jeden dotaz do databáze.
Pokud by jsi nechtěl vykreslovat celý strom, ale jen určitou větev, existuje
metoda, které se říká Traverzování kolem stromu, tak můžeš kdyžtak
pohledat
Díky, zítra se na to podívám a možná to implementuju.
Nechal jsem to jen dvouvrstvý. Možná se k tomu někdy vrátím.
Zobrazeno 9 zpráv z 9.