как настроить yii2-sitemap-module

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

как настроить yii2-sitemap-module

Сообщение svil »

Настроила по документации файлы https://github.com/himiklab/yii2-sitemap-module
В модели добавила поведение и use, в web добавила. Ошибок нет.
Как посмотреть sitemap?



web.php

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

 'modules' => [
        'admin' => [
            'class' => 'app\modules\admin\Module',
            'layout'=> 'admin',
             'defaultRoute'=>'order/index',
        ],
        'yii2images' => [
            'class' => 'rico\yii2images\Module',
            //be sure, that permissions ok
            //if you cant avoid permission errors you have to create "images" folder in web root manually and set 777 permissions
            'imagesStorePath' => 'upload/store', //path to origin images
            'imagesCachePath' => 'upload/cache', //path to resized copies
            'graphicsLibrary' => 'GD', //but really its better to use 'Imagick'
            'placeHolderPath' => '@webroot/upload/store/no-image.png', // if you want to get placeholder when image not exists, string will be processed by Yii::getAlias
            'imageCompressionQuality' => 100, // Optional. Default value is 85.

        ],
        'sitemap' => [
            'class' => 'himiklab\sitemap\Sitemap',
            'models' => [
                // your models
                'app\modules\news\models\News',
                // or configuration for creating a behavior
                [
                    'class' => 'app\modules\news\models\News',
                    'behaviors' => [
                        'sitemap' => [
                            'class' => SitemapBehavior::className(),
                            'scope' => function ($model) {
                                /** @var \yii\db\ActiveQuery $model */
                                $model->select(['url', 'lastmod']);
                                $model->andWhere(['is_deleted' => 0]);
                            },
                            'dataClosure' => function ($model) {
                                /** @var self $model */
                                return [
                                    'loc' => Url::to($model->url, true),
                                    'lastmod' => strtotime($model->lastmod),
                                    'changefreq' => SitemapBehavior::CHANGEFREQ_DAILY,
                                    'priority' => 0.8
                                ];
                            }
                        ],
                    ],
                ],
            ],
        


...
 'urlManager' => [
//            'enablePrettyUrl' => true, //
//            'showScriptName' => false,

            //для gii
            'enablePrettyUrl' => false,
           'showScriptName' => true,
            'rules' => [
                'category/<id:\d+>/page/<page:\d+>' => 'category/view',
                'category/<id:\d+>' => 'category/view',
                'product/<id:\d+>' => 'product/view',
                'search' => 'category/search',
                'cart/<id:\d+>' => 'cart/pi',
                'brand/<id:\d+>' => 'brand/view',
                'test/<id:\d+>/page/<page:\d+>' => 'test/page',
                'test/<id:\d+>' => 'test/page',
                'footer/<id:\d+>' => 'footer/hits',
                '<_m:debug>/<_c:\w+>/<_a:\w+>' => '<_m>/<_c>/<_a>',
                'pattern' => 'sitemap', 'route' => 'sitemap/default/index', 'suffix' => '.xml',
              //  '<id:([0-9])+>/images/image-by-item-and-alias' => 'yii2images/images/image-by-item-and-alias',

               //    '' => 'site/index',
               // '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
            ],
        ],
Последний раз редактировалось svil 2018.08.16, 20:46, всего редактировалось 1 раз.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: как настроить yii2-sitemap-module

Сообщение futbolim »

site.com/sitemap?
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

переход на главную страницу

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

http://localhost/~svetlanailina/shop/web/sitemap.xml
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

Вид и контроллер в vendor. Может из-за localhost не открывается?
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

в консоли переходит на sitemap.xml Только она выглядит как обычная страница - не xml
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: как настроить yii2-sitemap-module

Сообщение andku83 »

исходя из:

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

            'enablePrettyUrl' => false,
           'showScriptName' => true,
...web/index.php?r=sitemap/default/index
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

Ошибка

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

Class 'app\modules\news\models\News' not found
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

Подробности ошибки и в 2 местах красным

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


    1. in /Users/svetlanailina/Sites/shop/vendor/himiklab/yii2-sitemap-module/Sitemap.php at line 76
    67686970717273747576777879808182838485

                                $urls = $this->urls;
            foreach ($this->models as $modelName) {
                /** @var behaviors\SitemapBehavior|\yii\db\ActiveRecord $model */
                if (is_array($modelName)) {
                    $model = new $modelName['class'];
                    if (isset($modelName['behaviors'])) {
                        $model->attachBehaviors($modelName['behaviors']);
                    }
                } else {
                    $model = new $modelName;
                }
     
                $urls = array_merge($urls, $model->generateSiteMap());
            }
     
            $sitemapData = $this->createControllerByID('default')->renderPartial('index', ['urls' => $urls]);
            if ($this->enableGzipedCache) {
                $sitemapData = gzencode($sitemapData);
            }
                    

    2. in /Users/svetlanailina/Sites/shop/vendor/himiklab/yii2-sitemap-module/controllers/DefaultController.php at line 26 – himiklab\sitemap\Sitemap::buildSitemap()
    20212223242526272829303132

                            public function actionIndex()
        {
            /** @var \himiklab\sitemap\Sitemap $module */
            $module = $this->module;
     
            if (!$sitemapData = $module->cacheProvider->get($module->cacheKey)) {
                $sitemapData = $module->buildSitemap();  //тут красным
            }
     
            Yii::$app->response->format = Response::FORMAT_RAW;
            $headers = Yii::$app->response->headers;
            $headers->add('Content-Type', 'application/xml');
            if ($module->enableGzip) {
                    

    3. himiklab\sitemap\controllers\DefaultController::actionIndex()
    4. in /Users/svetlanailina/Sites/shop/vendor/yiisoft/yii2/base/InlineAction.php at line 57 – call_user_func_array([himiklab\sitemap\controllers\DefaultController, 'actionIndex'], [])
    5. in /Users/svetlanailina/Sites/shop/vendor/yiisoft/yii2/base/Controller.php at line 157 – yii\base\InlineAction::runWithParams(['r' => 'sitemap/default/index'])
    6. in /Users/svetlanailina/Sites/shop/vendor/yiisoft/yii2/base/Module.php at line 528 – yii\base\Controller::runAction('index', ['r' => 'sitemap/default/index'])
    7. in /Users/svetlanailina/Sites/shop/vendor/yiisoft/yii2/web/Application.php at line 103 – yii\base\Module::runAction('sitemap/default/index', ['r' => 'sitemap/default/index'])
    8. in /Users/svetlanailina/Sites/shop/vendor/yiisoft/yii2/base/Application.php at line 386 – yii\web\Application::handleRequest(yii\web\Request)
    9. in /Users/svetlanailina/Sites/shop/web/index.php at line 13 – yii\base\Application::run()
    78910111213

                        require __DIR__ . '/../vendor/autoload.php';
    require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
     
    $config = require __DIR__ . '/../config/web.php';
    require_once __DIR__ . '/../functions.php';
     
    (new yii\web\Application($config))->run(); //тут красным
                    

$_GET = [
    'r' => 'sitemap/default/index',
];

$_COOKIE = [
    '_ga' => 'GA1.1.1057812100.1523460938',
    '_ym_uid' => '15317451821059736191',
    '_ym_d' => '1531745182',
    'PHPSESSID' => 'd37ogqck15qdcfh8qrhtfv438u',
    '_csrf' => '53fcaca8b08e692f2b01cdb0f479b0319bbd7831d9923fb99440293179704eb1a:2:{i:0;s:5:"_csrf";i:1;s:32:"x_HMaGIBsLl_z7YAnNXANSlP9X1rpSMv";}',
    'dcjq-accordion' => '15',
    '_identity' => 'd6f5c90d21bca5c6deed45e35b713bdfea28e9746507186476551e439822f55da:2:{i:0;s:9:"_identity";i:1;s:46:"[1,"PGsP0oTiPTfJve6GOunsmfIo-G-w7dRt",2592000]";}',
];

$_SESSION = [
    '__flash' => [],
    '__captcha/site/captcha' => 'molaae',
    '__captcha/site/captchacount' => 1,
    'cart' => [
        2 => [
            'qty' => 1,
            'name' => 'Утеплитель двигателя Klimat Premium №2',
            'price' => 1350.0,
            'img' => 'product2.jpg',
        ],
        11 => [
            'qty' => 1,
            'name' => 'Шина всесезонная AMTEL К-156-1 185/75 R16 92Q ',
            'price' => 2000.0,
            'img' => 'product9.jpg',
        ],
        1 => [
            'qty' => 1,
            'name' => 'Утеплитель двигателя HeatShield L                 ',
            'price' => 1000.0,
            'img' => 'product1.jpg',
        ],
    ],
    'cart.qty' => 3,
    'cart.sum' => 4350.0,
    '__returnUrl' => '/~svetlanailina/shop/web/index.php?r=admin',
    '__id' => 1,
];

Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

http://localhost/~svetlanailina/shop/we ... ult/index/
расскомментировала

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

 'enablePrettyUrl' => true, //
            'showScriptName' => false,
закомментировала

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

         //для gii
//            'enablePrettyUrl' => false,
//           'showScriptName' => true,
Ошибки нет, но и xml нет, просто страница главная
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

некоторых фоток нет, слайдер не листает, замершая страница
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

Перенесла на хостинг http://itcrc.ru/sitemap.xml Ошибка 404
Может надо было в контроллеры поведение добавлять, а не в модели?
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

Даже простая карта не получается на локальном компе http://localhost/~svetlanailina/shop/we ... r=site/map
map.php вид

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

<?php
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<urlset xmlns="https://www.sitemaps.org/schemas/sitemap/0.9">
    <? foreach($urls as $url): ?>
        <url>
            <loc><?= $host . $url[0] ?></loc>
            <changefreq><?= $url[1] ?></changefreq>
            <priority>0.5</priority>
        </url>
    <? endforeach; ?>
</urlset>
контроллер SiteController.php

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

public function actionMap() {
        $urls = array();
        $categories = Category::find()->all();
        foreach ($categories as $category) {
            $urls[] = array(
                Yii::$app->urlManager->createUrl(
                    ['/category/' . $category->id . '/' . $category->name])
            , 'daily'
            );
        }
        $posts = Blog::find()->all();
        foreach ($posts as $post) {
            $urls[] = array(
                Yii::$app->urlManager->createUrl(
                    ['/blog/' . $post->id . '/' . $post->name])
            , 'weekly'
            );
        }
        $xml_sitemap = $this->renderPartial('map', array(
            'host' => Yii::$app->request->hostInfo,
            'urls' => $urls,
        ));
        Yii::$app->response->format = \yii\web\Response::FORMAT_XML;
        echo $xml_sitemap;

    }
URLManager

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

 'urlManager' => [
            'enablePrettyUrl' => true, //
            'showScriptName' => false,

            //для gii
//            'enablePrettyUrl' => false,
//           'showScriptName' => true,
            'rules' => [
                'category/<id:\d+>/page/<page:\d+>' => 'category/view',
                'category/<id:\d+>' => 'category/view',
                'product/<id:\d+>' => 'product/view',
                'search' => 'category/search',
                'cart/<id:\d+>' => 'cart/pi',
                'brand/<id:\d+>' => 'brand/view',
                'test/<id:\d+>/page/<page:\d+>' => 'test/page',
                'test/<id:\d+>' => 'test/page',
                'footer/<id:\d+>' => 'footer/hits',
                '<_m:debug>/<_c:\w+>/<_a:\w+>' => '<_m>/<_c>/<_a>',
               // 'pattern' => 'sitemap', 'route' => 'sitemap/default/index', 'suffix' => '.xml',
                'sitemap.xml' => 'site/map',
Перехожу site/map или sitemap.xml - не работает
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

В консоли ошибка js:

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

Перешёл на http://localhost/~svetlanailina/shop/web/index.php?r=site/map
[Показать/скрыть детали сообщения.] TypeError: e is null[Подробнее] combine.js:98:3302 
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: как настроить yii2-sitemap-module

Сообщение andku83 »

для использования:

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

            'enablePrettyUrl' => true, //
            'showScriptName' => false,
необходим .htaccess
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

http://itcrc.ru/sitemap.xml страница не найдена
в папке web .htaccess (апач смотрит в папку web)

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

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

модель и контроллер в папке vendor сами загрузились при установке, я их не меняла и не устанавливала в виды и в контроллеры проекта
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

может в vendor даны образцы, которые надо создать в контроллере и в виде?
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

Написала в githube разработчикам https://github.com/himiklab/yii2-sitema ... /issues/12
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: как настроить yii2-sitemap-module

Сообщение svil »

Переделала настройки - не помогло:

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

'sitemap' => [
            'class' => 'himiklab\sitemap\Sitemap',
            'models' => [
                // your models
//                'app\models\Category',
//                'app\models\Blog',
//                'app\models\Brand',
//                'app\models\Cart',
//                'app\models\Comment',
                //'app\modules\news\models\News',
                // or configuration for creating a behavior
                [
                   // 'class' => 'app\modules\news\models\News',
                    'behaviors' => [
                        'sitemap' => [
                            'class' => SitemapBehavior::className(),
                            'scope' => function ($model) {
                                /** @var \yii\db\ActiveQuery $model */
                                $model->select(['url', 'lastmod']);
                                $model->andWhere(['is_deleted' => 0]);
                            },
                            'dataClosure' => function ($model) {
                                /** @var self $model */
                                return [
                                    'loc' => Url::to($model->url, true),
                                    'lastmod' => strtotime($model->lastmod),
                                    'changefreq' => SitemapBehavior::CHANGEFREQ_DAILY,
                                    'priority' => 0.8
                                ];
                            }
                        ],
                    ],
Ответить