При создании интернет магазина, разработчики часто сталкиваются с проблемой мультиязычности сайта. Одним из важных аспектов при создании мультиязычного интернет магазина на Opencart является создание обработка SEO адресов для каждой из версии сайта.
Данная модификация позволяет добавить в URL код языка, на котором просматривается страница, а для языка по-умолчанию адрес остается тот же. Таким образом для поисковой системы у вас реализованы отдельные каталоги для каждого из языков.
Модуль MultiLanguage SEO URL работает исключительно с SEO_PRO, позволяя создать необходимую структуру для создания мультиязычного интернет магазина. Для наглядности вы можете ознакомиться с ниже расположенными несколькими скриншотами.
В архиве стандартная комплектация моих модулей: скриншоты, файлы README рус. и англ. версии, файлы для загрузки на сервер. При загрузке ни один файл не будет перезаписан.
Правила использования модуля стандартные, для моих бесплатных модулей: модуль абсолютно бесплатный, для использования, однако загружать на сторонние ресурсы запрещено – делитесь ссылкой на эту страницу, спасибо за понимание.
Спасибо за доверие, не забываем подписываться и ставить +1, ведь именно благодаря ВАШИМ “лайкам” я вижу что работа не напрасна, а комментарии дают вдохновение на сотворение новых модулей и модификацию имеющихся!
Также буду рад услышать ваши комментарии относительно данного и иных моих модулей, а также предложения по их улучшению, и идеи для написания новых модулей!
Скачать MultiLanguage SEO URL для Opencart: nikita_sp-multilanguage-seo-url
UPD: По многочисленный просьбам был проведен анализ модуля и обнаружен баг, вызывающий ошибку «Notice: Undefined index: in /home/…/vqmod/vqcache/vq2-catalog_controller_common_seo_pro.php on line 77«. Данное обновление исправляет ошибку. Спасибо пользователям, которые указали на ошибку и предоставили данные для доступа на сервера для определения и анализа ошибки. (Андрей, Fusses, Bassel)
Скачать MultiLanguage SEO URL 1.2 для Opencart на сайте автора: тыць
UPD2: Внимание: для того чтобы позволить поисковым роботам просматривать сайт на других языках по ссылке, необходимо открыть файл index.php (Opencart 1.5.x, 2.0.x) в корне вашего сайта, и найти строку (~162 line):
if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
UPD3: для версии Opencart 2.1.x необходимо найти строку:
if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages)) {
И перед условием вставить следующий код:
$language_from_url = explode("/", $request->server['REQUEST_URI']); foreach($language_from_url as $lang){ if(array_key_exists($lang, $languages)){ $language_from_url = $lang; break; } } // If nothing was found don't apply if(is_array($language_from_url)){ $language_from_url = false; }
Далее (шаг 2), для версии Opencart 1.5.x и 2.0.x необходимо найти строку (~167 line):
$code = $detect;
и после нее вставить код
}elseif ($language_from_url && array_key_exists($language_from_url, $languages) && $languages[$language_from_url]['status'] ){ $code = $language_from_url;
Для версии Opencart 2.1.x необходимо найти строку ()
$code = $detect ? $detect : $config->get('config_language');
И перед ней добавить:
if(!$detect && ($language_from_url && array_key_exists($language_from_url, $languages) && $languages[$language_from_url]['status'])){ $detect = $language_from_url; }
Таким образом при обращении к странице сайта через урл, в котором присутствует каталог языка, поисковая система будет видеть страницу на нужном языке. Обратите внимание, что данная конструкция служит для того чтобы отображать страницу на нужном языке для роботов поисковых машин, т.к. они не используют сессию и cookie.
По-умолчанию, язык выбирается исходя из нескольких параметров:
- выбранного языка на сайте (session или cookie)
- определенного через браузер (в каждом браузере есть информация о языке)
В противном случае применяется язык по-умолчанию, заданный в административной части.
Если вам необходимо, чтобы способ определения языка по URL был основным, то в таком случае на шаге 2 найдите первую строку условия:
Opencart 1.5.x, 2.0.x:
if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
Opencart 2.1.x:
if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages)) {
И перед ней добавьте:
if ($language_from_url && array_key_exists($language_from_url, $languages)){ $code = $language_from_url; }else
Должно получится что-то вроде:
if ($language_from_url && array_key_exists($language_from_url, $languages)){ $code = $language_from_url; }elseif (isset($session->data['language']) && array_key_exists($session->data['language'], $languages)) {
При такой конфигурации куки и сессия не будут влиять на выбор языка страницы — только URL, но я не думаю что это правильно с точки зрения разработки сайта.
Оригинал статьи здесь, спасибо автору.