/** * @param \CMS\Bundle\AdminBundle\Entity\Page $page the page */ public function moveDown(\CMS\Bundle\AdminBundle\Entity\Page $page) { //get the area upper $entityManager = $this->_em; $pageArray = array('id' => $page->getId(), 'lft' => $page->getLft(), 'rgt' => $page->getRgt()); $repositor = $entityManager->getRepository('CMSAdminBundle:Page'); $pageUnder = $repositor->findOneArrayBy(array('lft' => $pageArray['rgt'] + 1)); if ($pageUnder) { $del1 = $pageArray['rgt'] - $pageArray['lft']; $del2 = $pageUnder['rgt'] - $pageUnder['lft']; //calculate new lft, rgt of 2 node and swap $pageUnder['lft'] = $pageArray['lft']; $pageUnder['rgt'] = $pageArray['lft'] + $del2; $pageArray['lft'] = $pageUnder['rgt'] + 1; $pageArray['rgt'] = $pageArray['lft'] + $del1; $end = 0; //save new order $repositor->postOrderTraversal($pageUnder, $pageUnder['lft'], $end); $repositor->postOrderTraversal($pageArray, $pageArray['lft'], $end); } }