Sitemap Google - "Неправильно введена дата"

Тема в разделе "Ошибки и их решения", создана пользователем Innuenze, 10 окт 2017.

  1. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    К даниелю
     
  2. Dimasscus

    Dimasscus Пользователь

    Сообщения:
    110
    Симпатии:
    1
    :))
    ок.
    какой модуль посоветуете для небольшого -до 5000 колва товаров
     
  3. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    можно и стандартный, тупо выпилив дубликаты для товаров
     
  4. Tom

    Tom Специалист

    Сообщения:
    848
    Симпатии:
    292
    Случайно нашёл тему, предложу своё решение , которое разбивает большие сайтмапы на части (по 250 товаров в каждом сайтмапе) , убраны дубли и исправленна проблема с ластмод. Решение на ваш страх и риск, что бы позже не читать, что нужно было так а не так и что "мне сеошник сказал".
    Открываете файл
    catalog/controller/extension/feed/google_sitemap.php
    Сохраняете его. Например скачиваете на комп, называете его google_sitemap.php_ORG, заливаете обратно. Это будет вашей резервной копией оригинального файла.
    После чего открываете файл google_sitemap.php и заменяете содержимое на это

    Код:
    <?php
    class ControllerExtensionFeedGoogleSitemap extends Controller {
        public function index() {
            // Задаем лимит товаров в одном сайтмапе
            $sitemap_limit = 250;
    
            if ($this->config->get('feed_google_sitemap_status')) {
                if (isset($this->request->get['manufacturers']) && $this->request->get['manufacturers'] == 'active') {
                    $output = $this->getManufactureresSiteMaps();
                } elseif (isset($this->request->get['start'])) {
                    $output = $this->getProductsSiteMaps($this->request->get['start'], $sitemap_limit);
                } else {
                    $output = '<?xml version="1.0" encoding="UTF-8"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
    
                    $this->load->model('catalog/product');
                    $totalProducts = $this->model_catalog_product->getTotalProducts();
                    for ($i = 0; $i < $totalProducts; $i = $i + $sitemap_limit) {
                        $output .= '<sitemap><loc>' . htmlspecialchars(HTTPS_SERVER . 'index.php?route=extension/feed/google_sitemap&start=' . $i, ENT_XML1) . '</loc><lastmod>2023-02-19T18:23:17+00:00</lastmod></sitemap>';
                    }
                    $output .= '<sitemap><loc>' . htmlspecialchars(HTTPS_SERVER . 'index.php?route=extension/feed/google_sitemap&manufacturers=active', ENT_XML1) . '</loc><lastmod>2023-02-19T18:23:17+00:00</lastmod></sitemap>';
                    $output .= '</sitemapindex>';
                }
    
                $this->response->addHeader('Content-Type: application/xml');
                $this->response->setOutput($output);
            }
        }
    
        protected function getCategories($parent_id, $current_path = '') {
            $output = '';
    
            $results = $this->model_catalog_category->getCategories($parent_id);
    
            foreach ($results as $result) {
                $new_path = $current_path ? $current_path . '_' . $result['category_id'] : $result['category_id'];
    
                $output .= '<url>';
                $output .= '  <loc>' . htmlspecialchars($this->url->link('product/category', 'path=' . $new_path), ENT_XML1) . '</loc>';
                $output .= '  <changefreq>daily</changefreq>';
                $output .= '  <priority>0.7</priority>';
                $output .= '</url>';
    
                $output .= $this->getCategories($result['category_id'], $new_path);
            }
    
            return $output;
        }
    
        protected function getProductsSiteMaps($start, $limit) {
            $output = '<?xml version="1.0" encoding="UTF-8"?>';
            $output .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">';
    
            $this->load->model('catalog/product');
            $this->load->model('tool/image');
    
            $filter_data = array(
                'start' => $start,
                'limit' => $limit,
            );
    
            $products = $this->model_catalog_product->getProducts($filter_data);
            foreach ($products as $product) {
                if ($product['image']) {
                    $output .= '<url>';
                    $output .= '  <loc>' . htmlspecialchars($this->url->link('product/product', 'product_id=' . $product['product_id']), ENT_XML1) . '</loc>';
                    $output .= '  <changefreq>daily</changefreq>';
                    $lastmod = $product['date_modified'] && $product['date_modified'] > '2000-01-01' ? $product['date_modified'] : $product['date_added'];
                    $lastmod = strtotime($lastmod) ? date('Y-m-d\TH:i:sP', strtotime($lastmod)) : date('Y-m-d\TH:i:sP');
                    $output .= '  <lastmod>' . $lastmod . '</lastmod>';
                    $output .= '  <priority>1.0</priority>';
    
                    $image_url = $this->model_tool_image->resize(
                        $product['image'],
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'),
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')
                    );
    
                    $image_url = htmlspecialchars($image_url, ENT_XML1 | ENT_HTML5, 'UTF-8');
    
                    $output .= '  <image:image>';
                    $output .= '    <image:loc>' . $image_url . '</image:loc>';
                    $output .= '    <image:caption>' . htmlspecialchars(str_replace('&', 'and', $product['name']), ENT_XML1 | ENT_HTML5, 'UTF-8') . '</image:caption>';
                    $output .= '    <image:title>' . htmlspecialchars(str_replace('&', 'and', $product['name']), ENT_XML1 | ENT_HTML5, 'UTF-8') . '</image:title>';
                    $output .= '  </image:image>';
                    $output .= '</url>';
                }
            }
            $output .= '</urlset>';
    
            return $output;
        }
    
        protected function getManufactureresSiteMaps() {
            $output = '<?xml version="1.0" encoding="UTF-8"?>';
            $output .= '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
    
            $this->load->model('catalog/category');
    
            $output .= $this->getCategories(0);
    
            $this->load->model('catalog/manufacturer');
    
            $manufacturers = $this->model_catalog_manufacturer->getManufacturers();
    
            foreach ($manufacturers as $manufacturer) {
                $output .= '<url>';
                $output .= '  <loc>' . htmlspecialchars($this->url->link('product/manufacturer/info', 'manufacturer_id=' . $manufacturer['manufacturer_id']), ENT_XML1) . '</loc>';
                $output .= '  <changefreq>daily</changefreq>';
                $output .= '  <priority>0.7</priority>';
                $output .= '</url>';
            }
    
            $this->load->model('catalog/information');
    
            $informations = $this->model_catalog_information->getInformations();
    
            foreach ($informations as $information) {
                $output .= '<url>';
                $output .= '  <loc>' . htmlspecialchars($this->url->link('information/information', 'information_id=' . $information['information_id']), ENT_XML1) . '</loc>';
                $output .= '  <changefreq>daily</changefreq>';
                $output .= '  <priority>0.5</priority>';
                $output .= '</url>';
            }
            $output .= '</urlset>';
            return $output;
        }
    }
    
    
    Если нужно что бы товаров выводилось в каждом сайтмапе не по 250 а больше, то находите строку
    $sitemap_limit = 250;
    и меняете на нужное значение.
     
    Последнее редактирование: 16 авг 2024
    Ravilr и Tesloz нравится это.