Symfony sorrendezés
Symfony-ban készítünk sorrendezést, egy táblának a sorait szeretnénk felcserélhétővé alakítani. |
|
composer.json-ba írjuk be a következő sort: "gedmo/doctrine-extensions": "~2.4" A táblánkba vegyünk fel egy position mezőt és ehhez módosítsuk a hozzátartozó entity fájlunkat is így: /** * @Gedmo\SortablePosition * @ORM\Column(name="position", type="integer") */ private $position; ... /** * Set position * * @param boolean $position * @return Test */ public function setPosition($position) { $this->position = $position; return $this; } /** * Get active * * @return boolean */ public function getPosition() { return $this->position; } A controllerünkbe készítsünk egy action-t, amivel változtatunk a sorrenden: /** * Test entity position up * * @Route("{_locale}/test/sortable/id/{id}/position/{position}", name="test_sortable",requirements={"_locale": "hu|en"}) * @Method("GET") * @Template() */ public function sortableAction($id, $position) { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('AppBundle:Test')->find($id); if (!$entity) { // Unable to find group entity $this->addFlash( 'notice_error', 'Error! Not found!' ); return $this->redirect($this->generateUrl('test')); } $entity->setPosition($position); try { // try push data for database $em->flush(); } catch (\Doctrine\DBAL\DBALException $e) { if ($e->getPrevious() && 0 === strpos($e->getPrevious()->getCode(), '23')) { // Duplicate entry $this->addFlash( 'notice_error', 'Error! Exists error!' ); return $this->redirect($this->generateUrl('test')); } } return $this->redirect($this->generateUrl('test')); } } A view-ra tegyünk ki két gombot, amikkel tudjuk felfelé és lefelé pozícionálni a sorokat. {% set position = entity.position %} {% set position_up = position + 1 %} {% set position_down = position - 1 %} <td> <button type="button" class="btn btn-success" onclick="window.location='{{ path('test_sortable', { 'id': entity.id,'position': position_up }) }}'"> <span class="glyphicon glyphicon-pencil"></span> {{ position_up }} </button> </td> <td> <button type="button" class="btn btn-success" onclick="window.location='{{ path('test_sortable', { 'id': entity.id,'position': position_down })}}'"> <span class="glyphicon glyphicon-pencil"></span> {{ position_down }} </button> </td> A service.yaml fájlba tegyük be: gedmo.listener.sortable: class: Gedmo\Sortable\SortableListener tags: - { name: doctrine.event_subscriber, connection: default } calls: - [ setAnnotationReader, [ "@annotation_reader" ] ] Olvasnivaló: https://symfony.com/doc/master/bundles/SonataAdminBundle/cookbook/recipe_sortable_listing.html https://github.com/Atlantic18/DoctrineExtensions/blob/HEAD//doc/sortable.md https://packagist.org/packages/gedmo/doctrine-extensions |
2018.09.13. |
Figyelem! Az itt olvasható leírások, nem teljesek és nem biztos, hogy pontosak. Nem
frissülnek folyamatosan, ezért nem mindegyik használható az aktuális verziójú rendszerekben. Mindenki saját
felelősségére használja az itt található ötleteket. Az esetleges károkért nem vállalunk felelősséget.