Witajcie.
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 Symfony\Component\Validator\Constraints
as Assert;
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.