示例#1
0
 /**
  * @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);
 }
示例#6
0
 public function save(PageInterface $page)
 {
     if (!$page->isHybrid() || $page->getRouteName() == 'homepage') {
         $this->fixUrl($page);
     }
     $this->entityManager->persist($page);
     $this->entityManager->flush();
     return $page;
 }