Diskuze: Stromový systém

PHP PHP Stromový systém American English version English version

Avatar
Inoue Yūki
Redaktor
Avatar
Inoue Yūki:

Zdravím,

potřeboval bych vytvořit stromovou strukturu pro jakýsi file systém. Výsledný vzhled můžete vidět v příloze. Zkoušel jsem to pomocí rekurze, ale zjistil jsem, že na to nemám dostatek zkušeností. :D Se stromovými strukturami jsem ještě nepracoval, tak bych potřeboval nějak nasměrovat.

Předem díky za odpověď. :)

Odpovědět 23.10.2015 16:14
Avatar
shaman
Člen
Avatar
Odpovídá na Inoue Yūki
shaman:

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);
}

?>
Nahoru Odpovědět 23.10.2015 16:37
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na shaman
Inoue Yūki:

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íš. :)

Editováno 23.10.2015 16:44
Nahoru Odpovědět 23.10.2015 16:44
Avatar
d4rkw34v3r
Člen
Avatar
Odpovídá na Inoue Yūki
d4rkw34v3r:

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ě.

 
Nahoru Odpovědět 23.10.2015 17:01
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na d4rkw34v3r
Inoue Yūki:

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. :)

Nahoru Odpovědět 23.10.2015 17:12
Avatar
TomasGlawaty
Člen
Avatar
Odpovídá na Inoue Yūki
TomasGlawaty:

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 :)

Nahoru Odpovědět  +2 23.10.2015 20:28
Člověk může dosáhnout čeho si zamane. Jen musí chtít, případně něco obětovat ...
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na TomasGlawaty
Inoue Yūki:

Díky, zítra se na to podívám a možná to implementuju.

Nahoru Odpovědět 23.10.2015 20:35
Avatar
TomasGlawaty
Člen
Avatar
Nahoru Odpovědět 27.10.2015 16:47
Člověk může dosáhnout čeho si zamane. Jen musí chtít, případně něco obětovat ...
Avatar
Inoue Yūki
Redaktor
Avatar
Odpovídá na TomasGlawaty
Inoue Yūki:

Nechal jsem to jen dvouvrstvý. Možná se k tomu někdy vrátím. :)

Nahoru Odpovědět 27.10.2015 16:53
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.