Как добавить страницу плагина в sitemap

Есть плагин который отдаёт страницу по адресу указанному в роутинге в конфигах плагина. Как мне данную страницу добавить в sitemap приложения для которого данный плагин и генерирует данную страницу????

1 ответ

  • 0
    Если речь плагине для Shop-Script 5, то, видимо, должен помочь хук sitemap: http://www.webasyst.ru/developers/docs/plugins/hooks/shop/sitemap/
    • 0
      $return['$urls']
      Массив данных для формирования элементов Sitemap-файла. Каждый элемент массива должен содержать ассоциативный подмассив с обязательным ключом loc и необязательными ключами lastmod, changefreq и priority.

      Дайте пример функции для работы с данным хуком : входные параметры и результат описаны крайне обширно и неоднозначно
      • 0
        Массив параметров всех поселений Shop-Script 5, настроенных для текущего сайта.
        это как-то очень непонятно
        • 0
          Пример такого массива для витрины, настроенной на корень сайта:

          Array
          (
          [url] => *
          [app] => shop
          [theme] => custom
          [theme_mobile] => custom
          [locale] => ru_RU
          [title] =>
          [meta_keywords] =>
          [meta_description] =>
          [url_type] => 0
          [type_id] => 0
          [payment_id] => 0
          [shipping_id] => 0
          [currency] => RUB
          )
      • 0
        Пример массива, который должен вернуть плагин:
        array(
        array(
        'loc' => '123',
        'lastmod' => time(),
        'changefreq' => 'daily',
        'priority' => '0.1',
        ),
        array(
        'loc' => '234',
        'lastmod' => time()+1000,
        'changefreq' => 'weekly',
        'priority' => '0.9',
        ),
        );
        • 0
          а url в каком виде? в относительном должен возвращать плагин?
          • 0
            я тут странную вещь обнаружил

            это код подключения в shopSitemapConfig.class.php

            $main_url = $this->getUrl('');
            // pages
            $sql = "SELECT full_url, url, create_datetime, update_datetime FROM ".$page_model->getTableName().'
            WHERE status = 1 AND domain = s:domain AND route = s:route';
            $pages = $page_model->query($sql, array('domain' => $domain, 'route' => $route['url']))->fetchAll();
            foreach ($pages as $p) {
            $this->addUrl($main_url.$p['full_url'], $p['update_datetime'] ? $p['update_datetime'] : $p['create_datetime'], self::CHANGE_MONTHLY, 0.6);
            }

            /**
            * @event sitemap
            * @param array $route
            * @return array $urls
            */


            $plugin_urls = wa()->event(array($this->app_id, 'sitemap'), $route);
            if ($plugin_urls) {
            foreach ($plugin_urls as $urls) {
            foreach ($urls as $url) {
            $this->addUrl($url['loc'], ifset($url['lastmod'], time()), ifset($url['changefreq']), ifset($url['priority']));
            }
            }
            }
            тут получается что при подключении данного хука ,в каждом плагине где он используется по сути надо дублировать этот класс
            можно же сделать проще

            /**
            * @event sitemap
            * @param array $route
            * @return array $urls
            */

            $route['main_url'] = $main_url; //текущая витрина

            $plugin_urls = wa()->event(array($this->app_id, 'sitemap'), $route);
            if ($plugin_urls) {
            foreach ($plugin_urls as $urls) {
            foreach ($urls as $url) {
            if ($url['loc']) $this->addUrl($main_url.$url['loc'], ifset($url['lastmod'], time()), ifset($url['changefreq']), ifset($url['priority']));
            }
            }
            }
            • 0
              >>> тут получается что при подключении данного хука ,в каждом плагине где он используется по сути надо дублировать этот класс

              Почему?
              • 0
                потому что в каждом плагине надо делать абсолютно тоже самое что происходит в классе:
                определять текущую активную витрину,
                преобразовывать её к нормальному виду
                и уже только тогда отдавать ссылку.
                зачем заставлять дублировать уже сделанную работу???? принцип экономии памяти и оптимизации работы скриптов отменили?
          • 0
            В абсолютном. Посмотрите для примера содержимое стандартного sitemap-файла.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите