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