以智能方式向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格式所需的字段。我们将能够设置在哪个类别中显示推荐字段,以及是否包含其子类别。
插件PHP文件
插件的主要文件是ksextras.php。
以下是几个需要突出的点。
__construct
在__construct方法中,我们只想为com_content组件使用此插件。因此,我们将获取选项参数,如果它不是com_content,我们将返回并不再处理此插件的其他部分。
onContentPrepareForm
此方法将准备要添加到文章管理器编辑屏幕中的表单字段。它将在单独的标签中添加额外字段。此标签的标签文本通过主语言.ini文件中的“PLG_CONTENT_KSEXTRAS_SLIDER_LABEL”字符串通过语言文件进行控制。
首先,我们将检查是否设置了类别ID。如果没有,我们将继续显示额外表单字段,因为用户可能希望为推荐类别设置它。如果类别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/ 外部第三方提供的服务
评论