[Помогите] мультиязычность Opencart - правильная установка?

Тема в разделе "OpenCart", создана пользователем mr.Elias, 25 июн 2013.

  1. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    Не выдержал я и установил. ) Пропали производители совсем и Гугл ругается:

    Просмотреть как Googlebot
    Вот как поисковый робот Googlebot просканировал вашу страницу.
    ...
    Тип робота Googlebot:
    Веб
    Время загрузки (в миллисекундах):291
    На странице обнаружена переадресация на саму себя. Это может привести к бесконечному циклу переадресации. Прочитайте статью Справочного центра о переадресации.

    В чём может быть проблема?
     
  2. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    Добрый день!
    Как можно решить проблему Мета-тег Description главной страници для мультиязычного сайта? А то ведь нет в админке языковых вкладок на заполнение контактов и Мета-тег Description.
     
  3. nikfakel

    nikfakel

    Регистрация:
    24 июл 2013
    Сообщения:
    150
    Симпатии:
    33
    Вам толко для главной надо решение?
     
  4. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    Да, ведь на остальных страничках есть возможность через админку прописать отдельные теги описания.
     
  5. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    nikfakel, Вы зачем спрашивали? Есть хоть какие-то идеи или мысли?
     
  6. nikfakel

    nikfakel

    Регистрация:
    24 июл 2013
    Сообщения:
    150
    Симпатии:
    33
    можно через php запрос выдавать разный $description.

    <?php switch ($_SERVER['HTTP_HOST']) {
    case 'en.site.ru': $description = 'English description'; break;
    case 'ru.site.ru': $description = 'Описание на русском'; break;
    case 'fr.site.ru': $description = 'По-французски мне слабо'; break;
    endswitch;}
    ?>

    Вставляется в header.tpl в самом начале. Это если у вас поддомены для разных языков. Если подпапки (site.ru/en/, site.ru/ru, site.ru/fr/), то

    <?php switch ($_SERVER['REQUEST_URI']) {
    case '/en/': $description = 'English description'; break;
    case '/ru/': $description = 'Описание на русском'; break;
    case '/fr/': $description = 'По-французски мне слабо'; break;
    endswitch;}
    ?>

    Вроде бы так, я PHP знаю очень поверхностно, так что вопрос к PHP-программистам, все ли правильно. В любом случае можете вставить-проверить, если заработает - здорово, но не забудьте проверить дескрипшн не только на главных страницах.
    --- Добавлено, 25 апр 2014 ---
    Выше кто-то говорил про разные домены для разных городов. Решается модулем GeoIP, http://opencartforum.com/files/file/888-определение-города-по-ip-geo-ip-для-россии-и-украины/, есть как раз вывод информации в зависимости от города и есть редирект на нужный адрес в зависимости от города.
     
    Последнее редактирование: 25 апр 2014
  7. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    Спасибо за попытку, но пока у меня не вышло.
    Может быть не нужно было старый код вырезать полностью?
    Я вырезал:

    <?php if ($description) { ?>
    <meta name="description" content="<?php echo $description; if (isset($_GET['page'])) { echo " - ". ((int) $_GET['page'])." ".$text_page;} ?>" />
    <?php } ?>
    <?php

    Если его не убрать, то, по логике, снова дефолтный дескрипшн пойдёт на все страницы.
    У меня просто сайт не открылся с таким изменением.
     
  8. nikfakel

    nikfakel

    Регистрация:
    24 июл 2013
    Сообщения:
    150
    Симпатии:
    33
    Не, врезать не нужно, код выше устанавливает эту переменную, а то, что вы вырезали, - выводит. Возможно я в коде где-то ошибся. Попробуйте вот это:

    Код:
    <?php switch ($_SERVER['HTTP_HOST']) {
    case 'en.site.ru': $description = 'English description'; break;
    case 'ru.site.ru': $description = 'Описание на русском'; break;
    case 'fr.site.ru': $description = 'По-французски мне слабо'; break;
    }
    ?>
    И напишите, как у вас реализована мультиязычность - через поддомен или папку.
     
    Дмитрич нравится это.
  9. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    Вот так получилось:

    <?php switch ($_SERVER['REQUEST_URI']) {
    case '/ua/': $description = 'Україна'; break;
    case '/ru/': $description = 'Описание на русском'; break;
    endswitch;}
    ?>
    <?php if ($description) { ?>
    <meta name="description" content="<?php echo $description; if (isset($_GET['page'])) { echo " - ". ((int) $_GET['page'])." ".$text_page;} ?>" />
    <?php } ?>
    <?php

    Сайт не загрузился.
    А не может мешать текст из админки, который берётся как дефолтный для Мета-тега дескрипшн? Может конфликт, ведь описание выводилось и так, просто одинаковое для всех.
     
    Последнее редактирование: 25 апр 2014
  10. nikfakel

    nikfakel

    Регистрация:
    24 июл 2013
    Сообщения:
    150
    Симпатии:
    33
    нет, как бы там не определялась переменная, вы ее переназначаете этим скриптом. Уберите в конце скрипта endswitch; - мб в этом дело
     
  11. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    Ни так, ни так сайт не загружается.
    Но за идею спасибо, попробую в этом направлении поспрашивать знакомых.
     
  12. nikfakel

    nikfakel

    Регистрация:
    24 июл 2013
    Сообщения:
    150
    Симпатии:
    33
    Любой PHP-программист поможет ) Я это набросал почитав самоучитель по ПХП, видимо, в чем-то ошибся.
     
  13. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    Проблема Мета-описания была решена так:
    <?php if ($description) { ?>
    <meta name="description" content="<?php echo $description; ?>" />
    <?php } else { ?>
    <meta name="description" content="<?php if($_SESSION['language']=='ru') {
    echo "Описание на русском"; } else { echo "Описание на украинском";} ?>" />
    <?php } ?>

    Теперь проблема с названием главной страницы. Оно выводится одно на обеих версиях главных страниц и из-за этого, видимо, главная на русском вылетела из поиска совсем.
    Как задать разные для двух версий главных страниц, адреса которых различны?
    Пробовал использовать метод как с описанием, но не получается почему-то. Возможно потому, что название в админке есть, его просто не уберёшь.
    Есть мысль через php решить и языковые файлы.
    В файл controller/common/home.php вписать
    $this->document->setTitle($this->language->get('title_site'));
    а в языковые поставить свои значения Титле. Но у меня тоже не получилось, выводит в код страницы <title>title_site</title>.
    Языковые файлы я создал catalog/language/russian/common/home.php
    В файле
    <?php
    $_['title_site'] = 'название сайта";
    Что не так делаю?
    Помогите, пожалуйста!
     
  14. nikfakel

    nikfakel

    Регистрация:
    24 июл 2013
    Сообщения:
    150
    Симпатии:
    33
    Я так подозреваю, что вы за месяц ПХП выучили ))) а для названия нельзя точно также сделать как для дескришна? или там другой контроллер или что-то еще?
     
    Дмитрич нравится это.
  15. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    )) К сожалению нет, не выучил. Другой работы полно, а сайтостроение осваиваю интуитивно, методом тыка и изучением примеров, с чужой помощью, конечно тоже. Мне нужен сайт, а не знания всех тегов и скриптов. )
    Способ с описанием работает потому, что я убрал из админки описание к главной страницы. А убрать название нельзя, где-то в контролерах нужно отключать контроль его наличия - извиняюсь за тавтологию. ) При этом название распространится не только на главные, но и на все страницы без названия. Если не будет выхода - буду копать в этом направлении, но мне кажется способ с языковыми файлами более правильным и элегантным, что-ли. Только вот не цепляет что-то мои языковые файлы. Или не там создал, или не то прописал.
     
  16. asusdemo

    asusdemo Веб-архитектор ocDesign.ru

    Регистрация:
    11 фев 2013
    Сообщения:
    135
    Симпатии:
    26
    Я так понимаю, это вы делали для главной страницы сайта, так как все остальные страницы и так поддерживают мультиязычность...
     
  17. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    Да, конечно. К сожалению, описание пошло и на другие страницы, где его не предусмотрено: карта сайта, контакты, акции, бренды... Пришлось всё закрыть в роботс - другого выхода не нашёл.
    Лучше бы, конечно, это тоже решить через файл home.php и языковые файлы, но я этого не умею.
     
    Последнее редактирование: 1 июн 2014
  18. chyvi

    chyvi

    Регистрация:
    1 июн 2014
    Сообщения:
    2
    Симпатии:
    1
    А вы какую версию opencart используете?
    Пробовал разные версии seo_pro. не одна не заработала, ссылки не поменялись
     
  19. Дмитрич

    Дмитрич

    Регистрация:
    10 апр 2014
    Сообщения:
    191
    Симпатии:
    23
    ocStore-1.5.5.1.2.
     
  20. chyvi

    chyvi

    Регистрация:
    1 июн 2014
    Сообщения:
    2
    Симпатии:
    1
    Версия 1.5.5.1.2
    --- Добавлено, 1 июн 2014 ---
    а какую сборку seo_pro. качали?
    --- Добавлено, 1 июн 2014 ---
    Первое что пришло в голову
    Заменить строчку
    $this->document->setTitle($this->language->get('title_site'));
    на
    if($_SERVER['REQUEST_URI'] == '/'){
    $this->document->setTitle('Рус тайтл');
    } else{
    $this->document->setTitle('English title');
    }
     
    Последнее редактирование: 1 июн 2014
    Дмитрич нравится это.