Пример #1
0
 /**
  * Generates document with all sitemap items from $items array
  *
  * @param string $format (options: xml, html, txt, ror-rss, ror-rdf, sitemapindex)
  *
  * @return array
  */
 public function generate($format = 'xml')
 {
     if (!$this->model->getLink()) {
         $this->model->setLink(Config::get('app.url'));
     }
     if (!$this->model->getTitle()) {
         $this->model->setTitle('Sitemap for ' . $this->model->getLink());
     }
     $channel = array('title' => $this->model->getTitle(), 'link' => $this->model->getLink());
     if ($this->model->getUseCache()) {
         if (Cache::has($this->model->getCacheKey())) {
             $format == 'sitemapindex' ? $this->model->sitemaps = Cache::get($this->model->getCacheKey()) : ($this->model->items = Cache::get($this->model->getCacheKey()));
         } else {
             $format == 'sitemapindex' ? Cache::put($this->model->getCacheKey(), $this->model->getSitemaps(), $this->model->getCacheDuration()) : Cache::put($this->model->getCacheKey(), $this->model->getItems(), $this->model->getCacheDuration());
         }
     }
     switch ($format) {
         case 'ror-rss':
             return array('content' => View::make('sitemap::ror-rss', array('items' => $this->model->getItems(), 'channel' => $channel)), 'headers' => array('Content-type' => 'text/rss+xml; charset=utf-8'));
         case 'ror-rdf':
             return array('content' => View::make('sitemap::ror-rdf', array('items' => $this->model->getItems(), 'channel' => $channel)), 'headers' => array('Content-type' => 'text/rdf+xml; charset=utf-8'));
         case 'html':
             return array('content' => View::make('sitemap::html', array('items' => $this->model->getItems(), 'channel' => $channel)), 'headers' => array('Content-type' => 'text/html'));
         case 'txt':
             return array('content' => View::make('sitemap::txt', array('items' => $this->model->getItems())), 'headers' => array('Content-type' => 'text/plain'));
         case 'sitemapindex':
             return array('content' => View::make('sitemap::sitemapindex', array('sitemaps' => $this->model->getSitemaps())), 'headers' => array('Content-type' => 'text/xml; charset=utf-8'));
         default:
             return array('content' => View::make('sitemap::xml', array('items' => $this->model->getItems())), 'headers' => array('Content-type' => 'text/xml; charset=utf-8'));
     }
 }
Пример #2
0
 /**
  * Check if content is cached
  *
  * @return bool
  */
 public function isCached()
 {
     if ($this->model->getUseCache()) {
         if (Cache::has($this->model->getCacheKey())) {
             return true;
         }
     }
     return false;
 }
Пример #3
0
 /**
  * Generate sitemap and store it to a file
  *
  * @param string $format (options: xml, html, txt, ror-rss, ror-rdf, sitemapindex, google-news)
  * @param string $filename (without file extension, may be a path like 'sitemaps/sitemap1' but must exist)
  *
  * @return void
  */
 public function store($format = 'xml', $filename = 'sitemap')
 {
     // turn off caching for this method
     $this->model->setUseCache(false);
     // use correct file extension
     $format == 'txt' || $format == 'html' ? $fe = $format : ($fe = 'xml');
     // check if this sitemap have more than 50000 elements (or 1000 if is google-news)
     if ($format != "google-news" && count($this->model->getItems()) > 50000 || $format == "google-news" && count($this->model->getItems()) > 1000) {
         $format != "google-news" ? $max = 50000 : ($max = 1000);
         // check if limiting size of items array is enabled
         if (!$this->model->getUseLimitSize()) {
             // use sitemapindex and generate partial sitemaps
             foreach (array_chunk($this->model->getItems(), $max) as $key => $item) {
                 $this->model->resetItems($item);
                 $this->store($format, $filename . '-' . $key);
                 $this->addSitemap(url($filename . '-' . $key . '.' . $fe));
             }
             $data = $this->generate('sitemapindex');
         } else {
             // reset items and use only most recent $max items
             $this->model->limitSize($max);
             $data = $this->generate($format);
         }
     } else {
         $data = $this->generate($format);
     }
     $file = public_path() . DIRECTORY_SEPARATOR . $filename . '.' . $fe;
     // must return something
     if (File::put($file, $data['content'])) {
         return "Success! Your sitemap file is created.";
     } else {
         return "Error! Your sitemap file is NOT created.";
     }
     // clear memory
     if ($format == 'sitemapindex') {
         $this->model->resetSitemaps();
         $this->model->resetItems();
     } else {
         $this->model->resetItems();
     }
 }
