以智能方式向com_content添加字段
我最近在一个项目中需要添加客户评价。我想使用schema.org/Reviews格式输出它们。在搜索解决方案的过程中,我找到的解决方案都超出了我的需求。我的目标是使客户端使用起来简单,但仍然能够输出正确的格式。对于我的客户端来说,最简单的方法是在Joomla的Articles(com_content)扩展中添加字段。当然,我不想真正修改com_content代码或Joomla的#__content表。否则,将来会导致维护和升级的问题。所以,插件来拯救!
Joomla插件架构非常灵活,可以使您在不更改核心代码的情况下完成令人惊叹的事情。
插件目标
我决定了以下这个插件的目标
- 向现有的文章管理表单添加字段,以便客户可以输入评价的额外数据。
- 所有评价都将位于特定的类别或其子类别中。
- 在页面前端显示时以schema.org/Review格式输出数据。
我可以通过插件实现前两个目标。第三个目标将使用布局覆盖来实现。
文件结构
插件将具有以下文件结构。
ksextras |-> ksextras.php |-> ksextras.xml |-> extras |-> ksextras.css |-> testimonial.xml |-> language |-> en-GB |-> en-GB.plg_content_ksextras.ini |-> en-GB.plg_content_ksextras.sys.ini |-> sql |-> install.mysql.utf8.sql |-> uninstall.mysql.utf8.sql |-> update |-> install.mysql.utf8.sql
请随意从我的github账号下载文件:
安装XML文件
虽然我们没有足够的空间来覆盖文件的所有部分,但我们会涉及到一些重要的部分。
插件组content告诉Joomla这是什么类型的插件以及我们可以使用哪些触发器。
由于我们将数据存储在单独的表中,我们将包括相关的SQL文件选项。我们还将包括用于未来使用的选项,以防我们决定卸载插件或更新它。选项将运行SQL删除表。该文件可以包含更新表架构的SQL。
我们将在块中设置一些参数,这样我们就可以使用插件,而不必在代码中硬编码这些信息。这些将包括组织,这是拥有和正在审查的网站的公司。我们将包括schema.org/Review格式所必需的一些字段。我们将能够设置测试imonials字段应显示的类别,以及是否包括其子类别。
插件PHP文件
插件的主要文件是ksextras.php。
以下是一些重点。
__construct
在__construct方法中,我们只想为com_content组件使用此插件。因此,我们将获取选项参数,如果它不是com_content,我们将返回并不再处理该插件的其他部分。
onContentPrepareForm
此方法将为添加到文章管理器编辑屏幕的表单字段做准备。它将在单独的选项卡中添加额外字段。此选项卡的标签文本通过主语言.ini文件中的“PLG_CONTENT_KSEXTRAS_SLIDER_LABEL”字符串通过语言文件进行控制。
首先,我们将检查类别ID是否设置。如果没有设置,我们将显示额外的表单字段,因为用户可能想为Testimonials类别设置它。如果类别ID设置为插件参数中指定的类别之外的其他类别,则不会显示额外字段。
从那里,我们将从extras/testimonial.xml文件中获取表单字段。然后,如果有现有的文章ID,我们处于编辑模式,需要查询数据库以获取数据。
onContentPrepareData
此方法将检索和准备数据。
setKSFields
此方法设置一个数组,包含要用于数据的字段。我们使用这些字段在onContentPrepareForm中填充表单数据。如果您修改了表单XML文件(见下文)中的字段,则应将此字段添加到ksfields数组中。这是为了避免在onContentPrepareData方法末尾编写额外代码,并允许我们遍历字段并自动设置值的一种便利方法。
要了解更多关于各种事件的信息,您可以访问
表单XML文件
在extras文件夹中,我们有一个JForm XML文件,它定义了此插件使用的字段。这些字段将在文章编辑表单的选项卡中显示。您可以根据需要添加或修改这些字段以更改使用的字段。请确保更新setKSFields方法以与此XML文件中的字段相对应。
要了解更多关于不同字段类型的信息,您可以访问
语言文件
理想情况下,您将为插件设置不同语言。您可以通过在language/en-GB/en-GB.plg_content_ksextras.ini文件中找到的语言ini文件来实现这一点。
用法:布局覆盖
为了在您的网站上使用输出中的字段,您需要创建一个布局覆盖。
访问文章属性/KSExtras数据
要从您的文章覆盖中访问数据,您可以使用以下类似代码
$ksattribs = json_decode($this->item->attribs); $testimonial_by = $ksattribs->testimonial_by; $author_job_title = $ksattribs->author_job_title;
如果您在模块覆盖中使用此代码,您的代码将略有不同。您将引用“$this->item->”,而不是引用“$item->”。
$ksattribs = json_decode($item->attribs); $testimonial_by = $ksattribs->testimonial_by; $author_job_title = $ksattribs->author_job_title;
访问插件参数
要获取插件参数,您可以使用类似以下的内容
$plgParams = new JRegistry(); $plugin = JPluginHelper::getPlugin('content', 'ksextras'); if ($plugin && isset($plugin->params)) { $plgParams->loadString($plugin->params); } $this->organization = $plgParams->get('organization', 'org was not found'); $this->organization_type = $plgParams->get('organization_type', 'Organization');
要了解更多关于布局覆盖的信息,您可以访问
一旦您安装了插件,您需要首先通过扩展管理器 >> 插件设置插件参数。
结论
我们已经覆盖了很多内容。我确信有许多方法可以改进和扩展此插件。所以,实验并享受乐趣!
《Joomla社区杂志》上发布的某些文章代表作者对特定主题的个人观点或经验,可能与Joomla项目的官方立场不一致。
通过接受,您将访问https://magazine.joomla.net.cn/外部第三方提供的服务
评论