/** * @param \Sonata\PageBundle\Model\PageInterface $page * * @return void */ public function fixUrl(PageInterface $page) { if ($page->isInternal()) { $page->setUrl(null); // internal routes do not have any url ... return; } // hybrid page cannot be altered if (!$page->isHybrid()) { // make sure Page has a valid url if ($page->getParent()) { if (!$page->getSlug()) { $page->setSlug(Page::slugify($page->getName())); } if ($page->getParent()->getUrl() == '/') { $base = '/'; } elseif (substr($page->getParent()->getUrl(), -1) != '/') { $base = $page->getParent()->getUrl() . '/'; } else { $base = $page->getParent()->getUrl(); } $page->setUrl($base . $page->getSlug()); } else { // a parent page does not have any slug - can have a custom url ... $page->setSlug(null); $page->setUrl('/' . $page->getSlug()); } } foreach ($page->getChildren() as $child) { $this->fixUrl($child); } }
/** * @param \Sonata\PageBundle\Model\PageInterface $page * * @return void */ public function fixUrl(PageInterface $page) { if ($page->isInternal()) { $page->setUrl(null); // internal routes do not have any url ... return; } // hybrid page cannot be altered if (!$page->isHybrid()) { // make sure Page has a valid url if ($page->getParent()) { foreach ($page->getTranslations() as $trans) { $locale = $trans->getLocale(); if (!$trans->getSlug()) { $trans->setSlug(ModelPage::slugify($trans->getName())); } $parent = $page->getParent(); foreach ($parent->getTranslations() as $ptrans) { if ($ptrans->getLocale() === $locale) { $url = $ptrans->getUrl(); if ($url == '/') { $base = '/'; } elseif (substr($url, -1) != '/') { $base = $url . '/'; } else { $base = $url; } $trans->setUrl($base . $trans->getSlug()); } } } } else { foreach ($page->getTranslations() as $trans) { // a parent page does not have any slug - can have a custom url ... $trans->setUrl('/' . $trans->getSlug()); } } } foreach ($page->getChildren() as $child) { $this->fixUrl($child); } }
/** * {@inheritdoc} */ public function findContainer($code, PageInterface $page, BlockInterface $parentContainer = null) { $container = null; if ($parentContainer) { // parent container is set, nothing to find, don't need to loop across the // name to find the correct container (main template level) $container = $parentContainer; } // first level blocks are containers if (!$container && $page->getBlocks()) { foreach ($page->getBlocks() as $block) { if ($block->getSetting('code') == $code) { $container = $block; break; } } } /* DON'T CREATE CONTAINERS OF CMS PAGES, ONLY INTERNAL */ if (!$container && $page->isInternal()) { $container = $this->blockInteractor->createNewContainer(array('enabled' => true, 'page' => $page, 'code' => $code, 'position' => 1, 'parent' => $parentContainer)); } return $container; }