create-position-column
Canonical reference: FeatureValueGridDefinitionFactory.
Instructions
- Add
PositionColumnas the second column (after BulkActionColumn) in the Grid Definition. - Configure the position update route:
->setOption('update_method', 'POST')->setOption('update_route', 'admin_{domain}s_update_position'). - Add a
ReorderPositionsButtonTypefilter associated with the position column (see Rules below) — mandatory, not optional. - Create the
admin_{domain}s_update_positionPOST route in the routing YAML (seecreate-admin-routingskill). - In the controller, handle the AJAX position update: receive
positions[]array, dispatchUpdatePosition{Domain}Command(or use QueryBuilder directly). - In the repository, update the
positioncolumn for the moved entities.
Rules
Column ordering conventions (PositionColumn as second column) are in Grid/CONTEXT.md. Skill-specific reminders:
Always pair the PositionColumn with a
ReorderPositionsButtonTypefilter. It renders a "Rearrange" button (js-btn-reorder-positions) that toggles inline drag-and-drop mode — dramatically better UX than a numeric position search field. Use:use PrestaShopBundle\Form\Admin\Type\ReorderPositionsButtonType; ->add((new Filter('position', ReorderPositionsButtonType::class)) ->setAssociatedColumn('position') );Position updates are always AJAX — return JSON response, not redirect
Position values start at 0 or 1 — be consistent with existing PS convention