umanit/easyadmin-tree-bundle

为EasyAdmin添加分类树功能的插件

安装次数: 4,028

依赖项: 0

建议者: 0

安全: 0

星标: 20

关注者: 7

分支: 7

开放问题: 4

类型:symfony-bundle

0.0.5 2022-11-03 11:30 UTC

This package is auto-updated.

Last update: 2024-08-30 01:26:36 UTC


README

为EasyAdmin添加分类树功能的插件

功能

  • 在索引页上以树形结构显示内容的条目
  • 在索引页上通过树形侧边栏过滤内容的条目
  • 在表单上提供一个TreeField来管理树形结构

安装

$ composer require umanit/easyadmin-tree-bundle

配置

需要在您的Twig配置中声明模板路径

twig:
  paths:
    '%kernel.project_dir%/vendor/umanit/easyadmin-tree-bundle/Resources/views': UmanitEasyAdminTreeBundle

此包依赖于StofDoctrineExtensionsBundle,请确保它已正确配置: 文档。您需要:

  • 将树扩展添加到您的映射
doctrine:
    orm:
        entity_managers:
            default:
                mappings:
                    gedmo_tree:
                        type: annotation
                        prefix: Gedmo\Tree\Entity
                        dir: "%kernel.project_dir%/vendor/gedmo/doctrine-extensions/src/Tree/Entity"
                        alias: GedmoTree # (optional) it will default to the name set for the mapping
                        is_bundle: false
  • 激活树扩展
stof_doctrine_extensions:
    default_locale: en_US
    orm:
        default:
            tree: true

用法

  1. 管理分类树
  2. 添加树形侧边栏
  3. 在您的表单中使用TreeField

管理分类树

通过扩展AbstractTreeItem创建您的分类实体

<?php
// src/Entity/Category.php
namespace App\Entity;

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Umanit\EasyAdminTreeBundle\Entity\AbstractTreeItem;

#[ORM\Entity]
#[ORM\Table(name: 'app_category')]
class Category extends AbstractTreeItem
{
...
}

通过扩展TreeCrudController创建您的分类CRUD控制器

<?php
// src/Controller/Admin/MyTreeCrudController.php
namespace App\Controller\Admin;

use App\Entity\Category;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\SlugField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use Umanit\EasyAdminTreeBundle\Controller\TreeCrudController;
use Umanit\EasyAdminTreeBundle\Field\TreeField;

class MyTreeCrudController extends TreeCrudController
{
    public static function getEntityFqcn(): string
    {
        // return your Category entity FQCN
        return Category::class;
    }

    protected function getEntityLabelProperty(): string
    {
        // return the property of your category to use as a label in tree display
        return 'name';
    }
}

在EasyAdmin仪表板中启用CRUD

    public function configureMenuItems(): iterable
    {
        return [
            ...
            MenuItem::linkToCrud('Categories', 'fas fa-list', Category::class),
            ...
        ];
    }

添加树形侧边栏

要为现有的CRUDController启用树形侧边栏,您必须使其扩展AbstractCategorizedCrudController

<?php
// src/Controller/Admin/MediaCrudController.php
namespace App\Controller\Admin;

use App\Entity\Category;
use App\Entity\Media;
use Umanit\EasyAdminTreeBundle\Controller\AbstractCategorizedCrudController;

class MediaCrudController extends AbstractCategorizedCrudController
{
    public static function getEntityFqcn(): string
    {
        return Media::class;
    }

    public function configureCrud(Crud $crud): Crud
    {
        $crud = parent::configureCrud($crud);

        // ...
    }
    
    public static function getCategoryFqcn(): string
    {
        // The FQCN of the entity to use as a category (should extend AbstractTreeItem)
        return Category::class;
    }

    protected static function getCategoryPropertyName(): string
    {
        // the name of the category property for the entity managed by this CRUDController
        return 'category';
    }

    protected function getDefaultCategoryId(): int
    {
        // The id of the category that will be used as default filter for the index page of your CRUD 
        return $this->getCategoryRepository()->findOneBy(['parent' => null])->getId();
    }
}

在您的表单中使用TreeField

只需在EasyAdmin configureFields函数中添加字段即可

<?php
// src/Controller/Admin/MediaCrudController.php
namespace App\Controller\Admin;

use Umanit\EasyAdminTreeBundle\Field\TreeField;

class MediaCrudController extends AbstractCategorizedCrudController
{

    public function configureFields(string $pageName): iterable
    {
        return [
            // ...
            TreeField::new('category', 'My category'),
            // ...
        ];
    }

屏幕截图

索引页上的树形结构 screenshot1

树形侧边栏 screenshot2

表单中的TreeField screenshot3

待办事项

需要改进的列表

  • 折叠/展开分类
  • 使用拖放重新排序分类项
  • 在TreeField中预填当前侧边栏中的分类
  • 改进前端(设计,CSS)