优雅地添加字段到com_content
几天前,我答应将这篇文章从杂志翻译成英文:“Adding Fields to com_content The Smart Way”,作者为Don Cranford。在翻译过程中,我发现解释部分不完整,因此决定安装插件并使用它来添加更多文章信息。
该插件提供了一个简单的方法来添加额外的字段,而无需为Joomla!安装大型扩展。当然,为了创建插件或使用Don Cranford的插件,需要具备编程知识。
以下是翻译后的文章,增加了我的扩展和解释。
原文
最近,我在一个项目中工作,需要添加客户评价。我想以schema.org/Reviews格式展示结果。在寻找解决方案的过程中,我发现了更多我并不需要的东西。我的目标是让客户使用尽可能简单,但结果格式要正确。对我客户来说,最简单的方法是在Joomla!文章扩展(com_content)中添加额外的字段。当然,我不想更改com_content或Joomla!中#__content表的代码。否则,在Joomla!的维护和升级中会产生很多麻烦。插件拯救了!
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文件
由于我们没有足够的空间来详细展示每个部分,我想指出一些重要的点。
group="content" 通知Joomla这是一个什么类型的插件以及我们可以使用哪些机制。
由于我们将数据保存在一个单独的表中,我们必须包括与相关SQL文件关联的选项。同时,我们也包含了"uninstall"和"update"选项,以防未来需要卸载或更新我们的插件。"uninstall"选项将运行SQL来删除表格。另一个文件可能包含用于更新表格模式的SQL。
在这个块中,我们还将设置一些可以在插件内部使用的参数,这样我们就不必在代码中写入这些信息。这包括组织,被评论的网站所属的公司。我们将包含一些对于schema.org/Review格式必需的字段。我们将能够设置一个类别,其中将显示评论字段,以及是否包括子类别。
“这是插件安装后的样子”
插件PHP文件
插件的主要文件是ksextras.php。
一些需要注意的点
__construct
在__construct方法中,我们只想为com_content组件使用此插件。因此,我们将获取"option"参数,如果不是com_content,则终止并停止处理其余插件。
onContentPrepareForm
此方法准备我们要添加到文章管理器编辑窗口中的表单字段。它将在一个单独的标签页中添加额外的字段。此标签页的名称通过使用主语言文件中的常量“PLG_CONTENT_KSEXTRAS_SLIDER_LABEL”通过语言文件来控制。
首先,我们将检查类别ID是否已设置。如果没有,我们将继续并显示额外的字段,因为用户将想要使用这些字段来评论类别。如果类别ID已设置,而不是插件参数中指定的类别,则不会显示额外的字段。
从这里,我们将从extras/testimonial.xml文件中获取额外的字段。然后,如果存在现有的文章ID,我们处于编辑模式,需要查询数据库以获取数据。
onContentPrepareData
此方法返回并准备数据。
setKSFields
此方法设置一个字段数组以供数据使用。我们在onContentPrepareForm方法中使用这些字段来填充数据。如果您修改了XML文件中的字段(请参阅下面的更多内容),则必须将这些字段添加到ksfields数组中。这提供了一种便利,避免在onContentPrepareData方法末尾编写额外代码,并允许我们遍历字段并自动设置值。
要了解更多关于各种事件的信息,请访问
http://docs.joomla.org/Plugin/Events/Content
表单XML文件
在"extras"文件夹中,我们有一个JForm XML文件,它定义了插件使用的字段。这是将在文章编辑器表单标签页中显示的字段。您可以添加或修改此文件以更改要使用的字段。请确保修改setKSFields方法以适应此XML文件中的字段。
要了解更多关于不同类型字段的信息,请访问
http://docs.joomla.org/Form_field
“证词不过是添加了额外字段的文章,这些字段允许信息以schema.org/Review的格式显示,这是一种由搜索引擎如谷歌解析的微格式。”
“以下是插件创建的额外字段:”
语言文件
理想情况下,你可以调整插件以使用不同的语言。这可以通过位于language/en-GB/en-GB.plg_content_ksextras.ini的.ini语言文件来实现。
"此文件可以作为创建其他语言的模板,例如es-ES.plg_content_ksextras.ini"
用法:布局覆盖
为了能在你的网站上使用这些字段,你必须创建一个布局覆盖。
访问文章/ KSExtras数据属性
要从你的文章覆盖中访问数据,你可以使用类似以下代码的东西
$ksattribs = json_decode($this->item->attribs); $testimonial_by = $ksattribs->testimonial_by; $author_job_title = $ksattribs->author_job_title;
如果你在一个模块覆盖中使用此插件,你的代码会有所不同。你需要引用“$item->”而不是“$this->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
一旦安装了插件,你首先需要通过扩展 >> 插件管理器来设置插件参数。
"Don Cranford已经为证词创建了一个布局覆盖或替代布局。此布局基于博客格式,可以“安装”到模板的html/com_content/category/目录中。你可以在这里详细了解testimonials_item.php的构建方式(https://github.com/katalystsol/plg_content_ksextras/blob/master/templates/protostar/html/com_content/category/testimonials_item.php),这是最终在前端生成显示的证词的文件。使用此替代布局可以创建一个特别的菜单项用于证词。这里菜单项的名称没有显示出来,因为语言常量还没有定义。"
"结果如下:"
"当然,通过分析布局结构,我们可以使用各种类来使用CSS修改外观。”
结论
我们已经涵盖了大部分基本内容。我相信还有许多方法可以改进和扩展此插件。所以,请尽情实验和享受吧!
“这是一个非常好的想法,并且是进入创建插件主题的相对简单方式。值得仔细查看github上的文件以更好地理解系统。”
英文翻译 - 以智能方式向com_content添加字段
在Joomla社区杂志上发表的一些文章代表了作者在特定主题上的个人观点或经验,可能不符合Joomla项目官方立场
通过接受,您将访问https://magazine.joomla.net.cn/之外的第三方外部服务
评论