В Joomla 3.7 появились поля и, соответственно, вопрос как их использовать в шаблоне компонента материалов.
По поиску нашел следующее
// Load the FieldsHelper
<?php JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); ?>
<?php foreach ($this->item->jcfields as $field) : ?>
// Render the field using the fields render method
<?php echo FieldsHelper::render($field->context, 'field.render', array('field' => $field)); ?>
<?php endforeach ?>
Такой вариант у меня правда не прошел..
А вот такой
<?php foreach ($this->item->jcfields as $field) : ?> // Render the field using the fields render method <?php echo $field->label . ':' . $field->value; ?> <?php endforeach ?>
сработал
Чтобы получить конретное поле, можно задать такую функцию
public function getFieldByName($fields, $field_name){
$result = false;
foreach ($fields as $field) {
if ($field->name == $field_name){
$result = $field;
break;
}
}
return $result;
}
Где
$fields = $this->item->jcfields;
в layout материала.
Или по группе полей:
public function getFieldsByGroupId($fields, $group_id){
$result = array();
foreach ($fields as $field) {
if ($field->group_id == $group_id){
$result[] = $field;
}
}
return $result;
}
Если нам нужно получить поле не из материала, а, например, из раскладки блога вывода материалов, то есть вне цикла по самим материалам, то это можно сделать так:
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
$jcFields = FieldsHelper::getFields($context = 'com_content.article', $item = null, $prepareValue = false, null);
$arrayFields = json_decode(json_encode($jcFields), True);
Мы получаем поля, привязанные к категории, и переводим их в ассоциативный массив.
Нашел еще вариант получения полей категории:
$jcategories = JCategories::getInstance('Content');
$category = $jcategories->get($catid);
$currentCatFields = FieldsHelper::getFields('com_content.categories', $category, true);
print_r($currentCatFields);
Так можно получить элементы списка:
foreach($jcFields as $keyField => $jcField){
$options = $jcField->fieldparams->get('options');
print_r($options);
}