We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 24682
    • 7 Posts
    Есть TV допустим [+kaka+]
    тип DropDown List menu
    с подобными значениями:
    Вася==1||Петя==2||Коля==3||Оля==4 и т.д.
    при попытке в чанке вывести стандартное [+kaka+] получаем тупо номер, т.е. то что после "==", как получить то, что до "=="?
      • 24682
      • 7 Posts
      ну раз никто не знает нормального способа, то вот вам мой кривой код
      сниппет tvvaluer
      <?php
      $sql= "SELECT elements ";
      $sql .= "FROM " . $modx->getFullTableName('site_tmplvars');
      $sql .= "WHERE  name='" . $yourtvname . "' LIMIT 1";
      $rs= $modx->dbQuery($sql);
      $id_up = mysql_fetch_row($rs);
      
      $res=$id_up[0];
      
      $res1=array();
      $output="";
      $res1=explode('||',$res);
      $i=0;
      while ( each ($res1) )
      {
      list($key, $value) = explode('==',$res1[$i]);
      if($value==$znach) {$output = $key; return $output;}
      $i++;
      }
      ?>
      


      вызов:
      [[tvvaluer? &yourtvname=`имяTV` &znach=`[+имяTV_или_значение_после_==+]`]]
      


      после небольшой модификации на проверку входящих значений весьма подходит для поиска по множественным TV через get запросы
        • 22301
        • 1,084 Posts
        содержимое Твари (Вася==1||Петя==2||Коля==3||Оля==4) как-то генерится или ручками вставляется?
        я просто не понял, что мешает сделать вот так: 1==Вася||... или вообще Вася==Вася||...?
          [img]http://jurist-info.ru/pic/rrr.jpg[/img]

          Безжалостный пияр!
          Artima -- неуч!
          Осторожно: преступная локализация -- modx-cms.ru
          Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

          Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
          • 24682
          • 7 Posts
          Quote from: openagate at Oct 16, 2010, 01:37 AM

          содержимое Твари (Вася==1||Петя==2||Коля==3||Оля==4) как-то генерится или ручками вставляется?
          я просто не понял, что мешает сделать вот так: 1==Вася||... или вообще Вася==Вася||...?
          и генерится, и парсится, и ручками вставляется.
          Смысл в том, что методом get передавать русские символы, пробелы, кавычки и т.д. - некамильфо по нескольким причинам.
          Лучше передавать цифры, дабы легче можно было их обработать на наличие инъекций и вообще не захламлять урлы урлкодированными данными, которые потом система разбирает ресурсозатратнее, чем просто www.site.ru/paga1.html?user=1
          В случае Вася==1 в базе хранится значение 1, выводится в списке при заполнении "Вася", дык вот и был цимус, чтобы передать короткое значение, а вывести человеческое.
            • 29487
            • 385 Posts
            Я делаю так:
            1. Создаю чанк "people" со значениями Вася==1||Петя==2||Коля==3||Оля==4
            2. Создаю tv people, в поле "возможные значения" пишу @CHUNK people
            3. Создаю сниппет phx:tvchunk
            <?php
            $items = explode("||", $modx->getChunk($options));
            $names = array();
            foreach ($items as $item) {
            	list($k,$v) = explode("==",$item);
            	$names[$v]=$k;
            }
            $values = explode(',', $output);
            if (count($values)==1) return $names[$output];
            $outputs = array();
            foreach ($values as $v) $outputs[] = $names[$v];
            return implode(', ',$outputs);
            ?>
            

            Сниппет может возвращать несколько значений, если используется multiselect и визуальный компонент delimited list с запятой.
            Тепеь можно его использовать в Ditto [+people:tvchunk=`people`+]
            Или в шаблоне: [*people:tvchunk=`people`*]

            В чём плюс: нет запросов к базе, чанки хранятся в кэше.
              • 22301
              • 1,084 Posts
              Ромео, понял, спасибо. по темноте своей над такими вещами не задумывался.
              хотя, как и Temus, всё содержимое ТВарей стараюсь всегда вынести в чанки.
                [img]http://jurist-info.ru/pic/rrr.jpg[/img]

                Безжалостный пияр!
                Artima -- неуч!
                Осторожно: преступная локализация -- modx-cms.ru
                Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

                Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
                • 934
                • 1 Posts
                попробовал делать. у меня почему-то переменная в сниппете $output пустая. что это за переменная и откуда она берется? пользуюсь Evo 1.0.5
                  • 29487
                  • 385 Posts
                    • 35901
                    • 3 Posts
                    <?php
                    $tv_tmp = $modx->getTemplateVar("style");
                    
                    $tmp1 = array();
                    $tv_tmp['elements'] = str_replace(" ", "", $tv_tmp['elements']);
                    $tmp1 = explode("||", $tv_tmp['elements']);
                    
                    $el = array();
                    foreach ($tmp1 as $key) {
                    $tmp2 = explode("==", $key);
                    if ($tmp2['1'] == $tv_tmp['value']) $option = $tmp2['0'];
                    }
                    return $option;
                    ?>


                    Использование [*style:tv_option*]
                    Мой вариант...
                    У меня для конкретного случая, более функционально делать не буду. Не надо мне это.
                      • 897
                      • 1,620 Posts
                      а документацию посмотреть?
                      http://wiki.modxcms.com/index.php/API:getTemplateVarOutput
                        "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

                        Не используйте Revo для "просто сайтов". Используйте Evo

                        Who can defeat the Russian bear?