Вывод значений полей группы в виде таблицы
Материал из Umicms
Если возникла ситуация, когда необходимо создать большое количество объектов каталога у которых название полей может быть великое множество, т.е. для одного объекта - одного типа характеристики, у второго другие, у третьего... Тогда можно создать в модуле "Шаблоны данных" группу полей, а в ней название полей с таким принципом:
- Поле 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 - идентификатор группы полей.
