We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 52114
    • 2 Posts
    Рад приветствовать всех на форуме!

    Возникли задачи по выводу TV, которую не получается полностью осилить:
    1. Вывести к ресурсу автоматически TV, занесенные в определенную группу
    2. Вывести список из выбранных в мультисписке значений TV для ресурса, причем в списке каждая запись - это Название==icon_name. Делается это с тем, чтобы можно было разным ресурсам, не забивая заново значений списка, просто выбирать и показывать нужные параметры из всех имеющихся. Собственно, выводиться должна иконка с подписью.

    1. Первая часть решается через сниппет:

    <?php
    $resid_int = $modx->getOption('resourceId', $scriptProperties, $modx->resource->get('id'));
    
    $listElementTpl = $modx->getParser()->getElement('modChunk', $tpl);
    if ($listElementTpl) {
            $listElementTpl->setCacheable(false);
    } else {
            $modx->log(modX::LOG_LEVEL_ERROR, 'getComplexCharacteristics: could not find chunk - ' . $listElementTplName);
            return;
    }
    
    if (isset($resid_int )){
    $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'])) $tvNameOrId = $tvar['name'];
            
            if (is_numeric($tvNameOrId)) {
                $tvObj = $modx->getObject('modTemplateVar',$tvNameOrId);
            } else {
                $tvObj = $modx->getObject('modTemplateVar',array('name' => $tvNameOrId));
            }
            $fields = $tvObj->toArray();
    
            if ($fields['category'] == $cat) {
                $tvData['category'] = $fields['category'];
                $tvData['caption']  = $fields['caption'];
                $tvData['name']     = $fields['name'];
                //$tvData['value']=$fields['value'];
                $tvData['value']    = $tvar['value'];
                $tvData['ending']   = $fields['properties']['ending']['value'];
    
                $output .= $listElementTpl->process($tvData);
            }
        }
    }
    
    return $output;
    


    Вызов сниппета в шаблоне:
    [[!getTVs? &cat=`5` &id_doc=`[[*id]]` &tpl=`tplShowTVs`]]


    Насколько это правильное решение - с учетом того, что оно-таки выводит данные?

    2. По второму вопросу вообще не представляю, как сделать без костылей.

    3. Ну и раз спросил, заодно уточню: можно ли как-то в чанке (или еще где-то) узнавать текущее число итерации во время прохода по значениям? Иногда, например, нужно бывает разбить вывод данных на два столбца или отсечь на три части и т. д. Как в этом случае можно поступить?