Bạn cần cài đặt pixassociates/sortable-behavior-bundle
và stof/doctrine-extensions-bundle
composer require stof/doctrine-extensions-bundle
composer require pixassociates/sortable-behavior-bundle
Thêm cấu hình trong pix_sortable.yaml
Bằng cách thêm entity và trường trong position_field (ở đây là wconf, và trường vị trí)
pix_sortable_behavior:
db_driver: orm # mongodb default value : orm
position_field:
default: position #default value : position
entities:
App\Entity\Wconf: position
sortable_groups:
entities:
#AppBundle\Entity\Baz: [ group ]
stof_doctrine_extensions:
orm:
default:
sortable: true
Trong entity, bạn cần tạo một trường sẽ quản lý vị trí (gọi nó, ngẫu nhiên, là vị trí)
use Gedmo\Mapping\Annotation as Gedmo;
/**
* @Gedmo\SortablePosition
* @ORM\Column(type="integer")
*/
private $position;
public function getPosition(): ?int
{
return $this->position;
}
public function setPosition(int $position): self
{
$this->position = $position;
return $this;
}
Trong controller, bạn cần thêm tham chiếu trong use, thêm route, và nút
use Sonata\AdminBundle\Route\RouteCollection;
use Pix\SortableBehaviorBundle\Services\PositionORMHandler as PositionHandler;
public $last_position = 0;
private $positionService;
protected $datagridValues = array(
'_page' => 1,
'_sort_by' => 'position',
'_sort_order' => 'ASC',
);
public function setPositionService(PositionHandler $positionHandler)
{
$this->positionService = $positionHandler;
}
protected function configureListFields(ListMapper $listMapper)
{
$listMapper->add('_action', null, array(
'actions' => array(
'move' => array(
'template' => '@PixSortableBehavior/Default/_sort_drag_drop.html.twig',
'enable_top_bottom_buttons' => false,
),
),
))
;
}
protected function configureRoutes(RouteCollection $collection)
{
$collection->add('move', $this->getRouterIdParameter().'/move/{position}');
}
Sau đó thêm tài sản JavaScript trong config/sonata_admin.yaml, thêm dịch vụ gedmo, và thêm cấu hình cho các đối số và cuộc gọi
assets:
extra_javascripts:
- bundles/pixsortablebehavior/js/jquery-ui.min.js // if you haven't got jQuery UI yet.
- bundles/pixsortablebehavior/js/init.js
Trong cấu hình dịch vụ:
gedmo.listener.sortable:
class: Gedmo\Sortable\SortableListener
calls:
- [setAnnotationReader, ['@annotation_reader']]
tags:
- { name: doctrine.event_subscriber, connection: default }
admin.wconf:
class: App\Admin\WconfAdmin
arguments: [~, App\Entity\Wconf, 'PixSortableBehaviorBundle:SortableAdmin']
tags:
- { name: sonata.admin, manager_type: orm, label: "Configuration des types" }
public: true
calls:
- [setPositionService, ["@pix_sortable_behavior.position"]]