We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 16840
    • 35 Posts
    Здравствуйте, уважаемые участники форума!
    Третий день ищу в интернете решение по выводу заголовков у TV:
    есть значение у каждого документа (id) с именем "made", вывожу в списком несколько документов путём цикла и имени [+tv.made]
    Сам TV представляет из себя checkbox, где есть набор значений: россия==322||америка==221||европа==333||...
    В таблице, соответственно, отображаются цифры (например, 322). А как сделать так, чтобы появилось название (заголовок. Например, Россия)?
      • 43165
      • 13 Posts
      Quote from: lebaxa at Jul 09, 2013, 04:22 AM
      Здравствуйте, уважаемые участники форума!
      Третий день ищу в интернете решение по выводу заголовков у TV:
      есть значение у каждого документа (id) с именем "made", вывожу в списком несколько документов путём цикла и имени [+tv.made]
      Сам TV представляет из себя checkbox, где есть набор значений: россия==322||америка==221||европа==333||...
      В таблице, соответственно, отображаются цифры (например, 322). А как сделать так, чтобы появилось название (заголовок. Например, Россия)?

      россия==россия||америка==америка||европа==америка||
        • 16840
        • 35 Posts
        Quote from: serstovik at Jul 11, 2013, 03:53 AM
        Quote from: lebaxa at Jul 09, 2013, 04:22 AM
        Здравствуйте, уважаемые участники форума!
        Третий день ищу в интернете решение по выводу заголовков у TV:
        есть значение у каждого документа (id) с именем "made", вывожу в списком несколько документов путём цикла и имени [+tv.made]
        Сам TV представляет из себя checkbox, где есть набор значений: россия==322||америка==221||европа==333||...
        В таблице, соответственно, отображаются цифры (например, 322). А как сделать так, чтобы появилось название (заголовок. Например, Россия)?

        россия==россия||америка==америка||европа==америка||

        Спасибо за ответ, но так, к сожалению, не подходит. Как вариант, рассматривал перемену местами заголовка со значением, но тогда пользователь в админ панели не поймёт, где нужная страна.

        Видел сниппет на просторах интернета:
        <?php
        $valTv = explode('&',$options);
        $id = isset($valTv[1]) ? $valTv[1] : $modx->resource->get('id');
        $tv = $modx->getObject('modTemplateVar',array('name'=>$name));
        $rawValue = $tv->getValue($id);
        $obj=json_decode($rawValue);
        if($obj) return $obj->$valTv[0];
        return '';


        Используется как [[*названиеTV:getTvsPar=`название_параметра`]]
        Но, к сожалению, пока что не работает это...
          • 16840
          • 35 Posts
          Создал вот такой сниппет для решения моей задачи:
          <?php
          $connect = mysql_connect('localhost', 'username', 'password') or die("Could not connect: " . mysql_error());
          mysql_select_db('base', $connect) or die ('Can\'t use foo : ' . mysql_error());
          mysql_set_charset('utf8');
          
          //принимаем след. данные: $varid - id TV параметра, $value - значение TV параметра
          //на выходе получаем заголовок $title
          
          $result = mysql_query("SELECT elements FROM modx_site_tmplvars WHERE id=$varid");
          $array = @mysql_fetch_array($result);
          
          $array2 = explode('||', $array[0]);
          $keyresult = array_search($value,$array2);
          $title = explode('==',$array2[$keyresult]);
          return $title[0];
          ?>
          


          Использую в списке вот так: [[!NameSnippet? &varid=`5` value=`[[+tv.param]]`]]
          Работает

          p.s. Прошу продвинутых программистов MODX прокомментировать код на правильность. Думаю, что постоянно делать запрос к БД не очень правильно, но из-за нехватки знаний не знаю как решить иначе
            • 44697
            • 1 Posts
            /* Get the TV */
            $tv = $modx->getObject('modTemplateVar',array('name'=>'MyTV'));

            /* get the raw content of the TV */
            $rawValue = $tv->getValue($id);

            /* get the processed content of the TV */
            $processedValue = $tv->renderOutput($id);

            raw - означает чистый, то есть не отпроцессованый, то есть вернет россия=333, а не просто 333. А дальше уже хоть регуляркой его чисти.