Desprès d'un temps cercant per la web sobre la millor forma de gestionar un conjunt de dades de forma jeràrquica i en una base de dades, vam decidir optar per la solució dels arbres transversals, sobre els quals vam trobar la següent informació pràctica:
A més, amb el symfony existeix un plugin (sfPropelTree) que ja treballa amb aquestes estructures, i nomès cal afegir dos camps numèrics nous (Lft i Rgt) a la taula que gestiona l'arbre i ja pots començar a treballar-hi.
A continuació s'expliquen els passos que hem seguit per integrar l'admin-generator del symfony, amb el plugin esmentat i així poder construir un sistema de menus jeràrquics com el de la imatge següent:
Per aconseguir aquest "gestor" del menú, nomès cal afegir les següents línies al fitxer generator.yml
object_actions:
_edit:
_delete: -
moveup: { name: Mover arriba, action: moveUp, icon: backend/asc.gif }
movedown: { name: Mover abajo, action: moveDown, icon: backend/desc.gif }
addchild: { name: Añadir nodo hijo, action: addChild, icon: backend/add.png }
i afegir les funcions corresponents al fitxer actions.class.php:
public function executeMoveUp ()
{
$node = MenuPeer::retrieveByPk($this->getRequestParameter('id'));
if ($node->getLeft()){
$node->moveBefore($node->getLeft());
}
$this->redirect('menu');
}
public function executeMoveDown ()
{
$node = MenuPeer::retrieveByPk($this->getRequestParameter('id'));
if ($node->getRight()){
$node->moveAfter($node->getRight());
}
$this->redirect('menu');
}
Cal tenir en compte que perquè això funcioni, vam haver de fer les modificacions comentades en el post anterior.