J3.x:在组件中添加自定义字段
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
在组件中实现字段
本文介绍如何将自定义字段特性的基本实现应用到自定义组件。
是否曾经想要在您的项目中显示额外的属性?通过自定义字段,您可以无缝地将它们显示在站点的后端和前端。
定制字段提供15种不同的类型,如果您需要更多的话。创建自己的插件.
自定义字段扩展放在核心中,可以以类似的方式使用到类别扩展。
基本上只有2个文件,您需要为基础后端部分扩展以下代码。
“注意!“在示例代码中,我们将为您的组件使用名称。com_example.
后端部分
如何将字段添加到后端列表?
类似于 com_categories 在后端视图中只需要几行添加字段。
只需在方法中添加以下行 addSubmenu
在您的组件助手类中。
所使用的上下文需要匹配您想要实现字段的上下文。一个上下文的例子可以是 com_content.article 或 com_weblinks.weblink. 我们使用com_example.item 这里的例子。只有上下文选项需要更改。
if (JComponentHelper::isEnabled('com_fields'))
{
JHtmlSidebar::addEntry(
JText::_('JGLOBAL_FIELDS'),
'index.php?option=com_fields&context=com_example.item',
$vName == 'fields.fields'
);
JHtmlSidebar::addEntry(
JText::_('JGLOBAL_FIELD_GROUPS'),
'index.php?option=com_fields&view=groups&context=com_example.item',
$vName == 'fields.groups'
);
}
实现ACL
现在需要完成ACL部分。您必须在关闭前将以下行添加到访问xml文件中。 </access>
在该文件中。这里定义了它们,并允许用户在实现中选择ACL设置。com_fields.
<section name="fieldgroup">
<action name="core.create" title="JACTION_CREATE" description="COM_FIELDS_GROUP_PERMISSION_CREATE_DESC" />
<action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_GROUP_PERMISSION_DELETE_DESC" />
<action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_GROUP_PERMISSION_EDIT_DESC" />
<action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_GROUP_PERMISSION_EDITSTATE_DESC" />
<action name="core.edit.own" title="JACTION_EDITOWN" description="COM_FIELDS_GROUP_PERMISSION_EDITOWN_DESC" />
<action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_GROUP_PERMISSION_EDITVALUE_DESC" />
</section>
<section name="field">
<action name="core.delete" title="JACTION_DELETE" description="COM_FIELDS_FIELD_PERMISSION_DELETE_DESC" />
<action name="core.edit" title="JACTION_EDIT" description="COM_FIELDS_FIELD_PERMISSION_EDIT_DESC" />
<action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_FIELDS_FIELD_PERMISSION_EDITSTATE_DESC" />
<action name="core.edit.value" title="JACTION_EDITVALUE" description="COM_FIELDS_FIELD_PERMISSION_EDITVALUE_DESC" />
</section>
该文件中还有一个条目设置:
<action name="core.edit.value" title="JACTION_EDITVALUE" description="JACTION_EDITVALUE_COMPONENT_DESC" />
该条目应该在组件(以及访问xml文件)的正常设置下进行,因为它允许组中的用户编辑组件中提交的自定义字段的任何值。
结果
如果您完成了这些步骤,则完成了用于字段实现的后端部分。用户现在可以创建字段并将其分配给一个项。
前端部分
现在让我们进入前端部分。这很容易,因为字段是通过。Plugin/Events/Content 前端事件。
要在前端显示字段,您需要在组件中实现内容插件事件。
“重要”你在这里传递的是你在后台处理事件时使用的上下文。
看到:
在onContentPrepare事件被触发后,您可以找到附件中的字段 $item->jcfields 属性,如果您想要在布局/视图中呈现字段
提示,技巧和隐藏特性
在这里,您可以找到一些提示和技巧,了解您的实现可能出现的问题,以及一些隐藏的特性 com_fields.
字段标签不会显示在我的组件的编辑视图中。
在某些组件中,后端或前端的编辑视图是硬编码的,不能使用插件修改扩展。但是,当字段使用插件向您的组件添加字段时,您需要支持该字段,以便支持字段。可以通过在组件编辑视图中实现以下布局来确保显示字段:
<?php $this->ignore_fieldsets = array('general', 'info', 'detail', 'jmetadata', 'item_associations'); ?>
<?php echo JLayoutHelper::render('joomla.edit.params', $this); ?>
第一行确保我们忽略了(最终硬编码的字段集),而不是使用该字段来呈现动态字段选项卡 joomla.edit.params
布局。
公共帮助类和API
FieldsHelper类有一些用于处理字段的公共API函数。
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
$fields = FieldsHelper::getFields('com_example.item', $item, true);
字段模型本身允许获取和存储字段的值。
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_fields/models', 'FieldsModel');
$fieldModel = JModelLegacy::getInstance('Field', 'FieldsModel', array('ignore_request' => true));
$fieldModel->setFieldValue($fieldId, $item->id, 'demo value');
ACL的支持
- 每个字段都有一个访问级别。
- 每个字段都有一个新的权限edit.value。
JFactory::getUser()->authorise('edit.value', ‘com_example.item.field.' . (int) $field->id);
更多信息
- https://www.youtube.com/watch?v=7ikOaOKyo6s | JAB16 - Joomla的定制字段
- https://www.youtube.com/watch?v=F_Ni15icn1U | JD16AT - Custom fields since Joomla 3.7 - English
- https://joomla.digital-peak.com/images/blog/JDD16%20Custom%20fields%20in%20Joomla%20for%20developers.pdf