setName('nav:rebuild') ->setDescription('Rebuild navigations after copies') ->setHelp(<<%command.name% rebuilds navigations after copies. EOF ) ; } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $navigations = NavQuery::create()->find(); foreach ($navigations as $navigation) { $rootNode = $navigation->getRootNode(); $menus = $navigation->getMenus(); foreach ($menus as $menu) { $nodes = $menu->getNodes(); $lastNode = $rootNode; foreach ($nodes as $k => $node) { echo "\n", $k, "[", $node->getLevel() ,"]", " ", $node->getTitle(), "\n"; if ($node->getLevel() === 1 && $k === 0) { $node ->moveToLastChildOf($rootNode) ->save(); echo "> moveToLastChildOf 1 ".$rootNode->getTitle(), "\n"; } elseif ($node->getLevel() === 1 && $k > 0) { while ($lastNode->getLevel() !== 1) { $lastNode = $lastNode->getParent(); } $node ->moveAfter($lastNode) ->save(); echo "> moveAfter 2 ".$lastNode->getTitle(), "\n"; } else { if ($node->getLevel() > $lastNode->getLevel()) { $node ->moveAbove($lastNode) ->save(); echo "> moveAbove 3 ".$lastNode->getTitle(), "\n"; } elseif ($node->getLevel() === $lastNode->getLevel()) { $node ->moveAfter($lastNode) ->save(); echo "> moveAfter 4 ".$lastNode->getTitle(), "\n"; } else { $diffParentLevel = $node->getLevel() - $lastNode->getLevel() + 1; for ($i = 0; $i <= $diffParentLevel; $i++) { $lastNode = $lastNode->getParent(); } $node ->moveAbove($lastNode) ->save(); echo "> moveAbove 5 ".$lastNode->getTitle(), "\n"; echo "> diff ", $diffParentLevel, "\n"; } } $lastNode = $node; } } foreach ($rootNode->getChildren() as $child) { $l = $child->getLevel(); for ($i = 0; $i < $i; $i++) { echo " "; } echo $child->getTitle(); echo "\n"; foreach ($child->getChildren() as $child2) { $l = $child2->getLevel(); for ($i = 0; $i < $l; $i++) { echo " "; } echo $child2->getTitle(); echo "\n"; foreach ($child2->getChildren() as $child3) { $l = $child3->getLevel(); for ($i = 0; $i < $l; $i++) { echo " "; } echo $child3->getTitle(); echo "\n"; } } } } $nodes = NodeQuery::create()->find(); foreach ($nodes as $node) { if (preg_match('/cms_node_/', $node->getRouteName())) { $node->setRouteName('cms_node_'.$node->getId())->save(); } } } }