Как использовать настраиваемые поля в ваших переопределениях
Введение
Действительная сила настраиваемых полей заключается в том, что вы можете использовать ее в своих собственных переопределениях. Вот пример того, как вы можете это сделать.
Получение настраиваемых полей в вашем переопределении
В основном у вас есть все настраиваемые поля, соответствующие текущему элементу, доступному через новое свойство в переменной $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
с контекстом, который вы используете для полей.
Если вы используете основные компоненты, это должно работать из коробки.