向com_content添加字段,正确的方法
我最近在一个项目上工作,我需要添加一个用户评价的功能。我想使用schema.org/Review的格式来显示它们。在搜索解决方案时,我发现的一切对我来说都太复杂了。我的目标是为客户提供简单易用的功能,同时也支持正确的格式。对我客户来说最简单的方法是向Joomla的“文章”(com_content)添加一个字段。当然,我不想修改Joomla的com_content代码或#_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账户下载这些文件,地址为
https://github.com/katalystsol/plg_content_ksextras
安装文件XML
尽管我们没有时间覆盖文件的所有部分,但我们将关注其中一些最重要的部分。
插件内容组指示Joomla!此插件属于哪种类型,并确定我们可以使用哪些触发器。
由于我们将数据存储在单独的数据库中,我们将包含与SQL文件相关的选项。我们还包含未来使用的选项,以防我们决定卸载插件或更新它。此选项将启动SQL以删除表。文件可能包含用于更新表模式的SQL。
我们将在一个我们可以与插件一起使用的块中设置一些参数,这样我们就不必在代码本身中硬编码这些信息。这包括组织,这是拥有网站的企业。我们将包含由schema.org/Review格式要求的一些字段。我们可以设置见证字段显示的类别,并可能包括其子类别。
插件PHP文件
插件的主要文件是ksextras.php。
需要注意的几点
_construct
在_construct方法中,我们只想使用此插件来处理com_content组件。因此,我们将有一个参数选项,如果它不是com_content,我们将回头并不对插件的其他部分进行处理。
onContentPrepareForm
此方法将为添加编辑屏幕到文章管理器准备字段表单。它将在单独的选项卡中添加附加字段。此选项卡的标签文本通过使用文件主语言文件中的“PLG_CONTENT_KSEXTRAS_SLIDER_LABEL”字符串进行控制,该字符串位于主语言文件.ini中。
首先,我们将检查是否设置了类别ID。如果没有设置,我们将前进并显示额外的字段表单,因为用户可能希望将其设置为见证类别。如果类别设置为与插件参数中指定的类别不同的类别,则不会显示额外的字段。
从这里开始,我们获取来自extras/testimonial.xml的字段表单。然后,如果存在文章的现有ID,我们处于编辑模式,必须查询数据库以获取数据。
onContentPrepareData
此方法允许获取和准备数据。
setKSFields
此方法设置一个字段表,以便可以在数据中使用它们。我们使用这些字段在onContentPrepareForm中的数据表单中显示。如果您在Form XML文件(见下文)中修改这些字段,您必须在ksfields表中添加这些字段。这就是我们为什么不需要在onContentPrepareData方法的末尾添加代码,这使我们能够通过字段创建循环并自动设置值。
有关更多信息,您可以查看:
http://docs.joomla.org/Plugin/Events/Content
表单XML文件
在附加文件中,我们有一个Jform XML文件,它定义了用于此插件的字段。这些是将在文章编辑选项卡中显示的字段。您可以为添加或修改您使用的字段。请确保setKSFields方法与XML文件中的字段匹配。
有关不同字段类型的更多信息,您可以查看:
http://docs.joomla.org/Form_field
语言文件
理想情况下,您将配置插件以接受不同的语言。您可以通过放置在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');
要了解更多关于覆盖的信息,您可以访问
http://docs.joomla.org/Layout_Overrides_in_Joomla
一旦您安装了插件,您首先需要转到“扩展”>“插件管理”来设置此插件的参数。
结论
尽管我们已经涵盖了多个方面,但我相信还有许多方法可以改进此插件。
因此,尝试并享受其中吧!
《Joomla社区杂志》上发布的一些文章代表了作者在特定主题上的个人观点或经验,可能并不与Joomla项目的官方立场一致
通过接受,您将访问由https://magazine.joomla.net.cn/之外第三方提供的服务
评论