添加自定义字段/覆盖
From Joomla! Documentation
< J3.x:Adding custom fields
如何在您的重写中使用自定义字段?
Articles in this Series
- Introduction
- Parameters for all Custom Fields
- Calendar Field
- Checkboxes Field
- Color Field
- Editor Field
- Integer Field
- List Field
- List of Images Field
- Media Field
- Radio Field
- Repeatable Field
- Sql Field
- Text Field
- Textarea Field
- Url Field
- User Field
- Usergroup Field
- How can you group custom fields
- What components are supporting custom fields
- Implementation into your component
- Use custom fields in your overrides
如何在您的重写中使用自定义字段?
介绍
定制字段的真正强大之处在于,您可以在自己的重写中使用它。这里有一个例子,教你如何做到这一点。
在覆盖中获取定制字段。
基本上,所有自定义字段都对应于当前项目,通过您的新属性可访问。 $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 我需要不包含的字段
The jcfields 属性是使用插件事件生成的 onContentPrepare 通过传递字段的上下文。字段插件比从数据库读取字段并将值添加到jcfields属性中。
因此,请确保您使用的组件也实现了onContentPrepare
事件与您用于字段的上下文。
如果您使用的是核心组件,那么这应该能够解决问题。
加载单个字段
为了向您的内容添加单个字段,首先使用“Name”字段为您的自定义字段选择特定的名称,该字段将用于直接在覆盖代码中引用您的字段。在 Options 标签, 选择No 在 Automatic Display 字段,以防止它自动显示在任何一个标准位置。
然后,为了在重写中启用对自定义字段的直接访问,请将代码放在文件的开头。您应该对每个想要放置单个定制字段的覆盖PHP文件执行此操作。
<?php foreach($item->jcfields as $jcfield)
{
$item->jcFields[$jcfield->name] = $jcfield;
}
?>
最后,您应该在想要显示的字段标签或值的位置添加字段放置代码。
要将“标签的字段添加到您的覆盖,请插入下面的代码, 替换 name-of-field 以字段的名称。
<?php echo $item->jcFields['name-of-field']->label; ?>
要将字段的“值”添加到您的覆盖,请插入下面的代码,替换name-of-field 以字段的名称。
<?php echo $item->jcFields['name-of-field']->rawvalue; ?>
您可以将此代码添加到覆盖的任何部分。示例:一个div的内容,即srcimg
标签,在CSS类属性中,等等。