We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 23506
    • 156 Posts
    Quote from: Igor at Feb 14, 2008, 07:19 AM

    Quote from: koshaque at Feb 14, 2008, 07:15 AM

    Пишете под typo3? laugh
    Под Drupal smiley
    А если серьезно, просто делаем копии дерева в админпанеле. Неудобно, да, но гораздо неудобнее под это дело создавать TV.
    Я тоже делаю копию дерева и от TV отказался - обрабатываю алиасы.
      • 6953
      • 94 Posts
      Quote from: vbatushev at Jan 17, 2007, 06:18 AM

      Мультиязычный сайт без создания папок для разных языков

      Встала тут передо мной задача, господа, сделать двуязычный сайт – с русским и английским языком. При первом приближении к проблеме предлагаемые решения мне не понравились. Ну, право, что это за решение – сделать отдельные папки для разноязычных документов? Соответственно и шаблоны по другом и ваще – скачи туда-сюда. Негодица.
      Однако! Набрел я на обсуждение этой проблемы вот здесь http://modxcms.com/forums/index.php/topic,1957.45.html Особенно заинтерсовался сообщением и сниппетом Djamoer’а (пост №57). И вот на его основе сделал себе решение.
      Значит, так, нужно нам:

      1. Сделать плагин (все права на него – Djamoer’а):
      <?php
      //
      // [Plugin] LanguageVar
      //
      if(isset($_GET['lang']) && trim($_GET['lang']) != '') $_SESSION['lang'] = strtolower($_GET['lang']);
      ?>

      Поставить ему системное событие на OnWebPagePrerender.

      2. Создать сниппет:
      <?php
      //
      // [Snippet] LangVar
      //
      // Usage: [!LangVar? &var=`content`&type=`snp||var`!]
      //
      $default_lang = 'ru';
      
      if(!isset($type) || trim($type) == '') $type = 'var';
      
      $type = strtolower($type);
      
      if ($type == 'var') {
            if(!isset($var) || trim($var) == '') $var = 'content';
      }
      
      $lang = '';
      if(isset($lang) && trim($lang) != '') $lang = '_'.$lang;
      else if(isset($_GET['lang']) && trim($_GET['lang']) != '') $lang = '_'.strtolower($_GET['lang']);
      else if(isset($_SESSION['lang']) && trim($_SESSION['lang']) != '') $lang = '_'.strtolower($_SESSION['lang']);
      else if(isset($_COOKIE['lang']) && trim($_COOKIE['lang']) != '') $lang = '_'.strtolower($_COOKIE['lang']);
      
      if ($type == 'var') {
            if($lang == '_'.$default_lang || !isset($modx->documentObject[$var.$lang]) || trim($modx->documentObject[$var.$lang][1]) == '') $lang = '';
            if(isset($edit) && $edit = true) return '[*#'.$var.$lang.'*]';
            else return '[*'.$var.$lang.'*]';
      } else {
            if ($lang == '') $lang = '_'.$default_lang;
            return '{{'.$var.$lang.'}}';
      }
      ?>
      

      Параметров всего два. Первый название сниппета (без фигурных скобок) или переменной документа (content там или еще какой pagetitle). Второй – тип, эээ, ну не знаю, чего это тип, но значений только два – snp (сниппет) и var (переменная документа).
      3. Создаем еще один сниппет:
      <?php
      // SetLangCookie snippet for ModX
      // set cookie with language ID
      // 08-28-2005
      // [email protected]
      if(isset($_GET['lang']) && trim($_GET['lang']) != '') {
            $lang=strtolower($_GET['lang']);
            setcookie("lang",$lang,time()+604800);
      }
      ?>

      Его надо будет вызывать в шаблоне тупо [!SetLangCookie!]. Не кэшируем!
      4. Создаем TV. TV мы создаем какие хотим, только главное, чтобы они назывались соответственно. Например, "дублер" поля content должен зваться content_en (или content_fr, или что там вы будете передавать в качестве переключателя в поле &lang, но об этом ниже).
      5. Создаем сниппеты. Тут все сниппеты называем по схеме: НазваниеСниппета_ИдентификаторЯзыка. Например, TopMenu_ru, TopMenu_en и т. д.
      6. Делаем себе красивые иконки с флагами (или тырим их, где плохо/хорошо положено). Ссылочки на них оформлеяем как "index.php?id=[*id*]&lang=en" или там "index.php?id=[*id*]&lang=ru"

      Ну, собственно, вроде и все smiley

      Да. С переключением заголовков в меню, конечно, пурхалово. Потому как не понятно мне, как заставить WayFinder брать в качестве заголовков значения TV. Вышел из положения тем, что в русском он показывает pagetitle, в английском – menutitle. Это, конечно, не супер, но все же.
      Как получилось – http://www.ibrainsoft.com

      По поводу 5-ого пункта - сниппеты создаются на основе приведенного сниппета LangVar?
      а в TV будет уже загоняться текст аглицкий или наш?

      P.S.простите за тупление. Просто для проекта заказчика взял MODx. Все очевидное сделал, а под ночь мой мозг крючить начало))) laugh
        L.O.V.E is just a four letter word
        • 1978
        • 131 Posts
        Ошибка.

        в предпоследней строке вместо return ’{{’.$var.$lang.’}}’; должно быть return ’[[’.$var.$lang.’]]’;
          Как русифировать Modx 0.9.6.1(QuickEdit, TinyMCE)
          QuickEdit под win-1251 без mb_-функций