mikeyevstropov / sortable-tree-bundle
该软件包已被废弃,不再维护。未建议替代软件包。
为您的 Symfony2/3 管理树列表提供排序功能
v1.1
2016-08-09 07:55 UTC
Requires
- php: >=5.3.0
- symfony/form: >=2.1
- symfony/framework-bundle: >=2.1
Requires (Dev)
- gedmo/doctrine-extensions: >=2.2
Suggests
- sonata-project/admin-bundle: Can be easily integrated with Sonata Admin bundle
- stof/doctrine-extensions-bundle: 1.1.*@dev
This package is not auto-updated.
Last update: 2020-01-18 20:39:28 UTC
README
mevSortableTreeBundle
为您的 Symfony2/3 管理树列表提供排序功能
安装要求
SonataAdminBundle
- SonataAdminBundle 提供了以下安装文章
https://symfony.com.cn/doc/current/cmf/tutorial/sonata-admin.html
从 gedmo/doctrine-extensions 安装并启用树扩展
- 嵌套行为将在您的实体上实现标准嵌套集行为
(检查 stof/doctrine-extensions-bundle 以在项目中更轻松地集成) https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/tree.md
安装
composer require mikeevstropov/sortable-tree-bundle
配置
在内核中启用 mevSortableTreeBundle
// app/AppKernel.php class AppKernel extends Kernel { public function registerBundles() { $bundles = [ // ... new Mev\SortableTreeBundle\MevSortableTreeBundle(), ]; // ... } }
将 MevSortableTreeBundle:SortableTree
包含在第三个服务参数中
# app/config/services.yml # SonataAdminBundle Category admin.category: class: AppBundle\Admin\CategoryAdmin arguments: - ~ - AppBundle\Entity\Category - 'MevSortableTreeBundle:SortableTree' tags: - { name: sonata.admin, manager_type: orm, label: Category }
在 Admin 类中创建新的路由和操作字段
// src/AppBundle/Admin/CategoryAdmin.php // ... use Sonata\AdminBundle\Route\RouteCollection; class CategoryAdmin extends AbstractAdmin { // ... protected function configureRoutes(RouteCollection $collection) { $collection->add('up', $this->getRouterIdParameter().'/up'); $collection->add('down', $this->getRouterIdParameter().'/down'); } protected function configureFormFields(FormMapper $formMapper) { // create custom query to hide the current element by `id` $subjectId = $this->getRoot()->getSubject()->getId(); $query = null; if ($subjectId) { $query = $this->modelManager ->getEntityManager('AppBundle\Entity\Category') ->createQueryBuilder('c') ->select('c') ->from('AppBundle:Category', 'c') ->where('c.id != '. $subjectId); } // ... $formMapper->add('parent', 'sonata_type_model', array( 'query' => $query, 'required' => false, // remove this row after the root element is created 'btn_add' => false, 'property' => 'name' )); } protected function configureListFields(ListMapper $listMapper) { // ... $listMapper->add('_action', null, array( 'actions' => array( 'up' => array( 'template' => 'MevSortableTreeBundle:Default:list__action_up.html.twig' ), 'down' => array( 'template' => 'MevSortableTreeBundle:Default:list__action_down.html.twig' ) ) )); } }
通过 root
和 lft
字段配置按顺序列表模型
// src/AppBundle/Admin/CategoryAdmin.php // ... class CategoryAdmin extends AbstractAdmin { // ... public function createQuery($context = 'list') { $proxyQuery = parent::createQuery('list'); // Default Alias is "o" // You can use `id` to hide root element // $proxyQuery->where('o.id != 1'); $proxyQuery->addOrderBy('o.root', 'ASC'); $proxyQuery->addOrderBy('o.lft', 'ASC'); return $proxyQuery; } // ... }
就这么多!
待办事项
- 根元素的排序行为(但是,您可以隐藏根元素)