пятница, 5 июля 2013 г.

extProps и extGroups в собственных макросах UMI.CMS

C версии 2.8.6 в UMI.CMS появились новые возможности для выборок Udata и Usel, которые помимо стандартных полей позволяют делать выборки по расширенным полям. В этом посте я расскажу, как добавить такую возможность в собственные кастомные макросы.



Новая функциональность выглядит это примерно вот так:

http://localhost/udata/content/menu/?extProps=content

Результат получается примерно следующий:


<item id="19" link="/documents/" name="Документы" alt-name="documents" xlink:href="upage://19">
Документы
<extended>
<properties>
<property id="57" name="content" type="wysiwyg">
<title>Контент</title>
<value>
lorem ispum dolores
</value>
</property>
</properties>
</extended>
</item>

И естественно, через некоторое время использования возник вопрос: как добавить данную возможность в свои макросы? На сайте с документацией по UMI.CMS об этом, к сожалению, ничего не сказано. Пришлось немного покопаться и ответ был в итоге найден:


Ответ:

Надо правильно вызывать функцию parseTemplate для 1 объекта в своём макросе, а именно вот так:

Для объектов:

$sel->new selector('object');
$sel->types('object-type')->name('yourmodule','yourbasetypename');

foreach($sel as $obj) {
    $line_arr['attribute:id'] = $obj->id;
    $line_arr['attribute:name'] = $obj->name;
    $lines['subnodes:items'][] = $this->parseTemplate($tpl_template_name, $line_arr, null, $obj->id);
}

$res = $this->parseTemplate($tpl_templates_name, $lines);

Для страниц:

$sel->new selector('pages');
$sel->types('hierarchy-type')->name('yourmodule','yourbasetypename');

foreach($sel as $obj) {
    $line_arr['attribute:id'] = $obj->id;
    $line_arr['attribute:name'] = $obj->name;
    $lines['subnodes:items'][] = $this->parseTemplate($tpl_template_name, $line_arr, $obj->id);
}

$res = $this->parseTemplate($tpl_templates_name, $lines);

P.S. Если вы не планируете использовать tpl-шаблонизатор, то эта переменная может быть пустой строкой или false: $tpl_templates_name

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

Отправить комментарий