阅读时间:5分钟 (1031字)

以智能方式向com_content添加字段

Adding Fields to com_content The Smart Way

我最近在一个项目中需要添加客户评价。我想使用schema.org/Reviews格式输出它们。在搜索解决方案的过程中,我找到的解决方案都超出了我的需求。我的目标是使客户端使用起来简单,但仍然能够输出正确的格式。对于我的客户端来说,最简单的方法是在Joomla的Articles(com_content)扩展中添加字段。当然,我不想真正修改com_content代码或Joomla的#__content表。否则,将来会导致维护和升级的问题。所以,插件来拯救!

Joomla插件架构非常灵活,可以使您在不更改核心代码的情况下完成令人惊叹的事情。

插件目标

我决定了以下这个插件的目标

  1. 向现有的文章管理表单添加字段,以便客户可以输入评价的额外数据。
  2. 所有评价都将位于特定的类别或其子类别中。
  3. 在页面前端显示时以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项目的官方立场不一致。

0
意大利和墨西哥有什么共同点?
在HTTPS上的投资对您的数据...
 

评论

已注册? 在此登录
尚未发表评论。成为第一个发表评论的人

通过接受,您将访问https://magazine.joomla.net.cn/外部第三方提供的服务