treetop1500 / easyadmin-dragndrop-sort
一个允许在列表视图中通过拖放排序实体的 Symfony 4 扩展,集成了 Sortable Doctrine 扩展。
1.1
2019-10-15 15:26 UTC
Requires
- php: ^7.2
- easycorp/easyadmin-bundle: ~2.3
- gedmo/doctrine-extensions: ^2.4
- symfony/framework-bundle: ~4.0
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}")
- 使用移动视图进行测试
- 集成测试
- 文档