К содержанию

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

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

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

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

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

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

В сниппетах для вывода через разделитель используйте
$tv = $resource->getTVValue('tvname');
    Сергій
    Сергій Старожил
    02 августа 2021, 17:44
    Не совсем понял ваш совет.
    Пример есть страница компании. На этой странице выводится список городов. Как вывести весь список через кому.
    Можно пример кода.
      Павел Романов
      Павел Романов Проверенный
      02 августа 2021, 17:57
      Если 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
        Вы кажись не поняли меня.

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

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

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