treetop1500/easyadmin-dragndrop-sort

一个允许在列表视图中通过拖放排序实体的 Symfony 4 扩展,集成了 Sortable Doctrine 扩展。

安装: 456

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 11

语言:JavaScript

类型:symfony-bundle

1.1 2019-10-15 15:26 UTC

This package is auto-updated.

Last update: 2024-09-16 02:32:22 UTC


README

此扩展旨在为 Easy Admin 列表视图添加拖放排序功能,利用可排序的 Doctrine 扩展。

请注意 这仍在开发中,所以请自行承担风险使用。

入门指南

安装

由于此扩展仍在开发中且尚未进行测试,因此目前不在 Packagist 上,您需要将其存储库添加到 composer.json 文件中

// composer.json
{
"repositories": [
        {
            "url": "https://github.com/treetop1500/easyadmin-dragndrop-sort.git",
            "type": "git"
        }
    ]
}

然后通过 composer 安装扩展

composer require treetop1500/easyadmin-dragndrop-sort

安装资源

bin/console assets:install --symlink

配置 Gedmo 扩展

您需要设置用于排序的 Gedmo Doctrine 扩展

添加路由

easyadmin_dragndrop_sort:
  resource: "@Treetop1500EasyadminDragndropSortBundle/Controller"
  type:     annotation
  prefix: /manage

JavaScript 和 CSS

请确保通过您的 EasyAdmin 配置包含 JS 和 CSS 文件

//config/packages/easy_admin.yml
easy_admin:
  design:
    assets:
      css:
        - '/bundles/treetop1500easyadmindragndropsort/stylesheets/easyadmin-dragndrop-sort.css'
      js:
        - '/bundles/treetop1500easyadmindragndropsort/javascripts/easyadmin-dragndrop-sort.js'
        - 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/js/bootstrap2-toggle.min.js'

...或者更好的方法是,使用 webpack 或其他包管理器将它们编译到您的 JS 和 CSS 中。

// assets/js/app-admin.js
require('../../public/bundles/treetop1500easyadmindragndropsort/stylesheets/easyadmin-dragndrop-sort.css');
require('../../public/bundles/treetop1500easyadmindragndropsort/javascripts/easyadmin-dragndrop-sort.js');
require('https://cdnjs.cloudflare.com/ajax/libs/bootstrap-toggle/2.2.2/js/bootstrap2-toggle.min.js');

配置您的实体

所有实体都应该有一个 $position 属性,该属性用作主要排序方法。此属性注释为 Gedmo SortablePosition 属性。

<?php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

class Page
{
    ...

    /**
     * @var integer $position
     *
     * @Gedmo\SortablePosition()
     * @ORM\Column(name="position", type="integer")
     */
    private $position;

    /**
     * @return int
     */
    public function getPosition(): ?int
    {
        return $this->position;
    }
    /**
     * @param int $position
     */
    public function setPosition(?int $position)
    {
        $this->position = $position;
    }
}

在 Easy Admin Bundle 中撤销列表视图排序

由于此方法使用表格中的列表位置来确定拖放时的新排序,因此您需要禁用列头排序,否则会变得很奇怪。Easy Admin 不提供全局关闭此功能的方法,但是您可以通过在列表视图的每个属性上设置 sortable: false 来禁用每个列的排序。

easy_admin:
  ...
  entities:
    Page:
      ..
      list:
        fields:
          - { property: 'position', sortable: false }
          - { property: 'active', sortable: false  }
          - { property: 'ID', label: 'ID', sortable: false  }
          - { property: 'title', sortable: false  }
          - { property: 'slug', sortable: false  }

待办事项

  • 设置一个灵活的食谱,将自动配置此扩展、添加路由、添加到内核并安装资源。
  • 扩展配置以能够指定哪些实体的列表视图具有此功能。
  • 通过扩展探索与 Easy Admin Bundle 的更好集成。
  • 使管理前缀更具动态性(目前设置为 "manage")
  • 使 JS 中的完全限定类名更具动态性(目前为 "App\Entity{Entity}")
  • 使用移动视图进行测试
  • 集成测试
  • 文档