Получение списка TV полей у ресурса.
Неудобство использование TV полей состоит в том, что добавив одно поле ввиде характеристики у ресурса, необходимо его прописать в шаблоне. Или наоборот, отключив дополнительное поле у ресурса, необходимо удалить его в шаблоне.
Сниппет pdoTV позволит автоматически выводить дополнительные TV поля в шаблоне.
<?php $id =$tpl = $modx->getOption('id', $scriptProperties, $modx->resource->id); //id ресурса $catid =$tpl = $modx->getOption('catid', $scriptProperties, '17'); //id категории $tpl = $modx->getOption('tpl', $scriptProperties, ''); // шаблон - fields $sql = "SELECT tv.name, tv.caption, tv.description, val.value, rnk.rank FROM {$modx->getTableName('modResource')} con inner join {$modx->getTableName('modTemplateVarResource')} val on con.id = val.contentid inner join {$modx->getTableName('modTemplateVar')} tv on tv.id = val.tmplvarid inner join {$modx->getTableName('modTemplateVarTemplate')} rnk on tv.id = rnk.tmplvarid and con.template = rnk.templateid WHERE con.id = ($id) AND tv.category = ($catid) ORDER by rnk.rank ASC"; $q = $modx->prepare($sql); $q->execute(); $customtvs = $q->fetchAll(PDO::FETCH_ASSOC); /** @var pdoTools $pdoTools */ $pdoTools = $modx->getService('pdoTools'); //$modx->log(1, print_r($tpl,1)); $output = $pdoTools->getChunk($tpl, ['fields'=>$customtvs]); return $out
Теперь достаточно создать TV поле разместить в нужной категории, назначить шаблону, выставить порядок у шаблона и заполнить.
Для вывода, примерный, чанк
{if $fields|len >0} {foreach $fields as $field} <div class="param-item text-center"> <div class="param-img"> <img src="assets/images/svg/{$field.name}.svg" alt="{$field.name}"> </div> <p class="c-blackblue dark">{$field.caption}</p> {if $field.name == 'age'} <p class="medium lh-3"> {set $age = 'age'|chunk|split:'||'} {foreach $age as $val} {set $val_arr = $val|split:'=='} {if ($val_arr[1]|strip) == ($field.value|strip)} {$val_arr[0]} {/if} {/foreach} </p> {elseif $field.name == 'aim'} {set $aim = $field.value|split:'||'} {if $aim | len >0} {foreach $aim as $val} <p class="medium lh-3">{$val|resource:'pagetitle'}</p> {/foreach} {/if} {else} <p class="medium lh-3">{$field.value}</p> {/if} </div> {/foreach} {/if}
Сам вызов
{'pdoTV'|snippet:[ 'id'=>$_modx->resource.id, 'catid'=>17, 'tpl'=> '@FILE chunks/tpl/TVfield.tpl' ]}
Комментарии ()