Пример #4
0
 /**
  * Generate sitemap and store it to a file
  *
  * @param string $format (options: xml, html, txt, ror-rss, ror-rdf, sitemapindex, google-news)
  * @param string $filename (without file extension, may be a path like 'sitemaps/sitemap1' but must exist)
  * @param string $path (path to store sitemap like '/www/site/public')
  * @param string $style (path to custom xls style like '/styles/xsl/xml-sitemap.xsl')
  *
  * @return void
  */
 public function store($format = 'xml', $filename = 'sitemap', $path = null, $style = null)
 {
     // turn off caching for this method
     $this->model->setUseCache(false);
     // use correct file extension
     $format == 'txt' || $format == 'html' ? $fe = $format : ($fe = 'xml');
     // use custom size limit for sitemaps
     if ($this->model->getMaxSize() > 0 && count($this->model->getItems()) > $this->model->getMaxSize()) {
         if ($this->model->getUseLimitSize()) {
             // limit size
             $this->model->limitSize($this->model->getMaxSize());
             $data = $this->generate($format, $style);
         } else {
             // use sitemapindex and generate partial sitemaps
             foreach (array_chunk($this->model->getItems(), $this->model->getMaxSize()) as $key => $item) {
                 // reset current items
                 $this->model->resetItems($item);
                 // generate new partial sitemap
                 $this->store($format, $filename . '-' . $key, $path, $style);
                 // add sitemap to sitemapindex
                 if ($path != null) {
                     // if using custom path generate relative urls for sitemaps in the sitemapindex
                     $this->addSitemap($filename . '-' . $key . '.' . $fe);
                 } else {
                     // else generate full urls based on app's domain
                     $this->addSitemap(url($filename . '-' . $key . '.' . $fe));
                 }
             }
             $data = $this->generate('sitemapindex', $style);
         }
     } else {
         if ($format != "google-news" && count($this->model->getItems()) > 50000 || $format == "google-news" && count($this->model->getItems()) > 1000) {
             $format != "google-news" ? $max = 50000 : ($max = 1000);
             // check if limiting size of items array is enabled
             if (!$this->model->getUseLimitSize()) {
                 // use sitemapindex and generate partial sitemaps
                 foreach (array_chunk($this->model->getItems(), $max) as $key => $item) {
                     // reset current items
                     $this->model->resetItems($item);
                     // generate new partial sitemap
                     $this->store($format, $filename . '-' . $key, $path, $style);
                     // add sitemap to sitemapindex
                     if ($path != null) {
                         // if using custom path generate relative urls for sitemaps in the sitemapindex
                         $this->addSitemap($filename . '-' . $key . '.' . $fe);
                     } else {
                         // else generate full urls based on app's domain
                         $this->addSitemap(url($filename . '-' . $key . '.' . $fe));
                     }
                 }
                 $data = $this->generate('sitemapindex', $style);
             } else {
                 // reset items and use only most recent $max items
                 $this->model->limitSize($max);
                 $data = $this->generate($format, $style);
             }
         } else {
             $data = $this->generate($format, $style);
         }
     }
     // if custom path
     if ($path == null) {
         $file = public_path() . DIRECTORY_SEPARATOR . $filename . '.' . $fe;
     } else {
         $file = $path . DIRECTORY_SEPARATOR . $filename . '.' . $fe;
     }
     // must return something
     if (File::put($file, $data['content'])) {
         return "Success! Your sitemap file is created.";
     } else {
         return "Error! Your sitemap file is NOT created.";
     }
     // clear memory
     if ($format == 'sitemapindex') {
         $this->model->resetSitemaps();
         $this->model->resetItems();
     } else {
         $this->model->resetItems();
     }
 }