/** * @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); } }
public function iterate($menu, PageInterface $page) { foreach ($page->getChildren() as $page) { if ($page->isHybrid() || !$page->getUrl()) { continue; } $menu->addChild($page->getName(), array('route' => $page->getRouteName(), 'routeParameters' => array('path' => $page->getUrl()))); if ($page->getChildren()) { $this->iterate($menu[$page->getName()], $page); } } }
/** * Generates an URL from a Page object * * @param PageInterface $page Page object * @param array $parameters An array of parameters * @param bool|string $referenceType The type of reference to be generated (one of the constants) * * @return string * * @throws \RuntimeException */ protected function generateFromPage(PageInterface $page, array $parameters = array(), $referenceType = self::ABSOLUTE_PATH) { if (isset($parameters['path'])) { unset($parameters['path']); } // hybrid pages use, by definition, the default routing mechanism if ($page->isHybrid()) { //return $this->router->generate($page->getRouteName(), $parameters, $referenceType); } $url = $this->getUrlFromPage($page); if ($url === false) { throw new \RuntimeException(sprintf('Page "%d" has no url or customUrl.', $page->getId())); } $url = $this->customDecorateUrl($page->getSite(), $url, $parameters, $referenceType); if ($page->getSite() !== $this->siteSelector->retrieve()) { $url = str_replace($this->siteSelector->retrieve()->getRelativePath(), $page->getSite()->getRelativePath(), $url); } return $url; }
/** * @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); } }
/** * Generates an URL from a Page object. * * @param PageInterface $page Page object * @param array $parameters An array of parameters * @param bool|string $referenceType The type of reference to be generated (one of the constants) * * @return string * * @throws \RuntimeException */ protected function generateFromPage(PageInterface $page, array $parameters = array(), $referenceType = self::ABSOLUTE_PATH) { // hybrid pages use, by definition, the default routing mechanism if ($page->isHybrid()) { return $this->router->generate($page->getRouteName(), $parameters, $referenceType); } $url = $this->getUrlFromPage($page); if ($url === false) { throw new \RuntimeException(sprintf('Page "%d" has no url or customUrl.', $page->getId())); } return $this->decorateUrl($url, $parameters, $referenceType); }
public function save(PageInterface $page) { if (!$page->isHybrid() || $page->getRouteName() == 'homepage') { $this->fixUrl($page); } $this->entityManager->persist($page); $this->entityManager->flush(); return $page; }