В 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);

 

Чтобы сделать комментарий, нужно авторизоваться на сайте!