генерация sitemap.xml на yii
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
генерация sitemap.xml на yii
сабж товарищи) поделитесь скриптом или ссылкой на таковой, я его потом в крон бахну)
Re: генерация sitemap.xml на yii
Все зависит от структуры приложения.
Я реализовал так.
Каждая модуль "имеющий страницы" знает страницы с каких нужно взять сайтмап. Потом проходя по всем модулям смотрим какие модели нужно дернуть. Дергаю получаю ссылки, пихаю в xml и все
Я реализовал так.
Каждая модуль "имеющий страницы" знает страницы с каких нужно взять сайтмап. Потом проходя по всем модулям смотрим какие модели нужно дернуть. Дергаю получаю ссылки, пихаю в xml и все
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: генерация sitemap.xml на yii
в принципе как вариантAlTiger писал(а):Все зависит от структуры приложения.
Я реализовал так.
Каждая модуль "имеющий страницы" знает страницы с каких нужно взять сайтмап. Потом проходя по всем модулям смотрим какие модели нужно дернуть. Дергаю получаю ссылки, пихаю в xml и все
Re: генерация sitemap.xml на yii
я генерирую консольной коммандой. могу выложить примерный код. есть поддержка мультифайлового сайтмапа.
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: генерация sitemap.xml на yii
давай, посмотримanton44eg писал(а):я генерирую консольной коммандой. могу выложить примерный код. есть поддержка мультифайлового сайтмапа.
Re: генерация sitemap.xml на yii
Код: Выделить всё
<?php
class SitemapCommand extends CConsoleCommand
{
private $dom;
private $indexDom;
public function actionGenerate()
{
//Чистим старые
if(file_exists(Yii::app()->basePath . '/../sitemap.xml')) unlink(Yii::app()->basePath . '/../sitemap.xml');
for($i = 0; $i < 10; $i++)
{
if(file_exists(Yii::app()->basePath . '/../sitemap' . $i . '.xml')) unlink(Yii::app()->basePath . '/../sitemap' . $i . '.xml');
}
$this->indexDom = new DOMDocument('1.0', 'utf-8');
// указываем кодировку и версию xml файла
$indexurlset = $this->indexDom->createElement('sitemapindex');
$indexurlset->setAttribute('xmlns','http://www.sitemaps.org/schemas/sitemap/0.9');
/*$urlset = $this->dom->createElement('urlset');
// создаем корневой элемент
$urlset->setAttribute('xmlns','http://www.sitemaps.org/schemas/sitemap/0.9');
$urlset->setAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
$urlset->setAttribute('xsi:schemaLocation','http://www.google.com/schemas/sitemap/0.84 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd');*/
$urls = array();
//Главная
$url = array();
$url['loc'] = Yii::app()->createAbsoluteUrl('/');
$url['lastmod'] = date('c');
$url['priority'] = 0.8;
$url['changefreq'] = 'daily';
$urls[] = $url;
//Товары
// лучше, конечно, на дао, но руки не джоходят переписать
for($i = 0; $i < ProductStyle::model()->count(); $i += 500) {
$criteria = new CDbCriteria();
$criteria->limit = 500;
$criteria->offset = $i;
$products = ProductStyle::model()->findAll($criteria);
/* @var $products ProductStyle[] */
foreach($products as $product) {
$url = array();
$url['loc'] = Yii::app()->createAbsoluteUrl('/product/view', array('id'=>$product->product_id, 'style'=>$product->id));
$url['lastmod'] = $this->datetimeToCTime($product->update);
$url['priority'] = 0.8;
$url['changefreq'] = 'daily';
$urls[] = $url;
}
}
// и так для всех типов страниц
//Статика
$static = StaticPage::model()->findAll('active = ?', array(1));
foreach($static as $page){
$url = array();
$url['loc'] = Yii::app()->createAbsoluteUrl('/seria/view', array('id'=>$page->id));
$url['lastmod'] = date('c');
$url['priority'] = 0.8;
$url['changefreq'] = 'monthly';
$urls[] = $url;
}
//Блог
$articles = Blog::model()->findAll('published = ? AND publish_time < ?', array(1, date('Y-m-d H:i:s')));
foreach($articles as $article){
$url = array();
$url['loc'] = Yii::app()->createAbsoluteUrl('/blog/item', array('id'=>$article->id));
$url['lastmod'] = $this->datetimeToCTime($article->publish_time);
$url['priority'] = 0.8;
$url['changefreq'] = 'monthly';
$urls[] = $url;
}
$sitemaps = array();
for($i = 0; $i < sizeof($urls); $i+=35000) {
$urlsSliced = array_slice($urls, $i, 35000);
$this->dom = new DOMDocument('1.0', 'utf-8');
$urlset = $this->dom->createElement('urlset');
// создаем корневой элемент
$urlset->setAttribute('xmlns','http://www.sitemaps.org/schemas/sitemap/0.9');
$urlset->setAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
$urlset->setAttribute('xsi:schemaLocation','http://www.google.com/schemas/sitemap/0.84 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd');
foreach($urlsSliced as $urlData) {
$url = $this->dom->createElement('url');
$urlset->appendChild($url);
$url->appendChild($this->addElem('loc', $urlData['loc']));
$url->appendChild($this->addElem('lastmod', $urlData['lastmod']));
$url->appendChild($this->addElem('changefreq', $urlData['changefreq']));
$url->appendChild($this->addElem('priority', $urlData['priority']));
}
$this->dom->appendChild($urlset);
$filename = Yii::app()->basePath . '/../sitemap' . round($i / 35000, 0, PHP_ROUND_HALF_DOWN) . '.xml';
if(file_exists($filename)) unlink($filename);
file_put_contents($filename, $this->dom->saveXML());
$sitemaps[] = array('lastmod'=>date('c'), 'loc'=>Yii::app()->baseUrl . '/sitemap' . round($i / 35000, 0, PHP_ROUND_HALF_DOWN) . '.xml');
}
foreach($sitemaps as $map) {
$domElem = $this->indexDom->createElement('sitemap');
$domElem->appendChild($this->addElem('loc', 'http://www.kievsport.com.ua' .$map['loc'], $this->indexDom));
$domElem->appendChild($this->addElem('lastmod', $map['lastmod'], $this->indexDom));
$indexurlset->appendChild($domElem);
}
$this->indexDom->appendChild($indexurlset);
if(file_exists(Yii::app()->basePath . '/../sitemap.xml')) unlink(Yii::app()->basePath . '/../sitemap.xml');
file_put_contents(Yii::app()->basePath . '/../sitemap.xml', $this->indexDom->saveXML());
}
private function addElem($name, $text, $dom = null)
{
if($dom == null)
$dom = $this->dom;
$name = $dom->createElement($name);
$text = $dom->createTextNode($text);
$name->appendChild($text);
return $name;
}
private function datetimeToCTime($datetime) {
$a = strptime($datetime, '%Y-%m-%d %H:%M:%S');
$timestamp = mktime($a['tm_hour'], $a['tm_min'], $a['tm_sec'], $a['tm_mday'], $a['tm_mon'], 1899 + $a['tm_year']);
$ctime = date('c', $timestamp);
return $ctime;
}
}
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: генерация sitemap.xml на yii
народ посоветуйте че подмутить с линуксом, он мне не дает класть файл в корень, не хотелось бы права ставить 775
система centos + nginx (запускается от юзера apache)
система centos + nginx (запускается от юзера apache)
Re: генерация sitemap.xml на yii
Ну и не клади. Пропиши полный путь к файлу сайтмап.хмл в роботс.тхтGhost_nsk писал(а):народ посоветуйте че подмутить с линуксом, он мне не дает класть файл в корень, не хотелось бы права ставить 775 система centos + nginx (запускается от юзера apache)
- Ghost_nsk
- Сообщения: 825
- Зарегистрирован: 2012.01.01, 00:45
- Откуда: Новосибирск
- Контактная информация:
Re: генерация sitemap.xml на yii
точняк спсandreyrud писал(а):Ну и не клади. Пропиши полный путь к файлу сайтмап.хмл в роботс.тхтGhost_nsk писал(а):народ посоветуйте че подмутить с линуксом, он мне не дает класть файл в корень, не хотелось бы права ставить 775 система centos + nginx (запускается от юзера apache)
Re: генерация sitemap.xml на yii
Тоже здесь со воим Sitemap постою.