Как вывести (TV Список множественный выбор) через кому?

Если TV Список (множественный выбор).
Как через php или как то по другому вывести список через кому.

Находил примеры в интернете, они выводят только цифры.
Сергій
02 августа 2021, 12:33
modx.pro
218
0
Поблагодарить автора Отправить деньги

Комментарии: 23

Павел Романов
02 августа 2021, 15:10
+1
У TV на вкладке «Параметры вывода» выберите «Разделитель» и поставьте в качестве него запятую.
После этого вывод [[*tvname]] в шаблоне страницы будет содержать разделитель.

Чтобы разделитель выводился через [[+tv.tvname]] в чанках, в вызовах pdoResources и т. д., добавляйте параметр &processTVs=`tvname`

В сниппетах для вывода через разделитель используйте
$tv = $resource->getTVValue('tvname');
    Сергій
    02 августа 2021, 17:44
    0
    Не совсем понял ваш совет.
    Пример есть страница компании. На этой странице выводится список городов. Как вывести весь список через кому.
    Можно пример кода.
      Павел Романов
      02 августа 2021, 17:57
      +1
      Если TV со списком городов принадлежит этой странице, то просто:
      [[*tvname]]
      В случае, если у данной TV тип вывода строит «Разделитель» и в качестве самого разделителя указана запятая, то выведутся значения через запятую.

      Если у Вас в качестве значений TV прописаны не названия городов, а ID соответствующих ресурсов, то делаете такой сниппет:

      <?php
      $arr = explode(',',$input);
      $out = array();
      foreach($arr as $id){
          if(!$res = $modx->getObject('modResource', $id)) continue;
          $out[] == $res->get('pagetitle');
      }
      return implode(', ', $out);

      Назовите его, к примеру, getCities и используйте как модификатор:
      [[*tvname:getCities]]
        Сергій
        03 августа 2021, 13:04
        0
        Вы кажись не поняли меня.

        Нужно в чанке вывести список городов которые были выбраны.

        <?php
        $page = $modx->getObject('modResource', 108);
        return $page->getTVValue('service-centers-city');

        Выводит только цифры, а мне нужно названия через кому.
          Андрей
          03 августа 2021, 13:22
          +1
          Возможно поможет — Output filter to get TV display name
            Сергій
            03 августа 2021, 13:26
            0
            Все одно не то.
            Выводит только если я указал 1 город. Если 2 и более не выводит.
              Андрей
              03 августа 2021, 13:36
              0
              Ну вообще странно конечно, я проверял именно для множественного списка, всё работало.
                Сергій
                03 августа 2021, 13:37
                0
                Как кому поставить?
                Список вывелся.
                  Андрей
                  03 августа 2021, 13:44
                  0
                  Переписать вывод на нужный:
                  echo '<p><a href="/'.$v.'">'.$n.'</a></p>';
                    Сергій
                    03 августа 2021, 13:46
                    0
                    Не то. Нужно чтобы было так:
                    Город 1, Город 2, Город 3
                      Андрей
                      03 августа 2021, 13:51
                      0
                      Так это я строку привёл которую изменить надо.
                      Сергій
                      03 августа 2021, 13:53
                      0
                      Мне нужно чтобы если 1 город то без, в конце. Если 2 и более города то между ними,
                      Не пойму как это сделать.
          Павел Романов
          03 августа 2021, 13:53
          +1
          Ну Вы бы сразу выложили эту картинку, Вас бы сразу и поняли))
          Цифры тут произвольные или нет? Если они соответствуют ID ресурсов (страниц в дереве), то используйте сниппет, который я привел выше.

          Если эти цифры произвольные и никак не связаны с ресурсами или иными сущностями, то пишете такой сниппет:
          <?php
          $tvid = 1; // Замените на ID Вашей TV
          $docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));
          
          if(!$tvo = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvid,'contentid' =>$docid))) return;
          if(!$tv = $modx->getObject('modTemplateVar', $tvid)) return; 
          
          $tvv = str_replace("\n", '', $tv->get('elements'));
          
          $vals = explode('||', $tvv);
          $cities = array();
          foreach($vals as $val){
          	$v = explode('==', $val);
          	$cities[ $v[1] ] = $v[0];
          }    
          
          
          $tvr = $tvo->get('value');
          $arr = explode('||', $tvr);
          $out = array();
          
          foreach($arr as $d){
          	$out[] = $cities[$d];
          }
          return implode(', ', $out);
          На странице ресурса можете использовать просто
          [[SnippetName]]
          В чанках нужно передавать ID
          [[SnippetName, &docid=`[[+id]]`]]
            Сергій
            03 августа 2021, 13:53
            0
            Цифры взял от фонаря.
              Павел Романов
              03 августа 2021, 13:54
              +1
              Ну тогда этот сниппет используйте.
                Сергій
                03 августа 2021, 13:57
                0
                А как можно подвязать чанк ( tpl) и вызвать там еще и ID?
                Чтобы можно было на разных страницах по разному выводить.
                  Павел Романов
                  03 августа 2021, 13:58
                  +1
                  ID чего?
                    Сергій
                    03 августа 2021, 13:58
                    0
                    Белая Церковь==2||
                    ID 2
                      Павел Романов
                      03 августа 2021, 14:04
                      +1
                      <?php
                      $tvid = 1; // Замените на ID Вашей TV
                      $docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));
                      
                      if(!$tvo = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvid,'contentid' =>$docid))) return;
                      if(!$tv = $modx->getObject('modTemplateVar', $tvid)) return; 
                      
                      $tvv = str_replace("\n", '', $tv->get('elements'));
                      
                      $vals = explode('||', $tvv);
                      $cities = array();
                      foreach($vals as $val){
                      	$v = explode('==', $val);
                      	$cities[ $v[1] ] = $v[0];
                      }    
                      
                      $tvr = $tvo->get('value');
                      $arr = explode('||', $tvr);
                      $out = array();
                      
                      foreach($arr as $d){
                      	$out[] = $modx->getChunk($tpl, array(
                                  'name' => $cities[$d],
                                  'id' => $d
                              ));
                      }
                      return implode(', ', $out);

                      Вызов:
                      [[Snippet?  &tpl=`chunk_name`]]
                      или
                      [[Snippet?  &docid=`[[+id]]` &tpl=`chunk_name`]]

                      В чанке chunk_name доступны плейсхолдеры [[+name]] и [[+id]].
                      Сергій
                      03 августа 2021, 14:33
                      0
                      Еще раз большое спасибо.
                      Сергій
                      22 октября 2021, 14:24
                      0
                      Привет еще раз. Можешь подсказать как сделать так чтобы выводило только 1 значение. modx.pro/help/22379 хочу настроить сортировку. Нужно чтобы просто вернуло одно значение.
                      <?php
                      $output = $input;
                      $value = $input;
                      if (isset($options)){
                        $tvname = $options;
                        $query = $modx->newQuery('manufacturer',array('name'=>$tvname));
                        $query->select('elements');
                        $query->prepare();
                        if ($query->prepare() && $query->stmt->execute()) {
                          $row = $query->stmt->fetch(PDO::FETCH_ASSOC);
                        }
                        $elements = explode('||',$row['elements']);
                        foreach($elements as $key => $el){
                          $el = explode('==',$el);
                          if(count($el)>1){
                            if($el[1] == $value){
                              $output = $el[0];
                            }
                          }
                        }
                      }
                      return $output;
                      Просто возвращает айди. А нужно название. Спасибо.
                    Сергій
                    03 августа 2021, 14:04
                    0
                    Нужно чтобы в чанке выводились ID. В зависимости от ID и языка будут разные названия городов.
              Сергій
              03 августа 2021, 13:55
              0
              Вот, вот это то что я искал. Спасибо вам большое!!!
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      23