Ublaboo datagrid tree view

Isigarek
Člen | 74
+
+1
-

Ahoj, používám tuto skvělou komponentu a mám jeden problém. Sice jsem projížděl oficiální dokumentaci k TreeView ale pořád mi nefunguje, jak má a proto bych Vás chtěl poprosit o radu.

Dokumentace: https://ublaboo.org/…id/tree-view
Kód datagridu:

protected function createComponentDatagrid($name)
    {
        $categoryManager = new CategoryManager($this->core);

        $grid = new DataGrid();
        $grid->setPrimaryKey("ID");
        $grid->setDataSource($this->core->getDb()->table(Category::TABLE));

        $grid->setTreeView(function($childrenID){
            Dumper::dump($childrenID);
        },"parent");

        $grid->addColumnText("name","Název");
        $grid->addColumnText("description","Popis");
        $grid->addColumnText("parent","Nadřazená kategorie")
            ->setRenderer(function($item) use ($categoryManager){
                $cat = new Category($item->ID);
                $cat->associate($categoryManager->get($cat));
                if(!is_null($cat->getParent()->getID())){
                    $cat->getParent()->associate($categoryManager->get($cat->getParent()));
                    return $cat->getParent()->getName();
                }else{
                    return "žádná";
                }
            });
        $grid->addAction('delete', '', 'delete!')
            ->setIcon('trash')
            ->setTitle('Smazat')
            ->setClass('btn btn-xs btn-danger ajax')
            ->setConfirm('Do you really want to delete row %s?', 'name');
        return $grid;
    }

Chápu, že teď je kód nepoužitelný ale abychom se vrátili k našemu problému. Může mi někdo vysvětlit co přesně má znamenat první parametr funkce setTreeView? A krom toho jsem se dočetl tu na fóru při hledání v main tématech, že druhý parametr má řešit jestli daný řádek má podřádky nebo ne. Proto jsem tam dal jednoduše parent protože buď je tam ID sloupce nebo NULL a i když je tam null tak vždy hází pro všechny možnost otevření dalších – šipečka pro rescroll

Může mi nějaký dobrotinec jednoduše vysvětlit, jak to použít?

Btw: Občas používám i manager a třídy pro table takže i když budu mít objekt, který bude v parentu pokračovat dalším objektem a podobně tak to nefunguje

rkor
Člen | 62
+
+1
-

První parametr je callback, který ti vrátí data z tabulky k příslušnému řádku (od datagridu dostaneš parent id), druhý parametr říká, zda řádek obsahuje potomky.

Jednoduchý příklad:

$grid->setTreeView([$this, 'getChildren'], 'hasChildren');

public function getChildren($parentId) {
        return $this->database->table('items')->where('parentId',$parentId);
    }

public function hasChildren($parentId) {
        return $this->database->table('items')->where('parentId',$parentId)->count() > 0 ? true : false;
    }

Editoval rkor (4. 3. 2018 21:18)

Isigarek
Člen | 74
+
0
-

Tam jde právě o tu věc, že parametr hasChildren i když je anonymní funkce která vrací 0 – false tak stejně ukazuje možnost rozložení.

Isigarek
Člen | 74
+
0
-
$grid->setTreeView(function($childrenID){
            return $this->core->getDb()->table(Category::TABLE)->where("parent",$childrenID);
        },function(){
            return false;
        });

Funguje první. Nefunguje druhá funkce i když jsem zkoušel všechny ostatní možnosti, viz výše.

rkor
Člen | 62
+
+1
-

Už jsem na to přišel – v Bootstrap 4 už není class hidden, tím pádem se tam ukazuje šipka. Pokud zkusíš Bootstrap 3.3.7, tak se to zobrazuje správně. Buď použít starší Bootstrap, nebo do svého CSS přidat .hidden

Honza.Mottl
Člen | 104
+
+1
-

Taky se jsem potrapil s TreeView. DataGrid je vybornej. TreeView neni dost popsane a zda se mi malo zobecnene. Neda se pouzit funkcnost jako je sablona a InLine editing. Je to spise aplikace nad DataGridem nez soucast DataGridu.

  1. priklad na callback viz vyse mi pomohl, ale jeste neni uplne presny. HasChildern dostava jako parametr ActiveRow.
$grid->setTreeView(function($childrenID){
            return $this->core->getDb()->table(Category::TABLE)->where("parent",$childrenID);
        },
	function($row){
            return intval($row['hasChildren']) > 0;
        });
  1. I po teto uprave se mi to porad nerozbalovalo. Az me napadlo zakomentovat mou vlastni sablonu a ono se to konecne rozjelo:) Takze pouzit sablonu u TreeView neni mozne…
// $grid->setTemplateFile('...');
  1. Ted uz se mi to rozbaluje a sbaluje. Ale je to horizontalne rozhozene. Negeneruje se html tabulka, ale je to poskladane z divu a nesedi mi to s hlavickou. Zatim jsem neprisel na to jak se to da nastylovat, aby sloupce zarezavaly.
  2. Prestal mi fungovat InLine editing, prislusna akce mi zmizela z DataGridu
Honza.Mottl
Člen | 104
+
0
-

5. prestaly fungovat filtry.

KristianSubweb
Člen | 144
+
0
-

Ahojte, chcel by som sa opýtať či sa toto medzičasom nefixlo. Mám rovnaký problém s novým datagridom kde presne po kliknuti na rozbalenie sa mi na pozadí zavolá XHR volanie ktore vygeneruje payload krorý obsahuje štruktúru html no to je všetko.