Gedmo Tree можно использовать, например, с проектами, субпродуктами и т. д. Но у меня есть ситуация, когда у меня есть таблица соединений между продуктами и категориями (ManytoMany).
Каждый продукт может быть связан через множество категорий. И в каждой категории может быть много продуктов. В моем представлении продукта есть возможность подключить несколько категорий.
Проблема, с которой я столкнулся, немного сложно объяснить. У меня есть представление со всеми категориями, в которых категория может иметь подкатегории.
cat1 (показать товары)
1.1 cat1-1 (показать товары)
1.2 cat1-2 (показать товары)
Каждая категория, даже подкатегории, имеет ссылку, которая открывает новую страницу со всеми связанными с ними продуктами. Мне нужно найти способ отсортировать эти продукты по их категории, что я пытаюсь сделать с помощью Gedmo Tree.
См. Объект ниже, который является объектом подключения.
Проблема в том, что Gedmo не различает категорию, в которой вы находитесь. Он просто продолжает подсчет lft и rgt.
Надеюсь, я ясно описал свою проблему и у кого-нибудь есть решение.
Может быть, я мог бы использовать Gedmo treeRoot? Но не знаю, где можно использовать treeRoot для
<?php
/**
* ProductCategory
*/
namespace XBS\AppBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* ProductCategory
* @ORM\Entity(repositoryClass = "AppBundle\Repository\ProductCategoryRepository")
* @Gedmo\Tree(type = "nested")
* ...
*/
class ProductCategory
{
/**
* @ORM\Id
* @ORM\Column(name = "id", type = "integer")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity = "AppBundle\Entity\Product", inversedBy = "productCategories")
* @Assert\NotNull()
*/
protected $product;
/**
* @Gedmo\TreeParent
* @ORM\ManyToOne(targetEntity = "AppBundle\Entity\Category", inversedBy = "productCategories")
* @Assert\NotNull()
*/
protected $category;
/**
* @Gedmo\TreeParent
* @ORM\ManyToOne(targetEntity = "AppBundle\Entity\Category", inversedBy = "children" )
* @ORM\JoinColumn(name = "parent_id", referencedColumnName = "id", onDelete = "CASCADE")
*/
protected $parent;
/**
* @ORM\OneToMany(targetEntity = "AppBundle\Entity\Category", mappedBy = "parent")
* @ORM\OrderBy({"lft" = "ASC"})
*/
protected $children;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* setProduct
*
* @param null $product
* @return $this
*/
public function setProduct($product = null)
{
$this->product = $product;
return $this;
}
/**
* getProduct
* @return mixed
*/
public function getProduct()
{
return $this->product;
}
/**
* setCategory
*
* @param null $category
* @return $this
*/
public function setCategory($category = null)
{
$this->category = $category;
return $this;
}
/**
* getCategory
* @return mixed
*/
public function getCategory()
{
return $this->category;
}
/**
* @return String empty
*/
public function __toString(){
return '';
}
}
@Pec, но как я мог изменить позицию с продукта. Например, у кота 1-1 есть 10 продуктов, и я хочу изменить позицию продукта 3 на позицию 1. Каждую строку нужно обновить с новым порядком или что-то в этом роде
Да, если вы хотите хорошее позиционирование, вы должны обновить каждый продукт для выбранной категории.
Возможно ли обновление, или мне нужно удалить все, а затем вставить новые строки в порядке, или есть способ содержать строки и просто обновить позицию каким-то образом
Вы можете просто обновить, вам решать, как это реализовать
Я исправил это с помощью github.com/Atlantic18/DoctrineExtensions/blob/master/doc/…. Где вы могли бы использовать групповую функциональность для группировки сообщения. В этом случае группировка основана на категориях. Также используется medium.com/@treetop1500/… для перетаскивания в качестве основы




Hy, вложенное дерево должно быть в сущности Category, а между сущностями Product и Category вы можете иметь сущность ProductCategory, где положение продукта в затронутой категории - store. Я надеюсь это ясно