Вывод значений полей группы в виде таблицы — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «Если возникла ситуация, когда необходимо создать большое количество объектов каталога у …»)
 
 
(не показана 1 промежуточная версия 1 участника)
Строка 59: Строка 59:
 
</source>
 
</source>
 
где %id% - id страницы, group-fields - идентификатор группы полей.
 
где %id% - id страницы, group-fields - идентификатор группы полей.
 +
[[Категория:Модуль Каталог]][[Категория:Написание кастомных макросов]]

Текущая версия на 12:30, 5 июня 2013

Если возникла ситуация, когда необходимо создать большое количество объектов каталога у которых название полей может быть великое множество, т.е. для одного объекта - одного типа характеристики, у второго другие, у третьего... Тогда можно создать в модуле "Шаблоны данных" группу полей, а в ней название полей с таким принципом:

- Поле 1 - Значение 1

- Поле 2 - Значение 2

....

- Поле N - Значение N

Значение для полей "Поле N" - это название характеристик объекта, для полей "Значение N" - значение характеристик.

Если поля разных типов то можно просто воспользоваться макросом %data getPropertyGroup()%, задав для "Значение N" такую верстку, чтобы значение смещалось вправо + перенос строки. Если поля "Поле N" и "Значение N" одинакового типа то можно использовать кастомный макрос, который выведет поля строками: "Поле N - Значение N".

Кастомный макрос необходимо прописать в файл ~classes/modules/custom.php, после слов //TODO: Write your own macroses here:

public function fieldsValue($elementId,$droupName){
        $hierarchy = umiHierarchy::getInstance();
        if (!$hElement = $hierarchy->getElement($elementId)) return;
        $typeId = $hElement->getObjectTypeId();
        $objectType = umiObjectTypesCollection::getInstance()->getType($typeId);
        if (!$objectGroup = $objectType->getFieldsGroupByName($droupName)) return;
        $fields = $objectGroup->getFields();
        $arr_fields = Array();
        $i = 0;
        // Назначение верстки для полей, в зависимости от номера следования поля (четн, нечент.)
        foreach($fields as $fieldsObject) {
           $value = $hElement->getValue($fieldsObject->getName());
           $i++;
           if (!$value) continue;
           if ($i % 2 != 0) {
              $arr_fields[] = $value.":";
           }
           else {
              $arr_fields[] = "<span style=\"float:right;\">{$value}</span><br /><hr />";
           }
           
        }                                                                                
        return implode("",$arr_fields);
  }

Верстку для $arr_fields конечно можно поменять. Кавычки необходимо экранировать обратным слэшем: \". Пример вызова макроса:

%custom fieldsValue(%id%,'group-fields')%

где %id% - id страницы, group-fields - идентификатор группы полей.