Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Поддержка] Yandex Sitemap opencart 2.3


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 они так же дублируются. потому и не стал удалять дубли.

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

 

Надіслати
Поділитися на інших сайтах

36 минут назад, olaff сказал:

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

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

 

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

Надіслати
Поділитися на інших сайтах


  • 2 months later...
  • 2 weeks later...
В 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 ([email protected])
 */
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);
    }
}
 

 

Змінено користувачем Deelane
Надіслати
Поділитися на інших сайтах


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

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

Змінено користувачем Deelane
Надіслати
Поділитися на інших сайтах


  • 1 month later...
  • 1 month later...

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

 

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

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

Надіслати
Поділитися на інших сайтах


  • 1 month later...
  • 3 months later...

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

Версия движка 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

 

     
     
Змінено користувачем helen2014
Надіслати
Поділитися на інших сайтах


  • 5 weeks later...

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

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

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

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

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

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...
В 26.02.2018 в 16:11, MFX сказал:

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

 

ocStore 2.3

Тема July

 

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

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

 

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

 

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

Надіслати
Поділитися на інших сайтах

  • 2 weeks later...
В 21.09.2018 в 15:58, olaff сказал:

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

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

 

 

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

Змінено користувачем AlexSeo
Надіслати
Поділитися на інших сайтах


  • 4 weeks later...

Добрый день, подскажите пожалуйста, а есть такой же модуль с image тегами для OcStore 2.3?

Или может google sitemap, который бы запускался периодически, а то стандартный google sitemap видимо не успевает за 30 секунд сформировать XML так как картинки генерирует, и для полной генерации ему нужно раза 4 минимум запуститься. Короче это приводит к тому, что роботы не могут обойти sitemap.

 

Мысли в слух:

1. Можно попробовать открыть Ваш модуль и посмотреть как происходит генерация кеша каждый час и попробовать внедрить это в стандартный модуль google sitemap

2. Попробовать увеличить кол-во и чистоту запусков стандартного модуля google sitemap

Надіслати
Поділитися на інших сайтах


  • 4 weeks later...
В 01.03.2019 в 11:44, likar сказал:

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

 

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

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

Кто смог решить данный вопрос?

Надіслати
Поділитися на інших сайтах


1 час назад, Triplea сказал:

Кто смог решить данный вопрос?

Разбивать по страницам.
Я решил, что проще купить модуль за 300 р. там реально есть все, что нужно. Советую.

 

Надіслати
Поділитися на інших сайтах


В 08.11.2019 в 15:24, AlektroNik сказал:

Разбивать по страницам.
Я решил, что проще купить модуль за 300 р. там реально есть все, что нужно. Советую.

 

А те модули, которые стоят (google sitemap) и тот, что я поставить (yandex sitemap) нужно удалять? 

Надіслати
Поділитися на інших сайтах


1 час назад, Triplea сказал:

А те модули, которые стоят (google sitemap) и тот, что я поставить (yandex sitemap) нужно удалять? 

 

google sitemap не еадо удалять. FX Sitemap его модифицирует для совместимости с другими модулями и по факту и есть google sitemap, только переписанный на 100%.

 

А yandex sitemap я удалил, но это не обязательно. 

Надіслати
Поділитися на інших сайтах


  • 2 months later...

Добрый день! помогите пожалуйста:

Ошибка:

Notice: Error: Could not load template /home/c/cd76988/ronexavto/public_html/admin/view/template/extension/feed/yandex_sitemap.tpl! in /home/c/cd76988/ronexavto/public_html/system/storage/modification/system/library/template/php.php on line 23

 

А это тот самый файл:

 

<?php
namespace Template;
final class PHP {
    private $data = array();
    
    public function set($key, $value) {
        $this->data[$key] = $value;
    }
    
    public function render($template) {
        $file = DIR_TEMPLATE . $template;

        if (is_file($file)) {
            extract($this->data);

            ob_start();

            require(modification($file));

            return ob_get_clean();
        }

        trigger_error('Error: Could not load template ' . $file . '!');
        exit();
    }    
}

 

Надіслати
Поділитися на інших сайтах


  • 2 months later...

Ребята, всем привет!
Такой вопрос. Есть ли смысл в этой строке выставлять срок сутки? Да и есть ли смысл вообще в этой строке?  
private $file_time_expired = '3600';

Надіслати
Поділитися на інших сайтах


Есть кто знающий? Прошу высказать мнение

В 22.04.2020 в 14:34, strongsport сказал:

Ребята, всем привет!
Такой вопрос. Есть ли смысл в этой строке выставлять срок сутки? Да и есть ли смысл вообще в этой строке?  
private $file_time_expired = '3600';

 

Надіслати
Поділитися на інших сайтах


В 26.04.2020 в 01:14, strongsport сказал:

Есть кто знающий? Прошу высказать мнение

 

это время жизни файла, в качестве кеша в секундах ( то есть 1 час, а не сутки). 

Если через час снова запросить генерацию сайтмапа, то будет генерироваться новый файл.

И все запросы в течении часа после генерации не будут снова его генерировать, а будут отдавать уже готовый файл.

Это экономит время и ресурсы, так как генерация файла по всем товарам - это гораздо более "тяжелая" операция, нежели просто зачитать и отдать по запросу файл.

 

Хотите, можете поставить 0, пусть генерируется при каждом запросе, это ваше право

Надіслати
Поділитися на інших сайтах

  • 3 weeks later...
В 27.04.2020 в 19:26, olaff сказал:

это время жизни файла, в качестве кеша в секундах ( то есть 1 час, а не сутки). 

Если через час снова запросить генерацию сайтмапа, то будет генерироваться новый файл.

И все запросы в течении часа после генерации не будут снова его генерировать, а будут отдавать уже готовый файл.

Это экономит время и ресурсы, так как генерация файла по всем товарам - это гораздо более "тяжелая" операция, нежели просто зачитать и отдать по запросу файл.

 

Хотите, можете поставить 0, пусть генерируется при каждом запросе, это ваше право

 

Механизм то понятен. Потому и возник вопрос - не час, а сутки выставить.. Есть смысл в этом?

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.