Korzystam z Nested Tree (https://github.com/Atlantic18/DoctrineExten...ter/doc/tree.md) do budowania drzewa kategorii i mam problem z pobraniem kategorii podrzednych (getChildren()).
Struktura menu jest mniej wiecej taka:
Kategorie (root)
--Akcesoria lazienkowe
----kosze
----dozowniki
----wieszaki
--Wanny
--Kabiny prysznicowe
Jesli klikne w menu na kategorie (np. Wanny, czy Kabiny prysznicowe), ktora nie ma potomkow, wowczas korzystam w kontrolerze z ponizszego kodu do wyswietlania danych:
public function showcategoryAction($slug) { $em = $this->getDoctrine()->getEntityManager(); $category = $em->getRepository('MlFrontendBundle:Categories')->findOneBySlug($slug); if (!$category) { throw $this->createNotFoundException('Brak kategorii o podanym parametrze!'); } if ($category->getParent() && $category->getLvl() != 1) { return $this->render('MlFrontendBundle:Category:showcategory.html.twig', array('category' => $category)); } }
Dziala to dobrze. W templatce wyswietla mi sie nazwa pojedynczej kategorii i iine zadane informacje.
Problem mam z pobraniem potomkow z kategorii Akcesoria lazienkowe. Zachowanie powinno byc takie, ze po kliknieciu w menu powinna sie pojawic w templatce lista podkategorii.
Probuje w ten sposob:
$categories = $category->getChildren(); // nie dziala
Moja encja z kategoria:
namespace Ml\FrontendBundle\Entity; use Gedmo\Sluggable\Sluggable; //use Gedmo\Translatable\Translatable; use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; /** * Categories * * @Gedmo\Tree(type="nested") * @ORM\Table(name="categories") * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository") */ class Categories { /** * @var integer * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @Assert\NotBlank() * @ORM\Column(name="name", type="string", length=255) */ private $name; /** * @var string $slug * * @Gedmo\Slug(fields={"name"}) * @ORM\Column(length=255, unique=true) */ private $slug; /** * @Gedmo\TreeLeft * @ORM\Column(name="lft", type="integer") */ private $lft; /** * @Gedmo\TreeLevel * @ORM\Column(name="lvl", type="integer") */ private $lvl; /** * @Gedmo\TreeRight * @ORM\Column(name="rgt", type="integer") */ private $rgt; /** * @Gedmo\TreeRoot * @ORM\Column(name="root", type="integer", nullable=true) */ private $root; /** * @Gedmo\TreeParent * @ORM\ManyToOne(targetEntity="Categories", inversedBy="children") * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE") */ private $parent; /** * @ORM\OneToMany(targetEntity="Categories", mappedBy="parent") * @ORM\OrderBy({"lft" = "ASC"}) */ private $children; ... public function __toString() { return $this->name; } /** * Constructor */ public function __construct() { $this->children = new \Doctrine\Common\Collections\ArrayCollection(); $this->products = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name * * @return Categories */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Set slug * * @param string $slug * * @return Categories */ public function setSlug($slug) { $this->slug = $slug; return $this; } /** * Get slug * * @return string */ public function getSlug() { return $this->slug; } /** * Set lft * * @param integer $lft * * @return Categories */ public function setLft($lft) { $this->lft = $lft; return $this; } /** * Get lft * * @return integer */ public function getLft() { return $this->lft; } /** * Set lvl * * @param integer $lvl * * @return Categories */ public function setLvl($lvl) { $this->lvl = $lvl; return $this; } /** * Get lvl * * @return integer */ public function getLvl() { return $this->lvl; } /** * Set rgt * * @param integer $rgt * * @return Categories */ public function setRgt($rgt) { $this->rgt = $rgt; return $this; } /** * Get rgt * * @return integer */ public function getRgt() { return $this->rgt; } /** * Set root * * @param integer $root * * @return Categories */ public function setRoot($root) { $this->root = $root; return $this; } /** * Get root * * @return integer */ public function getRoot() { return $this->root; } /** * Set parent * * @param \Ml\FrontendBundle\Entity\Categories $parent * * @return Categories */ public function setParent(\Ml\FrontendBundle\Entity\Categories $parent = null) { $this->parent = $parent; return $this; } /** * Get parent * * @return \Ml\FrontendBundle\Entity\Categories */ public function getParent() { return $this->parent; } /** * Add child * * @param \Ml\FrontendBundle\Entity\Categories $child * * @return Categories */ public function addChild(\Ml\FrontendBundle\Entity\Categories $child) { $this->children[] = $child; return $this; } /** * Remove child * * @param \Ml\FrontendBundle\Entity\Categories $child */ public function removeChild(\Ml\FrontendBundle\Entity\Categories $child) { $this->children->removeElement($child); } /** * Get children * * @return \Doctrine\Common\Collections\Collection */ public function getChildren() { return $this->children; } ... }
Prosze o pomoc.