Jump to content

Recommended Posts

В 18.09.2018 в 14:00, 20strannik08 сказал:

Уважаемый автор. А подскажите пожалуйста как можно исключить дубли в вашем модуле?

Я уже отвечал ранее по такому вопросу.

подозреваю, что у вас стоит модуль SeoPro и стоит формирование прямых ссылок на товар. не www.site/category/product а сразу www.site/product.  поэтому ссылка через производителей, через категории, через подкатегории на один и тот же товар выводится несколько раз

 

В 09.11.2017 в 21:56, olaff сказал:

насчет ссылок на товары, которые типа "дублируются". тут не  совсем так.

на каждый товар в дефолтном опенкарте ведёт несколько ссылок , по крайней мере, технических. вот и получается "дублировние".

например , когда модуль выводит список ссылок просто на товар, выводя все продукта -ссылка номер 1, 

второй раз он берет все категории и выводит ссылки на товары этой категории  , а так как товар как правило принадлежит к какой то категории, то вот вам и ссылка номер 2,

потом он берет всех производителей и выводит массив ссылок для производителя, что дает ссылку номер 3.

если посмотреть то ссылки на один и тот же товар должны отличаться (опять же - технические, не сео).

будет что то  типа:

1) index.php?route=product/product&product_id=30 - на товар прямая

2) index.php?route=product/product&path=20&product_id=30 - на товар прямая категории с id 20

3) index.php?route=product/product&path=33&product_id=30 - товар принадлежит не только 20 но и 33 категории

4) index.php?route=product/product&manufacturer_id=9&product_id=30 - ссылка на производителя.

Но если стоит модуль seo pro, то ссылки будут формироваться через него , типа tovar-super-puper-prodayushiysja    и будут одинаковые ссылки.

Не знаю, насколько это правильно удалять их из сайтмапа дублирующиеся, в дефолтном google_sitemap они так же дублируются. потому и не стал удалять дубли.

все таки карта сайта - это карта сайта, а не просто куча ссылок на товары.

 

Share this post


Link to post
Share on other sites
36 минут назад, olaff сказал:

Я уже отвечал ранее по такому вопросу.

подозреваю, что у вас стоит модуль SeoPro и стоит формирование прямых ссылок на товар. не www.site/category/product а сразу www.site/product.  поэтому ссылка через производителей, через категории, через подкатегории на один и тот же товар выводится несколько раз

 

Прошу прощения, я уже разобрался, в начале темы человек предлогал затереть код и он помог мне. Да стоит SeoPro, но структура url такая www.site/category/product

Share this post


Link to post
Share on other sites

Не ставится... Не найдена папка с файлами для загрузки!

Что делать?

Версия ocStore 2.3.0.2.3

Edited by oxionplay

Share this post


Link to post
Share on other sites
В 19.10.2017 в 16:24, ginsar сказал:

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

После установки открываем файл \catalog\controller\extension\feed\yandex_sitemap.php и удаляем строки 173-183

Здравствуйте. Что то сделал все по инструкции но "дубли" не пропали. обновлял модификаторы, сбрасываем кеш. "ЧПУ товаров с категориями: стоит - нет" Копировал товар, изменил все, добавил и удалил. Но дубли не пропали. 
Посмотрите пожалуйста, правильно ли все в файле catalog/controller/extension/feed/yandex_sitemap.php

Спойлер

<?php
/**
 * version 1.0
 * модуль для Opencart 2.3
 * тестировался на 370 категориях и 30к товаров.
 * Author: olaff (simbmail@mail.ru)
 */
class ControllerExtensionFeedYandexSitemap extends Controller
{
    const YANDEX_SITEMAP_FILENAME = 'yandex_sitemap.xml'; //имя файла для сайтмап
    protected $eol = "\n"; //окончание строки для pretty formating
    private $products = array(); //массив с продуктами
    private $output = ''; //строка вывода
    private $file_time_expired = '3600'; //in seconds -время хранения файла
    const DEBUG_MODE = false;

    public function __construct($registry)
    {
        parent::__construct($registry);
        $this->load->model('extension/feed/yandex_sitemap');
    }

