但在我们深入之前,先简要介绍一下
短代码。 短代码和宏或脚本没有什么不同,它们是为了重复执行某些活动而创建的。它们可以非常简单,也可以非常复杂。一些是真正的代码片段,没有直接交互,而一些则相当复杂,具有帮助你选择选项的图形GUI。与短代码交互的方式也有很多:a) 没有任何属性的简单短代码,基本使用单个命令,例如,我们的BBcodes是我们通过放置
[b] 和
[/b] 在文本周围来使其加粗的简单短代码 b) 更复杂的带有属性的短代码,如上文Richard展示的YouTube示例
[youtube url="JxS5E-kZc2s" width="640" height="385" /]
创建Google地图的短代码 针对 yesterday Richard 关于XOOPS中短代码的公告,我非常兴奋,并决定探究它们。为了创建短代码,我们将使用
ExtensionAbstract 类。我们会在/Extensions文件夹中创建一个名为"Googlemap.php"的新文件。我们将从这里开始
class Googlemap extends ExtensionAbstract
{
}
Google地图仅仅只有一些非常基本的功能,比如宽度、高度等等。所以首先,我们可以为它创建一个默认配置。这也会让我们更容易,因为我们不用每次使用它时都要填写所有选项。
受保护的静态变量$defaultConfiguration= [
'enabled' => true,
'template' => ',
'clickable' => true, // 点击以在新窗口中全尺寸打开地图
'resize' => true, // 将地图调整大小到下面的max_width
'max_width' => 640, // 在页面上显示地图的最大宽度
'max_height' => 480, // 在页面上显示地图的最大高度
'allowmap' => true, // 允许显示地图,false则强制仅显示链接
];
当然,您可以自己决定包含哪些选项,不包含哪些选项。下一步,我们需要使用Sanitizer注册我们的扩展。这是通过覆盖ExtensionAbstract中的抽象方法
registerExtensionProcessing来实现的。
public function registerExtensionProcessing()
{
}
现在我们需要使用ShortCodes类的"addShortcode()"方法注册我们的简码。
此方法需要两个参数:a)简码的名称 b)每当简码被使用时将被调用的回调函数。在我们的案例中,我们将它命名为"Googlemap"简码,并将具有以下签名的方法
$this->shortcodes->addShortcode( 'googlemap', function ($attributes, $content, $tagName) use ($config) {
如前所述,因为我们使用了一个"回调"函数,我们可以使简码非常复杂和精巧。但这可能需要下次再说
我们的"addShortcode"方法将如下所示
public function registerExtensionProcessing()
{
$config = $this->ts->getConfig('googlemap'); // direct load to allow Sanitizer to change 'allowchart'
$this->shortcodes->addShortcode('googlemap', function ($attributes, $content, $tagName) use ($config) {
$xoops = Xoops::getInstance();
$defaults = ['width' => 640,
'height' => 480,
'src' => '',];
$cleanAttributes = $this->shortcodes->shortcodeAttributes( $defaults, $attributes);
$width = $cleanAttributes['width'];
if (preg_match('/[0-9]{1}$/', $width)) {$width .= 'px';}
$height = $cleanAttributes['height'];
if (preg_match('/[0-9]{1}$/', $height)) {
$height .= 'px';
}
$src = $cleanAttributes['src'];
$newContent = '
一旦测试确认其功能正常,我们就可以通过使用简码
"[googlemap]"直接在任何新闻或发布者模块的文章中,或任何其他XOOPS模块中插入谷歌地图。当然,我们需要向其提供更多信息,因此最终可能看起来是这样的
[googlemap width="600" height="300" src="http://maps.google.com/maps?q=Heraklion,+Greece&hl=en&ll=35.327451,25.140495&spn=0.233326,0.445976& sll=37.0625,-95.677068&sspn=57.161276,114.169922& oq=Heraklion&hnear=Heraklion,+Greece&t=h&z=12"]
这就是XOOPS 2.6.0中发布器模块中这个短代码的结果:
下一步是什么?我对XOOPS中的短代码非常兴奋,以至于昨天测试了几种其他的短代码:
Google图表 - 国旗 - 二维码 - 日期时间小部件例如,要在任何内容中添加一个国旗,我们现在可以只放置这些短代码
[countryflag]
这将显示一个具有默认大小(我设置为美国和64px)的默认国旗,但你可以选择自己喜欢的。标准国旗尺寸为:16、32、64。或者你可以手动指定所需的国旗和尺寸
[qrcode] [countryflag size=64 country="CA"]
这将创建一个64px长的加拿大国旗。国家代码是使用标准两位字母的国家代码来选择的,例如,US代表USA,FR代表法国,DE代表德国等。请注意,您也可以以编程方式执行此操作,最好的方法是安装XOOPS 2.6.0中的“Codex”模块,查看XOOPS 2.6.0的新增功能。通过使用此Google图表短代码
[chart charttype="pie" title="示例饼图" data="41.12,32.35,21.52,5.01" labels="第一个标签|第二个标签|第三个标签|第四个标签" background_color="FFFFFF" colors="D73030,329E4A,415FB4,DFD32F" size="450x180"]
我们可以得到这个图表:
我们还可以创建XOOPS内部功能的短代码,例如当前页面的二维码
[qrcode]
,还有前面提到的国旗:
感谢Richard,XOOPS的快捷代码正开辟着许多非常酷的机会。WordPress上有很多快捷代码,其中一些非常酷,所以请随时将它们转换为XOOPS并与我们分享。
要了解更多如何创建快捷代码,您可以这样做:a) 研究Richard重构的TextSanitizer类,这些类基本上就是快捷代码自身;b) 研究其他CMS(如WordPress)中的某些快捷代码,并尝试将它们转换为XOOPS。
如果您感兴趣,我昨天正在试验的五个快捷代码已放在我的GitHub仓库中。请随意fork它们并回贡献
显然,
Richard在核心上的所有激动人心的工作,以及
Eduardo将RM Common Utilities合并到核心中,XOOPS的下一个版本将非常酷!
加油,XOOPS!