Вопрос 1.7.8.8 Убрать префикс дефолтного языка

Riva

Папочка
Регистрация
2 Мар 2013
Сообщения
560
Реакции
661
После обновления до 1.7.8.8 перестал работать fix убирающий префикс дефолтного языка. Работает везде кроме стандартного оформления заказа. С одностаничниками норм. v2.1.1-fsadvancedurl и ecm_rpd 0.0.1 точно так же ведёт себя. Как побороть?

/override/classes/Link.php

Код:
<?php

class Link extends LinkCore
{
    protected function getLangLink($idLang = null, Context $context = null, $idShop = null)
    {
        static $psRewritingSettings = null;
        if ($psRewritingSettings === null) {
            $psRewritingSettings = (int) Configuration::get('PS_REWRITING_SETTINGS', null, null, $idShop);
        }

        if (!$context) {
            $context = Context::getContext();
        }

        if ((!$this->allow && in_array($idShop, [$context->shop->id,  null])) || !Language::isMultiLanguageActivated($idShop) || !$psRewritingSettings) {
            return '';
        }

        if (!$idLang) {
            $idLang = $context->language->id;
        }
//      return Language::getIsoById($idLang) . '/';

        if (Configuration::get('PS_LANG_DEFAULT') == $idLang) {
            return '';
        }
        else {
            return Language::getIsoById($idLang) . '/';
        }
    }
}

/override/classes/Tools.php

Код:
<?php

class Tools extends ToolsCore
{
    public static function switchLanguage(Context $context = null)
    {
        if (null === $context) {
            $context = Context::getContext();
        }

        // On PrestaShop installations Dispatcher::__construct() gets called (and so Tools::switchLanguage())
        // Stop in this case by checking the cookie
        if (!isset($context->cookie)) {
            return;
        }

//      if (
//          ($iso = Tools::getValue('isolang')) &&
//          Validate::isLanguageIsoCode($iso) &&
//          ($id_lang = (int) Language::getIdByIso($iso))
//      ) {
//          $_GET['id_lang'] = $id_lang;
//      }

        if (
            ($iso = Tools::getValue('isolang')) &&
            Validate::isLanguageIsoCode($iso) &&
            ($id_lang = (int) Language::getIdByIso($iso))
        ) {
            $_GET['id_lang'] = $id_lang;
        }
        else {
            $_GET['id_lang'] = (int) Configuration::get('PS_LANG_DEFAULT');
        }

        // Only switch if new ID is different from old ID
        $newLanguageId = (int) Tools::getValue('id_lang');

        if (
            Validate::isUnsignedId($newLanguageId) &&
            $newLanguageId !== 0 &&
            $context->cookie->id_lang !== $newLanguageId
        ) {
            $context->cookie->id_lang = $newLanguageId;
            $language = new Language($newLanguageId);
            if (Validate::isLoadedObject($language) && $language->active && $language->isAssociatedToShop()) {
                $context->language = $language;
            }
        }
        Tools::setCookieLanguage($context->cookie);
    }
}
 
Последнее редактирование:
Модуль SeoPro - All-In-One SEO c этим справляется
Функция из Override Link.php

PHP:
protected function getLangLink($id_lang = null, Context $context = null, $id_shop = null)
    {
        if (!Module::isEnabled('arseopro')) {
            return parent::getLangLink($id_lang, $context, $id_shop);
        }
        if (Configuration::get('ARS_REMOVE_DEF_LANG', null, null, $id_shop) &&
            Language::isMultiLanguageActivated()) {
            if (!$id_lang) {
                $id_lang = $context->language->id;
            }
            if ($id_lang == Configuration::get('PS_LANG_DEFAULT', null, null, $id_shop)) {
                return '';
            }
        }
        return parent::getLangLink($id_lang, $context, $id_shop);
    }
 
Назад
Сверху