loading

Редиректим отключенные товары в их родительские категории в PrestaShop

Автоматический Redirect в родительскую категорию при отключении товара в админке PrestaShop 1.6

Редиректим отключенные товары в их родительские категории в PrestaShop - 0

Привет! Возникла необходимость автоматически редиректить отключенные товары в их родительские категории, чтобы минимизировать растущее число ошибок 404, которые возникают, когда товар отключается на витрине.

Так как товаров огромное количество и вручную выставлять им редиректы не представляется возможным, а покупать и устанавливать какой-либо очередной SEO-модуль с кучей ненужного функционала нет особого желания, решил поискать более простые решения данного вопроса. В глубинках известного форума нашёл то, что искал.

Выкладываю у себя, чтобы инфа была под рукой и тот, кто ищёт подобное решение нашёл его сразу и не тратил своё время на его поиски. В конце записи будет ссылка на первоисточник. Приступим.

Создаём файл «ProductController.php» в /override/controllers/front/

Создаём файл «ProductController.php» в /override/controllers/front/ со следующим содержимым:

<?php
if (!defined('_CAN_LOAD_FILES_'))
    exit;
class ProductController extends ProductControllerCore
{
    /*
     * Redirect 301 на родительскую категорию для отключенных товаров
     * у которых не выставлена принудительная переадресация в админке
     */
    public function init()
    {
        FrontController::init();

        if ($id_product = (int)Tools::getValue('id_product')) {
            $this->product = new Product($id_product, true, $this->context->language->id, $this->context->shop->id);
        }

        if (Validate::isLoadedObject($this->product)) {
            $this->canonicalRedirection();

            if (!$this->product->isAssociatedToShop() || !$this->product->active) {
                if (Tools::getValue('adtoken') != Tools::getAdminToken('AdminProducts'.(int)Tab::getIdFromClassName('AdminProducts').(int)Tools::getValue('id_employee')) && $this->product->isAssociatedToShop()) {
                    $this->context->smarty->assign('adminActionDisplay', false);
                    if (!$this->product->id_product_redirected && $this->product->id_category_default) {
                        header('HTTP/1.1 301 Moved Permanently');
                        header('Location: '.$this->context->link->getCategoryLink($this->product->id_category_default));
                        exit;
                    }
                }
            }
        }

        parent::init();
    }
}

Можно заменить заголовок «HTTP/1.1 301 Moved Permanently» на «HTTP/1.1 302 Moved Temporarily», если нет уверенности в том, что товар отключен навсегда.

Сохраняем и закрываем файл «ProductController.php». Далее идём в админку и чистим кэш.

Редиректим отключенные товары в их родительские категории в PrestaShop - 1

После очистки кэша, в файле /cache/class_index.php элемент массива «ProductController» должен иметь такой вид:

Редиректим отключенные товары в их родительские категории в PrestaShop - 2
Если ’path’ => ’override/controllers/front/ProductController.php’, то всё ок.

Проверяем как работает

Теперь проверяем как это работает, для этого идём в админку и находим отключенный товар с которого нет редиректа

Редиректим отключенные товары в их родительские категории в PrestaShop - 3

Копируем ссылку на товар, кликнув ПКМ по иконке с глазом

Редиректим отключенные товары в их родительские категории в PrestaShop - 4

Вставляем в адресную строку и удаляем всё, что находится после непосредственного URL-адреса товара:

Редиректим отключенные товары в их родительские категории в PrestaShop - 5
?adtoken=11ca1bexxxxxxxxxxxx7658d2bdxxxc8e&ad=adminxxxxxxxxx&id_employee=1

Если не удалить данную подстроку, то попадём в карточку товара как админ.

Переходим по ссылке и наблюдаем редирект в родительскую категорию отключенного товара.

Вывод

Вывод? С точки зрения SEO, рекомендую использовать вариант с заголовком «HTTP/1.1 302 Moved Temporarily», если нет пущей уверенности в том, что товары отключены навсегда и только в том случае, если количество товаров в каталоге превышает несколько тысяч и состоянием, наличием товаров управляет какая-либо синхронизация. В противном случае старайтесь следить «за чистотой» вручную.

Проверено на PrestaShop 1.6.1.1 и PrestaShop 1.6.1.20

Подсмотрено тут.

Плюсануть
Поделиться
Отправить
Запинить
Понравился этот пост? Поделись им в соцсети!
Популярное
Ваш комментарий
* Разрешены домены: iCloud, Gmail, Yahoo, Rambler, Ukr.Net, Hotmail, Mail.Ru и Yandex
** Ваш E-mail адрес не будет опубликован
HTML-код не интерпретируется

Ctrl + Enter