Как удалить «/ru» из URL-адресов в PrestaShop

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

В этой статье рассказывается, как удалить код языка из URL-адресов (обычно «/ru»)

Работает для PrestaShop 1.5 / 1.6

Для этого вам необходимо использовать переопределения (overrides).

  1. Создайте (или отредактируйте, если уже существует) файл /override/classes/Link.php
    Вставьте в него следующий код (или объедините с существующим кодом):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php

    class Link extends LinkCore
    {
        protected function getLangLink($id_lang = null, Context $context = null, $id_shop = null)
        {
            $parent_result = parent::getLangLink($id_lang, $context, $id_shop);

            if ($parent_result) {
                if ($id_lang == Configuration::get('PS_LANG_DEFAULT')) {
                    return '';
                } else {
                    return $parent_result;
                }
            }
        }
    }
  2. Создайте (или отредактируйте, если уже существует) файл /override/classes/Tools.php
    Вставьте в него следующий код (или объедините с существующим кодом):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php

    class Tools extends ToolsCore
    {
        public static function setCookieLanguage($cookie = null)
        {
            parent::setCookieLanguage($cookie);

            if (!$cookie) {
                $cookie = Context::getContext()->cookie;
            }

            if(!Tools::getValue('isolang') && !Tools::getValue('id_lang') && !Tools::isSubmit('id_category_layered')) {
                $cookie->id_lang = Configuration::get('PS_LANG_DEFAULT');
                Context::getContext()->language = new Language($cookie->id_lang);
            }

            /* If language file not present, you must use default language file */
            if (!$cookie->id_lang || !Validate::isUnsignedId($cookie->id_lang)) {
                $cookie->id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
                Context::getContext()->language = new Language($cookie->id_lang);
            }

            $iso = Language::getIsoById((int)$cookie->id_lang);
            @include_once(_PS_THEME_DIR_.'lang/'.$iso.'.php');

            return $iso;
        }
    }

    Обратите внимание, что на строке #13 мы используем выражение Tools::isSubmit(‘id_category_layered’). Это поможет модулю Blocklayered (блок фильтров) правильно определять язык.

  3. Теперь очистите кэш (как очистить кэш).

Готово! Откройте свой сайт и проверьте результат.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *