Разработка сайтов на UMI.CMS
Знать UMI.CMS в совершенстве невозможно.
Даже сами разработчики знают о ней не все...

UMi

Ursa Minor

Вывод значений справочника в виде списка

Изм. 30.10.2016

В версии 14 мой макрос больше не нужен. Все решается штатным data::getGuideItems($template = "default", $guide_id = false, $per_page = 100, $curr_page = 0)

Упорядочить вывод по алфавиту проще всего с использованием XSLT-шаблонизатора. Пользуясь случаем покажу заодно как выводить дополнительные поля.

Допустим, наш справочник имеет ID = 117. В моем примере это был глоссарий, где помимо названия элемента справочника есть еще два дополнительных поля: источник( istochnik) - поле, в которое вводится термин на языке оригинала, может быть, может нет, и воторое поле - толкование термина(tolkovanie). Код шаблона выглядит так:




	
  • -
  • В строке 1 вызываем наш справочник и передаем список элементов (не весь справочник, а только список) в именованный шаблон "u-guide-list-full".

    В первом шаблоне командой <xsl:sort select="." data-type="text" order="ascending"/> указывает XSLT-процессору, что данные нужно рассматривать как текстовые (type=text) и упорядочить по возрастанию.

    Во втором шаблоне обрабатываем конкретный элемент. Там все самоочевидно: чтение дополнительных полей по их имени, проверка существования.

     

     

     

    Для истории и древних ЮМИ:

    Нечасто, но возникает необходимость вывести на странице все значения поля типа справочник независимо от того, какое из них выбрано в админке.

    Теоретически, можно попробовать это сделать макросами %data getEditForm()% - там есть весьма подходящие блоки reflection_field_relation_option и reflection_field_relation_option_a

    Однако, у меня это быстро не получилось. Быстрее оказалось написать кастомный макрос:

     

    
    public function getGuideList($id, $template = 'guidelist', $arrayOnly = false){
         if(!$id) return null;//id справочника
    
         $o = umiObjectsCollection::getInstance(); 
         $items = $o -> getGuidedItems($id);
         if(!sizeof($items)) return null;
    
         if($arrayOnly) return $items;
    
         list($guide_block, $guide_item) = def_module::loadTemplates("tpls/content/guide/{$template}.tpl", "guide_block", "guide_item");
    
         $s = '';
         $block_array = array();
    
         foreach($items as $k=>$v){
             $line_array = array();
             $line_array['id'] = $k;
             $line_array['name'] = $items[$k];
             $s .= def_module::parseTemplate($guide_item,$line_array);
         }
         $block_array['lines'] = $s;
         unset($items);
         $s = def_module::parseTemplate($guide_block,$block_array);
         return $s;
    }
    
    

    Шаблон для него помещается в tpls/content/guide/guidelist.tpl

    $FORMS = Array();
    
    $FORMS['guide_block'] = <<<END
    
      %lines%
    END; $FORMS['guide_item'] = <<<END
  • %id% = %name%
  • END;

    Все способы вывода справочников имеют нюанс: наименования выводятся как бог на душу положит, обычно - в порядке их создания. Если необходимо определенным образом упорядочивать выборку, нужно либо вводить дополнителное поле, в котором указывать положении элемента справочника в общем списке, либо делать прямой запрос к базе (прямой или через selector) который вернет упорядоченную выборку.

    Новости

    30.10.2016

    Обновлено описание макроса для вывода всех элементов справочника UMI.CMS с учетом версии 14.

     

    21.07.2015

    Памятка по обновлению до debian 8.1. Приятно вкусить все плюшки PHP 5.6

    11.11.2014

    Как выполнить SQL-запрос из bash-скрипта. Памятка

    11.11.2014

    Как отследить нагрузку сайта на сервер.

    06.11.2014

    Заготовка для галереи изображений с прокруткой. Не знаю, когда дойдут руки довести ее до вида плагина, поэтому открываю как есть. Можно доработать.

    05.11.2014

    Выкладываю как заготовку свой слайдер изображений на mootools

    Все обновления