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