    /**
     * если файл не валидный(отсутвует либо старый) - то пишем в него и показываем его иначе просто показываем его
     */
    public function index()
    {
        if($this->config->get('yandex_sitemap_status')){
            if ($this->needWriteFile() || self::DEBUG_MODE === true) {
                $this->setOutput();
                $this->saveToFile(self::YANDEX_SITEMAP_FILENAME, $this->output);
            } else {
                $this->setOutputFromFile(self::YANDEX_SITEMAP_FILENAME);
            }
            $this->displayYml($this->output);
        }else{
            echo 'module is off';
        }
        
    }

    /**
     * @return bool - если надо записать файла -false иначе true
     */
    public function needWriteFile()
    {
        if (is_file(self::YANDEX_SITEMAP_FILENAME)) {
            if ($this->isValidFileTime()) {
                return false;
            }
        }
        return true;
    }

    /**
     * проверяем время файла - если больше чем в настройках - false
     * @return bool
     */
    private function isValidFileTime()
    {
        $time = time() - filemtime(self::YANDEX_SITEMAP_FILENAME);
        if ($time > $this->file_time_expired) {
            return false;
        }
        return true;
    }

    /**
     * формируем текс yml для вывода или для сохранения
     * @return bool true || false - если модуль выключен
     */
    private function setOutput()
    {
        if ($this->config->get('yandex_sitemap_status')) {
            $this->output = '<?xml version="1.0" encoding="UTF-8"?>' . $this->eol;
            $this->output .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . $this->eol;

            $this->setProducts();

            foreach ($this->products as $product) {
                $this->output .= '<url>' . $this->eol;
                $this->output .= '<loc>' . $this->url->link('product/product',
                        'product_id=' . $product['product_id'], true) . '</loc>' . $this->eol;
                $this->output .= '<changefreq>weekly</changefreq>' . $this->eol;

                //так как даты может не быть - в яндексе будет предупреждение о неврном формате (так как в базе может быть
                //время строка вида 0000-00-00 00:00:00 а не null
                $actual_date = false;
                if ($product['date_modified'] && ($product['date_modified'] != '0000-00-00 00:00:00')) {
                    $actual_date = strtotime($product['date_modified']);
                }
                if (!$actual_date && $product['date_added'] && ($product['date_added'] != '0000-00-00 00:00:00')) {
                    $actual_date = strtotime($product['date_added']);
                }
                
                if ($actual_date !== false) {
                    $this->output .= '<lastmod>' . date('Y-m-d\TH:i:sP', $actual_date) . '</lastmod>' . $this->eol;
                }
                
                $this->output .= '<priority>1.0</priority>' . $this->eol;
                $this->output .= '</url>' . $this->eol;

            }

            $this->output .= $this->getCategories(0);

            $manufacturers = $this->model_extension_feed_yandex_sitemap->getManufacturers();

            foreach ($manufacturers as $manufacturer) {
                $this->output .= '<url>' . $this->eol;
                $this->output .= '<loc>' . $this->url->link('product/manufacturer/info',
                        'manufacturer_id=' . $manufacturer['manufacturer_id'], true) . '</loc>' . $this->eol;
                $this->output .= '<changefreq>weekly</changefreq>' . $this->eol;
                $this->output .= '<priority>0.7</priority>' . $this->eol;
                $this->output .= '</url>' . $this->eol;

                
            }

            $informations = $this->model_extension_feed_yandex_sitemap->getInformations();

            foreach ($informations as $information) {
                $this->output .= '<url>' . $this->eol;
                $this->output .= '<loc>' . $this->url->link('information/information',
                        'information_id=' . $information['information_id'], true) . '</loc>' . $this->eol;
                $this->output .= '<changefreq>weekly</changefreq>' . $this->eol;
                $this->output .= '<priority>0.5</priority>' . $this->eol;
                $this->output .= '</url>' . $this->eol;
            }

            $this->output .= '</urlset>' . $this->eol;
            return true;
        }
        return false;
    }

    /**
     * получаем продукты для дальнейшей обработки
     */
    private function setProducts()
    {
        $this->products = $this->model_extension_feed_yandex_sitemap->getProducts();
    }

    /**
     * рекурсивно строит путь категорий
     * @param $parent_id - id родительской категории
     * @param string $current_path - текущий путь
     * @return string строка xml для категорий
     */
    protected function getCategories($parent_id, $current_path = '')
    {
        $output = '';

        $results = $this->model_extension_feed_yandex_sitemap->getCategories($parent_id);

        foreach ($results as $result) {
            if (!$current_path) {
                $new_path = $result['category_id'];
            } else {
                $new_path = $current_path . '_' . $result['category_id'];
            }

            $output .= '<url>' . $this->eol;
            $output .= '<loc>' . $this->url->link('product/category', 'path=' . $new_path, true) . '</loc>' . $this->eol;
            $output .= '<changefreq>weekly</changefreq>' . $this->eol;
            $output .= '<priority>0.7</priority>' . $this->eol;
            $output .= '</url>' . $this->eol;

            
            $output .= $this->getCategories($result['category_id'], $new_path);
        }

        return $output;
    }

