为网站建设者介绍插件开发
在所有可用的Joomla 扩展类型中,插件是最容易实现的,但在自定义您的Joomla! 网站方面可能是最强大的。Joomla! 中内置了许多事件,这些事件会触发插件的执行,这本质上允许我们劫持标准的Joomla! 代码或输出并插入我们自己的代码。
想象一下,你正在为客户构建一个网站,他们希望为客户运行网络研讨会。现在这些网络研讨会的日期和时间将取决于观众的时区,所以理想情况下,我们希望向用户展示本地日期和时间。
作为网站建设者,您的第一步可能是搜索JED以查找适合此目的的现有扩展,毫无疑问,可能已经有一个了,但如果现有的解决方案过于复杂,您只想做一些简单的事情怎么办?或者,如果您正在尝试解决的问题没有可用的解决方案怎么办?
这是一个您可能考虑创建自己的内容插件的场景。这可以通过几行代码完成,您不需要是编程专家就能创建这个插件。
您的第一步是创建一个名为 plg_content_tzconvertor 的文件夹,并在其中创建您的插件的安装XML文件 tzconvertor.xml。此文件告诉Joomla! 所有关于您的插件的信息,它包含哪些文件,这种插件的类型,以及是谁创建的。
注意:如果您打算与他人共享此插件,那么首先检查JED以确保您选择的名称是唯一的,这是一个好主意。
<?xml version="1.0" encoding="UTF-8"?> <extension version="3.0" type="plugin" method="upgrade" group="content"> <name>Content – Timezone Convertor</name> <author>Tim Plummer</author> <creationdate>April 2014</creationdate> <copyright>Copyright (C) 2014 Your Company. All rights reserved.</copyright> <license> http://www.gnu.org/licenses/gpl-3.0.html</license> <authoremail>This email address is being protected from spambots. You need JavaScript enabled to view it. </authoremail> <authorurl>http://www.yourcompany.com</authorurl> <version>1.0.0</version> <description>This plugin will replace date and time with the local equivalent based on user’s timezone. Don't forget to publish this plugin! </description> <files> <filename plugin="tzconvertor">tzconvertor.php</filename> <filename>index.html</filename> </files> </extension>
插件组 content 告诉Joomla! 这将是什么类型的插件,并确定我们可以使用哪些触发事件。
现在我们需要为我们的插件创建PHP文件。在您的 plg_content_tzconvertor 文件夹中,创建文件 tzconvertor.php。
<?php defined('_JEXEC') or die; jimport('joomla.plugin.plugin'); class plgContentTzconvertor extends JPlugin { function plgContentTzconvertor( &$subject, $params ) { parent::__construct( $subject, $params ); } public function onContentPrepare($context, &$row, &$params, $page = 0) { // Do not run this plugin when the content is being indexed if ($context == 'com_finder.indexer') { return true; } if (is_object($row)) { return $this->Tzconvertor($row->text, $params); } return $this-> Tzconvertor ($row, $params); } protected function Tzconvertor (&$text, &$params) { $user = JFactory::getUser(); $timeZone = $user->getParam('timezone'); // matches date and time in format yyyy-mm-dd hh:mm $pattern = '/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})/'; $found = preg_match_all($pattern, $text, $matches); if ( $found ) { foreach ( $matches[0] as $value ) { $replacement=JHtml::date(strtotime($value) , 'Y-m-d g:i a', true); if($timeZone) { $replacement .= ' ('.$timeZone.')'; } $text = preg_replace($pattern, $replacement, $text); } } return true; } }
《onContentPrepare》是我们针对此插件的目标事件,当我们在网站上显示文章内容时执行此操作。这会调用《Tzconvertor》函数,这是我们放置所有自定义代码并进行所有艰苦工作的地方。首先,我们获取当前登录用户的详细信息,并查找他们设置的时区。
然后我们搜索文章的文本,看看是否有任何部分与我们的正则表达式模式匹配,该模式正在寻找 yyyy-mm-dd hh:mm 格式的日期时间。如果找到匹配项,我们将日期时间替换为考虑了用户时区偏好的调整版本。我们还显示时区名称,以便让用户清楚地知道这个日期时间对应哪个时区。
请注意,《JHtml:date》函数中的《true》标志表示使用用户的时区设置,而不是使用系统设置的时区值(使用《false》)。
现在在你的《plg_content_tzconvertor》文件夹中,创建一个名为《index.html》的文件,当用户直接浏览文件夹时,将显示一个空白页面,而不是可能向恶意用户暴露您的网站信息。
<html><body bgcolor="#FFFFFF"></body></html>
现在您只需将其压缩,并在您的网站上安装即可。
当此插件启用时,对于已登录用户,它将找到文章中任何 yyyy-mm-dd hh:mm 格式的日期时间,并将其调整为用户的本地时区。
请注意,文章中输入的日期和时间应使用 UTC 时区。
当设置了悉尼时区的用户登录时,他们将看到调整后的日期时间。
正如您所看到的,我们实际上向标准的 Joomla! 内容插件中添加了 17 行自定义代码,我认为每个网站构建者都能做到这一点。现在您已经看到插件可以有多简单,为什么不尝试在您的客户提出不寻常要求时使用它呢?
《Joomla 社区杂志》上发布的一些文章代表了作者在特定主题上的个人观点或经验,可能不代表 Joomla 项目官方立场。
通过接受,您将访问 https://magazine.joomla.net.cn/ 外部第三方提供的服务
评论