Введение

Действительная сила настраиваемых полей заключается в том, что вы можете использовать ее в своих собственных переопределениях. Вот пример того, как вы можете это сделать.

Получение настраиваемых полей в вашем переопределении

В основном у вас есть все настраиваемые поля, соответствующие текущему элементу, доступному через новое свойство в переменной $item называемой jcfields. Свойство $item->jcfields - это массив, который содержит следующие данные для каждого поля, где одно поле выглядит следующим образом:

Array
(
    [4] => stdClass Object
        (
            [id] => 4
            [title] => article-editor
            [name] => article-editor
            [checked_out] => 0
            [checked_out_time] => 0000-00-00 00:00:00
            [note] => 
            [state] => 1
            [access] => 1
            [created_time] => 2017-04-07 12:08:59
            [created_user_id] => 856
            [ordering] => 0
            [language] => *
            [fieldparams] => Joomla\Registry\Registry Object
                (
                    [data:protected] => stdClass Object
                        (
                            [buttons] => 
                            [width] => 
                            [height] => 
                            [filter] => 
                        )
 
                    [initialized:protected] => 1
                    [separator] => .
                )
 
            [params] => Joomla\Registry\Registry Object
                (
                    [data:protected] => stdClass Object
                        (
                            [hint] => 
                            [render_class] => 
                            [class] => 
                            [showlabel] => 1
                            [disabled] => 0
                            [readonly] => 0
                            [show_on] => 
                            [display] => 2
                        )
 
                    [initialized:protected] => 1
                    [separator] => .
                )
 
            [type] => editor
            [default_value] => 
            [context] => com_content.article
            [group_id] => 0
            [label] => article-editor
            [description] => 
            [required] => 0
            [language_title] => 
            [language_image] => 
            [editor] => 
            [access_level] => Public
            [author_name] => Super User
            [group_title] => 
            [group_access] => 
            [group_state] => 
            [value] => Bar
            [rawvalue] => Bar
        )
 
)

Отобразить поле с помощью FieldsHelper

Чтобы отобразить поле, вы можете использовать FieldsHelper::render(), передав необходимые значения.

/**
 * Renders the layout file and data on the context and does a fall back to
 * Fields afterwards.
 *
 * @param   string  $context      The context of the content passed to the helper
 * @param   string  $layoutFile   layoutFile
 * @param   array   $displayData  displayData
 *
 * @return  NULL|string
 *
 * @since  3.7.0
 */
public static function render($context, $layoutFile, $displayData)

Пример кода для переопределения с помощью FieldsHelper

// 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 ?>

$item->jcfields не содержит полей, которые мне нужны

Свойство jcfields генерируется с помощью события плагина onContentPrepare путем передачи контекста полей. Плагин fields, который считывает поля из базы данных и добавляет значения в свойство jcfields. Поэтому, пожалуйста, убедитесь, что компонент, который вы используете, также реализует событие onContentPrepare с контекстом, который вы используете для полей.

Если вы используете основные компоненты, это должно работать из коробки.