    /**
     *
     * сортировка продуктов из сформированного массива $this->products
     * на момент вызова массив должен быть уже сформирован
     * @param array $filter_data - сортировка по id категории или производителей
     * @return array
     */
    private function getProducts($filter_data = array())
    {
        $products = array();
        if (isset($filter_data['filter_category_id']) && $filter_data['filter_category_id']) {
            foreach ($this->products as $product) {
                if ($product['category_id'] === $filter_data['filter_category_id']) {
                    $products[] = array(
                        'product_id' => $product['product_id'],
                        'date_modified' => $product['date_modified'],
                        'date_added' => $product['date_modified'],
                    );
                }
            }
        }
        if (isset($filter_data['filter_manufacturer_id']) && $filter_data['filter_manufacturer_id']) {
            foreach ($this->products as $product) {
                if ($product['manufacturer_id'] === $filter_data['filter_manufacturer_id']) {
                    $products[] = array(
                        'product_id' => $product['product_id'],
                        'date_modified' => $product['date_modified'],
                        'date_added' => $product['date_added'],
                    );
                }
            }
        }
        return $products;
    }

    /**
     * сохраняем в файл
     * @param $filename
     * @return bool
     */
    public function saveToFile($filename, $output = '')
    {
        $fp = fopen($filename, 'w+');
        fwrite($fp, $output);
        fclose($fp);
        return true;
    }

    /**
     * настраиваем вывод из файла
     * @param $filename - имя файла
     * @return bool
     */
    private function setOutputFromFile($filename)
    {
        $this->output = file_get_contents($filename);
        return true;
    }

    /**
     * отображаем то что надо в формате xml
     * @param $output
     */
    private function displayYml($output)
    {
        $this->response->addHeader('Content-Type: application/xml');
        $this->response->setOutput($output);
    }
}
 

 

Edited by Deelane

Share this post


Link to post
Share on other sites

Все решил проблему. Для Google Sitemap есть - Google Sitemap Fast

Работает на много быстрее и так же как Yandex Sitemap opencart 2.3 избавляет от "дублей" Спасибо!

Edited by Deelane

Share this post


Link to post
Share on other sites

Здравствуйте! Вебмастер выдал ошибку. Что это значит и как быть, подскажите пожалуйста)

 

Тип файла Файл Sitemap
Размер 35,01 МБ
Количество ссылок 50 000
1 ошибкапредупреждений нет

Превышено допустимое число страниц

Share this post


Link to post
Share on other sites

Добрый вечер! Подскажите какой файл скачивать? Их там 4. У меня ocStore 2.3.0.2.3. Спасибо!

Share this post


Link to post
Share on other sites

В карте сайта отсутствует главная страница. Нужна ли она там? Влияет ли на продвижение?

Share this post


Link to post
Share on other sites
Posted (edited)

У нас выдает ошибку в яндекс вебмастер.

Версия движка ocStore 2.3.0.2.3.

Как можно поправить?

Спойлер

Неправильный адрес страницы

