четверг, 17 июня 2010 г.

UMI используем doSelection


Есть в UMI CMS такая штука, как doSelection. Она позволяет делать произвольные выборки из базы umi.
В качестве примера покажу, как вывести объекты каталога в случайном порядке. В моем примере это будут случайные "места отдыха".


Создаем файл запроса usels/rand_places.xml
<?xml version="1.0" encoding="UTF-8"?>
<selection>
  <target expected-result="pages">
    <type id="772" />
    <category depth="10">/places/</category>
  </target>
  <sort>rand()</sort>
  <limit page="0">{1}</limit>
</selection>

Данный запрос делает выборку из раздела сайта http://site/places/ с глубиной вложенности 10, всех объектов типа 772. Данные сортируем в случайном порядке, количество выводимых элементов передается в первом параметре.
Полное описание формата usel можно найти тут http://help-dev.umi-cms.ru/chapter.XSLTTemplates.usel.html
Далее пишем шаблон: tpls/data/usel/rand_places.tpl

<?php
$FORMS = Array();

$FORMS['elements_block'] = <<<END
<div class="catalog_block">

%items%

</div>
END;

$FORMS['elements_block_line'] = <<<END
<div><a href="%link%">%name%</a></div>
<div>%anons%</div>

   
END;

?>


http://help-dev.umi-cms.ru/data.doSelection.html
и вызываем макрос так:
%data doSelection('rand_places', 'rand_places', 3)%
rand_places - это имена наших файлов: шаблона и выборки usel (у меня они называются одинаково)
3 - это параметр №1, который у нас означает количество выводимых элементов.

Как видим, разрабатывать под юми стало значительно легче, но не все так хорошо работает как хотелось бы (в лучших традициях юми :)). Функция бажная, есть некоторые ограничения, например нельзя делать выборку по владельцу объекта.
Вот если бы разработчики UMI сами бы пользовались своим usel и стандартизировали бы шаблоны вывода всех макросов через него... эх.. мечты мечты...

2 комментария:

  1. Ну почему же мечты, напишите нам как это должно работать на ящик partner@umisoft.ru с пометкой "Для Антона". Мы сайты не делаем и потому, в проектирование всей системы руководствуемся исключительно пожеланиями наших пользователей и партнеров.
    P.s. Уберите, пожалуйста, ваш пост про ключ.

    ОтветитьУдалить
  2. А как вывести определенное поле страницы с помощью этого макроса? Например поле тегов. По умолчанию его с помощью getproperty вывести нельзя, а с помощью этого макроса вроде можно

    ОтветитьУдалить