Статьи и новости

Статьи и новости о веб-разработке

Вывод текстовых значений TV из чанков

Вывод текстовых значений TV из чанков

В Modx Evolution часто бывает довольно много прикрепленных TV параметров, значения которых хранятся в чанках.

Выводить эти значения на сайт приходится не менее часто и в самом разном виде: ссылками, списками, селектами и т.д.

Но чаще всего в виде простого текстового значения, для чего мы и написали простенький сниппет, в котором достаточно указать только имя чанка и значения TV.

Сниппет выводит как одиночные значения, так и множественные (Delimited List) разделяя их запятой.

Пример вызова:
    
    [[GetTextValues? &tv_val=`[*name-of-tv*]` &chunk=`name-of-chunk`]]
    
Код сниппета:
  
      <?php
      /*******************************************************************************
      *  Сниппет для получения и вывода текстовых значений из чанков для TV параметров
      ********************************************************************************/
      $tv_val = (isset($tv_val)) ? trim($tv_val) : null;
      $tv_delim = (isset($tv_delim)) ? trim($tv_delim) : ','; // разделитель в Delimited List
      
      $chunk = (isset($chunk)) ? trim($chunk) : '';
      $text = (isset($text)) ? $text : 'Не указан чанк';
      
      $items_all = array();
      $items = array();
      $tv_val_arr = array();
          
        if (!is_null($tv_val) && !empty($chunk)) {
           
          if(substr_count($tv_val,$tv_delim)){ 
             $tv_val_arr = explode($tv_delim, $tv_val);
          } else {
             $tv_val_arr[] = $tv_val;
          }
          $items_list = explode('||', trim($modx->getChunk($chunk)));
          
          // удаляем возможные пустые значения
          $tv_val_arr=array_diff($tv_val_arr, array(0, null));
          $items_list = array_diff($items_list, array(0, null));
          
          $items_count=count($items_list);
              for($i=0;$i<$items_count;$i++) {
                list($itemvalue,$item)=explode('==',$items_list[$i]);
                $items[$item]=$itemvalue;
              }
         
          foreach($tv_val_arr as $k => $v) {
              $items_all[]= $items[$v];
          }
          // здесь можно изменить формат вывода
          return implode(', ',$items_all);
         
        } else {
            
         return $text;
         
        }