J3.x

J3.x:在组件中添加自定义字段

From Joomla! Documentation

< J3.x:Adding custom fields
This page is a translated version of the page J3.x:Adding custom fields/Implement into your component and the translation is 90% complete.

Other languages:
Deutsch • ‎English • ‎français • ‎Bahasa Indonesia • ‎Nederlands • ‎中文(中国大陆)‎

实现到您的组件


在组件中实现字段

本文介绍如何将自定义字段特性的基本实现应用到自定义组件。
是否曾经想要在您的项目中显示额外的属性?通过自定义字段,您可以无缝地将它们显示在站点的后端和前端。
定制字段提供15种不同的类型,如果您需要更多的话。创建自己的插件.
自定义字段扩展放在核心中,可以以类似的方式使用到类别扩展。 基本上只有2个文件,您需要为基础后端部分扩展以下代码。
“注意!“在示例代码中,我们将为您的组件使用名称。com_example.

后端部分

如何将字段添加到后端列表?

类似于 com_categories 在后端视图中只需要几行添加字段。 只需在方法中添加以下行 addSubmenu 在您的组件助手类中。
所使用的上下文需要匹配您想要实现字段的上下文。一个上下文的例子可以是 com_content.articlecom_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->setValue($fieldId, 'com_example.item', $item->id, ‘demo value’);

ACL的支持

  • 每个字段都有一个访问级别。
  • 每个字段都有一个新的权限edit.value。

JFactory::getUser()->authorise('edit.value', ‘com_example.item.field.' . (int) $field->id);

更多信息