<b>Warning</b>: unlink(/var/www/www-root/data/www/mebeliopt.ru/system/storage/cache/cache.product.seopath.1563675316): No such file or directory in <b>/var/www/www-root/data/www/mebeliopt.ru/system/library/cache/file.php</b> on line <b>68</b><b>Warning</b>: unlink(/var/www/www-root/data/www/mebeliopt.ru/system/storage/cache/cache.product.seopath.1563675316): No such file or directory in <b>/var/www/www-root/data/www/mebeliopt.ru/system/library/cache/file.php</b> on line <b>68</b><b>Warning</b>: unlink(/var/www/www-root/data/www/mebeliopt.ru/system/storage/cache/cache.product.seopath.1563675316): No such file or directory in <b>/var/www/www-root/data/www/mebeliopt.ru/system/library/cache/file.php</b> on line <b>68</b><b>Warning</b>: unlink(/var/www/www-root/data/www/mebeliopt.ru/system/storage/cache/cache.product.seopath.1563675316): No such file or directory in <b>/var/www/www-root/data/www/mebeliopt.ru/system/library/cache/file.php</b> on line <b>68</b><b>Warning</b>: unlink(/var/www/www-root/data/www/mebeli

 

     
     
Edited by helen2014

Share this post


Link to post
Share on other sites

Всем здравствуйте

Поставил по инструкции

перешел по ссылке и результат 

Warning: fread(): Length parameter must be greater than 0 in /home/otvby/xn-----7kcabarnahsbehu1bnbi7bh1bfeo1k.xn--90ais/system/library/cache/file.php on line 32

что это означает?

Share this post


Link to post
Share on other sites
В 26.02.2018 в 16:11, MFX сказал:

Помогите разобраться:

 

ocStore 2.3

Тема July

 

Залил модуль, все сделал по инструкции, ни один шаг не пропусти, почистил кеш, обновил менеджер дополнений, установил в настройках администратор редактировать все.(хотя почему-то не увидел там этот модуль). Перехожу в каналы продвижения, вижу модуль, захожу в него, нажимаю включить. Что-то происходит и все на этом. Ничего не поняв захожу в модуль. он мне говорит: Доступ запрещен, вали отсюда. По ссылке на сайтмап, выдает ошибку 404!

В чем может быть проблема!?

 

P.S. Попытка удалить модуль ручками и заново закачать была, результата ноль! Все так же показывается!

 

Установите права в СИСТЕМА>ПОЛЬЗОВАТЕЛИ>ГРУППА и будет Вам счастье.

Share this post


Link to post
Share on other sites

Кто нибудь знает причину, почему статус модуля - Отключено!

Хотя он включен и работает, а стоит - отключено, почему и как исправить?

Share this post


Link to post
Share on other sites
В 17.04.2019 в 12:36, shushakovkl сказал:

В карте сайта отсутствует главная страница. Нужна ли она там? Влияет ли на продвижение?

Тоже интересно.

Share this post


Link to post
Share on other sites
В 21.09.2018 в 15:58, olaff сказал:

Я уже отвечал ранее по такому вопросу.

подозреваю, что у вас стоит модуль SeoPro и стоит формирование прямых ссылок на товар. не www.site/category/product а сразу www.site/product.  поэтому ссылка через производителей, через категории, через подкатегории на один и тот же товар выводится несколько раз

 

 

Все прекрасно работает!

Edited by AlexSeo

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By olaff
      Модуль для создания карты сайта подходящей для Яндекса.
       
       Модуль создавался по нескольким причинам - так как карта Google Sitemap
       которая идет в  комплекте с Opencart 2.3 не принимается Yandex (из за тегов image, как правило).
       Но помимо этого логика стандартного модуля оставляет желать лучшего- при более-менее большом количестве товаров и категорий 
       ему часто не хватает времени или памяти. и он падает с ошибкой.
       В данном модуле переделана модель и логика обработка списка продукта, что значительно снижает нагрузку на БД.
       И делает получившуюся карту сайта валидной для Яндекса
       После первого запуска в корне сайта появится файл yandex_sitemap.xml, который на час кеширует получившийся сайтмап.
       Сам модуль не модифицирует никакие файлы движка, работает автономно.
       
       Установка:
       1) Копируем содержимое директории upload в корневую директорию веб сервера.
       2) Заходим в админку "Группы пользователей" -> выбираем нужную группу (Administrator по умолчанию), жмем кнопку редактировать
       3) Ставим галочки "Разрешён просмотр" и "Разрешено внесение изменений" для extension/feed/yandex_sitemap
       4) Сохраняем изменения
       5) Переходим в "Модули / Расширения" .
       6) Выбираем тип Каналы продвижения.
       7) В списке находим Yandex Sitemap, жмем кнопку "Активировать". Потом кнопку "Редактировать"
       8) Ставим статус модуля "Включено", сохраняем изменения.
       в настройках модуля находится ссылка на sitemap, ссылка имеет вид
      https://your_domain.com/index.php?route=extension/feed/yandex_sitemap  по данной ссылке можно просмотреть получившийся сайтмап.
      и добавить эту ссылку в личный кабинет Яндекса
       
      из за своей структуры подходит только для опенкарта 2.3. Тестировался на нем же - на магазине с более чем 300 категориями и 12 тыс. товаров.
      на OcStore 2.3 не тестировался, но работать должен
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.