Вывод нескольких tv одним шаблоном



  • Доброго времени суток, форумчане!

    Помогите пожалуйста, вопрос такой: Допустим, есть несколько tv (tv1,tv2,tv3) у одного шаблона.

    Можно ли на странице шаблона вывести их одинаковым образом?

    Например:

    <td>[[Название TV]]</td>
    <td>[[Значение TV]]</td>
    

    Понимаю, что это не было бы проблемой если этих tv с параметрами немного, но когда их 50 то в шаблоне прописывать 50 раз, вот такое не вариант мне кажется

    [[*tv1:notempty=`<td>Высота</td><td>[[*tv1]]</td>]]
    

    Спасибо заранее за ответы!



  • @JaGGer Напишите снипет, который будет вытягивать нужные ТВ и выписывать в нужном вам виде в шаблон.

    Но для снипета будет оптимально, если у вас названия именно tv1, tv2 ну или id поочереди.



  • @slaad К сожалению, на данный момент у меня не хватает знаний для этого(



  • @JaGGer
    Тогда лучше все 50 вручную прописать, потом переделаете.

    Пример того, как можно тащить твшки лего в принципе найти:

    $resid_int = 1; // айдишник ресурса
    $tvs = array(); // массив с тв параметрами
    
        //tv
        $tv_query = $modx->newQuery('modTemplateVarResource');
        $tv_query->leftJoin('modTemplateVar','modTemplateVar',array("modTemplateVar.id = tmplvarid"));
        $tv_query->where(array('contentid'=>$resid_int));
        $tv_query->select($modx->getSelectColumns('modTemplateVarResource','modTemplateVarResource','',array('id','tmplvarid','contentid','value')));
        $tv_query->select($modx->getSelectColumns('modTemplateVar','modTemplateVar','',array('name')));
        $tvars = $modx->getCollection('modTemplateVarResource',$tv_query);
        foreach ($tvars as $tvar) {
            $tvar = $tvar->toArray();
            if (!empty($tvar['value']))
                $tvs[$tvar['name']] = $tvar['value'];
        }
    

    Но вы должны понимать, как дальше обработать то, что получили, чтобы у вас все заработало.



  • @slaad Увы, но не понимаю, но всё равно большое спасибо!


  • Администраторы

    Может вам использовать один TV с типом ввода "param-edit" и выводить с помощью сниппета "param_edit_table"?

    0_1486314747227_screenshot_048.png



  • @Andchir Блестящая идея! Но вы мне не подскажите, как с помощью Catalogfill в param-edit засунуть значения?


  • Администраторы

    @JaGGer Это нужно фильтр написать. Покажите свой файл.



  • @Andchir Для загрузки файла у меня нет прав, вот ссылка на Google Drive Файл



  • @Andchir Вот фотография, если с таблицей проблемы: 0_1486477930231_2017-02-07.png


  • Администраторы

    @JaGGer

    Вот пример функции для склейки всех столбцов в одном TV:

    //функция для фильтрации значений при ИМПОРТЕ
    function filter_import($value_arr){
        $output_arr = $value_arr;
        
        $output_arr['tv'][10] = '';
    
        //Собираем данные в один TV и удаляем лишние
        if( isset( $output_arr['tv'][1] ) ){
            $output_arr['tv'][10] .= '||Ширина==' . trim($output_arr['tv'][1]);
            unset($output_arr['tv'][1]);
        }
        //Далее повторяем операцию для всех TV, которые нужно склеить в одном
        //Тут будет код
        
        //Убираем лишний разделитель
        $output_arr['tv'][10] = trim($output_arr['tv'][10], '||');
        
        return $output_arr;
    }
    

    В данном примере "10" - это ID TV, у которого тип ввода "param-edit". Остальным TV можно прописать любые ID, они импортироваться не будут, т.к. в коде вырезаются (unset). По примеру нужно склеить все значения.



Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.