2 заметки с тегом

sitemap

Создание Sitemap на Yii. Обновляем Sitemap по крону. Часть 2

Начало про Sitemap читаем здесь
Чтобы автоматизировать процесс обновления Sitemap, необходимо воспользоваться config/console.php.
Открываем этот файл на редактирование.
Здесь следует обратить внимание, чтобы UrlManager и подключение в Базе данных были настроены также, как и в главном config/main.php.
Далее, идем в protected/commands. Создаем файл CronCommand (ну или как вы сами захотите).

// Функция запускает обновление sitemap.xml
class CronCommand extends CConsoleCommand
{

    public function actionSitemapUpdate()
    {
        $priority = 0.7;
        $staticpages = array(  // статические страницы для sitemap
            '/', '/contacts'
        );
        
        Yii::import( 'application.extensions.Sitemap.*' );
        $assets = Yii::getPathOfAlias('application'). '/../assets/';
        $_SERVER['DOCUMENT_ROOT'] = $assets;
        
        $sitemap = new Sitemap($_SERVER['DOCUMENT_ROOT'].'sitemap.xml');
        
	// Сначала обработаем все статичные страницы, выставим им приоритет 1
        foreach ($staticpages as $staticpage) {
            $sitemap->addItem(Yii::app()->createAbsoluteUrl($staticpage), time(), Sitemap::DAILY, 1);
        }
        echo 'статика обновлена' . PHP_EOL;
        
        
        // Новости, статьи, любая другая динамически обновляемая информация (для них приоритет будет 0.7)
        $news = Yii::app()->db->createCommand()
                    ->select( array('type', 'alias') )
                    ->from( '{{news}}' )
                    ->where( ' state=2' )
                    ->queryAll();
        
        $types = array(
            1 => array('label'=>'Новости', 'alias'=>'news'),
            2 => array('label'=>'Статьи', 'alias'=>'articles'),
        );
        
        foreach ($news as $new) {
            $news_alias = Yii::app()->createAbsoluteUrl($types[ $new['type'] ]['alias'].DIRECTORY_SEPARATOR.$new['alias']);
            $sitemap->addItem($news_alias, time(), Sitemap::DAILY, $priority);
        }
        echo 'Новости, статьи обновлены' . PHP_EOL;
        
        // write it
        $sitemap->write();
        echo 'sitemap.xml обновлен' . PHP_EOL;
        
    }

}

Запускаемся командой в консоли:

./yiic cron sitemapUpdate
2015   cron   sitemap   yii

Создание Sitemap на Yii. Часть 1

Данный пост навеян статьей Александра Макарова и его библиотеки для создания Sitemap https://github.com/samdark/sitemap
Создаем SitemapController.
Файл sitemap.xml можем сохранить в публичной директории, которая игнорируется git-ом, например в assets.
В Yii2 еще проще, есть настроенные неймспейсы, а в Yii1 можем сложить расширение в extensions:
/protected/extensions/Sitemap/Sitemap.php

Чтобы использовать в Yii1, закомментирйте:

// namespace samdark\sitemap;
// use XMLWriter;

Далее, сам контроллер:

class SitemapController extends SController
{
    public $priority = 0.7; // Начальный приоритет ссылки
    public $staticpage = array(  // статические страницы для sitemap
                '/', '/contacts', '/about'
            );
    
    public function actionIndex(  )
    {
        Yii::import( 'application.extensions.Sitemap.*' );
        $sitemap = new Sitemap(Yii::getPathOfAlias('webroot.assets') . '/sitemap.xml');
        
        foreach ($this->staticpage as $staticpage) {
            $sitemap->addItem(Yii::app()->createAbsoluteUrl($staticpage), time(), Sitemap::DAILY, 1);
        }
        
        // Подтянем модель, например, Новостей с сайта
        Yii::import( 'application.models.News' );
        $criteria=new CDbCriteria;
        $criteria->select=array('alias'); // Нам нужен только алиас Новости, чтобы собрать ссылку
        $news = News::model()->published()->findAll($criteria);
        foreach ($news as $item) {
            $news_alias = Yii::app()->createAbsoluteUrl($item->alias);
            $sitemap->addItem($news_alias, time(), Sitemap::DAILY, $this->priority);
        }
        
        // write ithttps://opotemkin.ru/all/sozdanie-sitemap-na-yii-obnovlyaem-sitemap-po-kronu-chast-2/
        $sitemap->write();

    }

}

В итоге xml будет доступна по адресу www.Ваш-сайт.ru/assets/sitemap.xml
Здесь читаем продолжение...

2015   php   sitemap   yii