генерация sitemap.xml на yii

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Ghost_nsk
Сообщения: 787
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск

генерация sitemap.xml на yii

Сообщение Ghost_nsk » 2012.11.08, 10:18

сабж товарищи) поделитесь скриптом или ссылкой на таковой, я его потом в крон бахну)

AlTiger
Сообщения: 199
Зарегистрирован: 2012.01.15, 18:37

Re: генерация sitemap.xml на yii

Сообщение AlTiger » 2012.11.08, 10:28

Все зависит от структуры приложения.
Я реализовал так.
Каждая модуль "имеющий страницы" знает страницы с каких нужно взять сайтмап. Потом проходя по всем модулям смотрим какие модели нужно дернуть. Дергаю получаю ссылки, пихаю в xml и все

Аватара пользователя
Ghost_nsk
Сообщения: 787
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск

Re: генерация sitemap.xml на yii

Сообщение Ghost_nsk » 2012.11.08, 10:49

нашел тут
https://github.com/DanaLuther/ESitemap

кто-нибудь юзает?

Аватара пользователя
Ghost_nsk
Сообщения: 787
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск

Re: генерация sitemap.xml на yii

Сообщение Ghost_nsk » 2012.11.08, 10:49

AlTiger писал(а):Все зависит от структуры приложения.
Я реализовал так.
Каждая модуль "имеющий страницы" знает страницы с каких нужно взять сайтмап. Потом проходя по всем модулям смотрим какие модели нужно дернуть. Дергаю получаю ссылки, пихаю в xml и все
в принципе как вариант :)

Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: генерация sitemap.xml на yii

Сообщение anton44eg » 2012.11.08, 11:11

я генерирую консольной коммандой. могу выложить примерный код. есть поддержка мультифайлового сайтмапа.

Аватара пользователя
Ghost_nsk
Сообщения: 787
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск

Re: генерация sitemap.xml на yii

Сообщение Ghost_nsk » 2012.11.08, 14:39

anton44eg писал(а):я генерирую консольной коммандой. могу выложить примерный код. есть поддержка мультифайлового сайтмапа.
давай, посмотрим :)

Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: генерация sitemap.xml на yii

Сообщение anton44eg » 2012.11.08, 14:57

Код: Выделить всё

<?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
Сообщения: 787
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск

Re: генерация sitemap.xml на yii

Сообщение Ghost_nsk » 2012.11.08, 15:15

хорош :)

Аватара пользователя
Ghost_nsk
Сообщения: 787
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск

Re: генерация sitemap.xml на yii

Сообщение Ghost_nsk » 2013.01.16, 19:10

народ посоветуйте че подмутить с линуксом, он мне не дает класть файл в корень, не хотелось бы права ставить 775
система centos + nginx (запускается от юзера apache)

andreyrud
Сообщения: 265
Зарегистрирован: 2011.09.26, 14:59

Re: генерация sitemap.xml на yii

Сообщение andreyrud » 2013.01.16, 19:44

Ghost_nsk писал(а):народ посоветуйте че подмутить с линуксом, он мне не дает класть файл в корень, не хотелось бы права ставить 775 система centos + nginx (запускается от юзера apache)
Ну и не клади. Пропиши полный путь к файлу сайтмап.хмл в роботс.тхт

Аватара пользователя
Ghost_nsk
Сообщения: 787
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск

Re: генерация sitemap.xml на yii

Сообщение Ghost_nsk » 2013.01.17, 05:09

andreyrud писал(а):
Ghost_nsk писал(а):народ посоветуйте че подмутить с линуксом, он мне не дает класть файл в корень, не хотелось бы права ставить 775 система centos + nginx (запускается от юзера apache)
Ну и не клади. Пропиши полный путь к файлу сайтмап.хмл в роботс.тхт
точняк спс

Аватара пользователя
ElisDN
Сообщения: 5234
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: генерация sitemap.xml на yii

Сообщение ElisDN » 2013.04.08, 09:47

Тоже здесь со воим Sitemap постою.

Ответить