Stromová struktura s produkty a jejich kategoriemi

Dark0ne
Člen | 47
+
0
-

Zdravím,

potřebuji vytvořit stromovou strukturu produktů a jejich kategorií. Našel jsem Ublaboo datagrid Tree view https://ublaboo.org/…id/tree-view, kde se mi podařila vytvořit dynamická stromová struktura s kategoriemi produktu.

Tedy něco ve stylu:

--Produtky
	- Dům
		- Nábytek
	- Zahrada
		- Bazény

Nyní však narážím na problém s tím, že bych chtěl v dané stromové struktuře zobrazovat také produkty.

Použití datagridu

public function createComponentCategoriesGrid($name)
  {

      $grid = new DataGrid($this, $name);

      $fluent = $this->categoryModel->getSets()->where('set.parent_id', null);

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

      $grid->addColumnText('name', 'Name');
      $grid->addColumnText('id', 'Id');
  }

 public function getChildren($parentId)
  {
      return $this->categoryModel->getSets()->where('parent_id', $parentId);
  }



  public function hasChildren($parentId)
  {
      return $this->categoryModel->getSets()->where('parent_id', $parentId)->count() > 0 ? true : false;
  }

Nyní bych rád do struktury přidal i produkty, což je samozřejmě v jiné databázové tabulce. Obsahuje cizí klíč category_id, který určuje přímého rodiče (může být jen jeden).

Netuším, jak přesně postupovat, protože při nějakých pokusech se mi vždy podařilo zobrazovat buď pouze kategorie nebo produkty. Myslím, že to je docela běžná funkcionalita řady webu, takže tajně doufám, že to řešilo už více lidí a někdo vymyslel či použil lepší řešení.

Díky za všechny rady.

Dark0ne
Člen | 47
+
0
-

Opravdu nikdo netuší?

Kcko
Člen | 465
+
+1
-

A to musíš nutně řešit přes datagrid?

andros
Člen | 145
+
0
-

Já to řeším tak, že v jednom gridu mám seznam produktů (třeba se sloupcem kategorie, kde jsou všechny kategorie vypsané a můžu tak vyhledávat a třídit produkty i podle kategorií) a ve druhém gridu mám seznam kategorií. Ublaboo Tree view je hodně okleštěná šablona. Nemůžeš tam vyhledávat, třídit, používat stránkování, hromadné akce a vlastně všechno co ublaboo umí :)

MikKuba
Člen | 75
+
0
-

andros napsal(a):

Já to řeším tak, že v jednom gridu mám seznam produktů (třeba se sloupcem kategorie, kde jsou všechny kategorie vypsané a můžu tak vyhledávat a třídit produkty i podle kategorií) a ve druhém gridu mám seznam kategorií. Ublaboo Tree view je hodně okleštěná šablona. Nemůžeš tam vyhledávat, třídit, používat stránkování, hromadné akce a vlastně všechno co ublaboo umí :)

Ahoj,

Nemáš náhodou ještě v paměti nebo někde po ruce toto řešení prosím? Jak bylo myšleno to použití dvou gridů? Jsou potom nějak prolnuté do sebe, nebo čistě dva gridy vedle sebe nebo pod sebou?

Zkoušel jsem funkci co vytváří grid volat rekurzivně, pokud chci nějakému elementu co má potomky vytvořit vlastně pod sebou tu strukturu potomků, ale nic se nestalo.

Nějak takto jsem to zkoušel:

public function create($id = null)
	{
		$grid = new DataGrid();
        if($id){
               $grid->setTemplateFile(__DIR__ . '/../../templates/grid/menu_grid.latte');
        }
        $grid->setDataSource($this->getModel($id));
        // vypis jednotlivych prvku (id, name, active,...)
        // filtery, akce,...
       $grid->setRowCallback(function($item, $tr) {
               if($item->childs){
                             return $this->create($item->id);
               }
       });

		return $grid;

Tím modelem pak jen udávám, zda chci tahat bez ID celou strukturu rodičů anebo s ID už to hledá jen strukturu potomků daného rodiče.

Díky moc, pokud by někdo věděl rady! :)