发布者:Mamba,时间:2015/11/1 10:50:00 阅读次数:4782

XOOPS 短码即将登陆XOOPS 2.6.0:D

Shortcodes are coming to XOOPS 2.6.0 :D

Richard 继续对XOOPS 2.6.0进行令人惊叹的改进。最新的增加是“短码”,这可能是从WordPress最知名的功能。我实际上期待了很久,很高兴看到Richard将它添加到XOOPS中!YES!!!

这要归功于我们对旧TextSanitizer的重构。你可以在GitHub上的Richard信息中了解更多细节。

引用
MyTextSanitizer已成为Xoops\Core\Text\Sanitizer。

亮点

- 单一统一的配置文件

xoops_data/configs/system_sanitizer_prefs.yml


- 扩展(即YouTube)现在是一个SanitizerComponent,这是一个包括过滤器(即Xss)的基类

- 每个SanitizerComponent均可自动配置,配置会随着新增加的内容自动更新

- 通过对核心.sanitizer.configuration.defaults事件做出响应,可以添加自定义组件

- 短码(WordPress样式)现在成为XoopsCode和扩展的基础

- 通过对

core.sanitizer.shortcodes.add
事件做出响应,或通过直接使用

Sanitizer::getShortCodes()与短码引擎直接交互


- 所有内置组件和短码都可以使用同名自定义替换来覆盖

- 一些扩展更新了语法。例如

[youtube=640,385]https://www.youtube.com/watch?v=JxS5E-kZc2s[/youtube]

现在可以变成

[youtube url="JxS5E-kZc2s" width="640" height="385" /]


(它还可以使用任何已知的YouTube URL作为url属性。)

- 另一个例子是SoundCloud,现在它可以直接支持soundcloud.com上的共享/嵌入对话框中提供的“Wordpress代码”选项。

旧的样式仍然被接受,以兼容现有内容,并不是所有的扩展都已经转换为新的样式。还有很多工作要做,但现在支持代码已经就绪。


这对XOOPS开发人员意味着什么?我们现在将能够简化围绕为我们的用户和客户设计最佳外观网站的大量活动!
同时,我们的用户将能够添加大量酷炫的功能,而无需任何编程!

对于那些从未使用过短代码(ShortCodes)的人来说,让我们简要介绍一下并提供一个简单教程。我们将使用的基本类是由Richard重构的TextSanitizer类。

Resized Image


目前我们有以下从 FilterAbstract 衍生的类

- Censor
- Clickable
- Quote
- SyntaxHighlight
- TextFilter
- Xss

以及以下从 ExtensionAbstract 衍生的类

- Flash
- Iframe
- Image
- Mms
- Mp3
- Rtsp
- SoundCloud
- UnorderedList
- Wiki
- Wmp
- XoopsCode
- YouTube

就我们的目的而言,我们将主要使用 ExtensionAbstract 类。现在让我们看看如何使用它来创建 Google ChartsGoogle Maps 的短代码(短代码详细信息请参阅这里

但在我们进一步之前,我们来简要了解一下 短代码 短代码 并非与众不同,它们是你创建的用于重复执行某些活动的宏或脚本。它们可以是极其简单的,也可以是非常复杂的。其中一些是真正的代码片段,没有直接的交互,而另一些则相当复杂,具有帮助您选择选项的视觉GUI。还有不同的方法与短代码进行交互:a) 简单的没有属性的自定义代码,基本上是单个命令,例如我们的BB代码是简单的自定义代码,我们通过在文本周围放置 [ b ] [ /b ] 来使文本加粗 b) 更复杂的带属性的简单代码,如Richard在上面展示的YouTube示例
[youtube url="JxS5E-kZc2s" width="640" height="385" /]
为Google Maps创建短代码 昨天我看到Richard关于XOOPS中短代码的公告后,我非常兴奋,并决定探索它们。为了创建短代码,我们将使用ExtensionAbstract类。我们在/Extensions文件夹中创建了一个名为"Googlemap.php"的目录。我们首先从这开始
class Googlemap extends ExtensionAbstract
{
}
Google地图只具有非常基本的功能,比如宽度、高度等。因此,作为第一步,我们可以为其创建一个默认配置。这将简化我们的工作,因为我们不需要每次使用时都填写所有选项。
受保护的静态$defaultConfiguration =[
'enabled'    => true,
'template'   => '',
'clickable'  => true,  // Click to open a map in a new window in full size
'resize'     => true,     // Resize the map down to max_width set below
'max_width'  => 640,   // Maximum width of a map displayed on page
'max_height' => 480,   // Maximum height of a map displayed on page
'allowmap'   => true// true to allow maps, false to force links only
];
当然,你可以决定自己想包含哪些选项,以及不包含哪些选项。接下来,我们需要使用 Sanitizer 类的 "addShortcode()" 方法注册我们的扩展。这是通过重写来自 ExtensionAbstract 的抽象方法 registerExtensionProcessing 来实现的。
public function registerExtensionProcessing()
{
}
现在我们需要使用 "addShortcode()" 方法来注册我们的简码。 缩略图
此方法需要两个参数:a) 简码的名称 b) 每次使用简码时将被调用的回调函数。在我们的例子中,我们将它命名为 "Googlemap",该方法的签名如下
$this->shortcodes->addShortcode'googlemap', function ($attributes$content$tagName) use ($config) {
如前所述,由于我们使用了一个 "回调" 函数,我们可以使简码非常复杂和精美。但这也许将是下次的内容
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 '$width '" height="' $height '" src="' $src '&output=embed" >';

return 
$newContent;
});
}
}
在测试确认它工作后,我们就可以直接在任何新闻或发布模块的文章中使用简码 "[googlemap]" 来发布 Google 地图。当然,我们需要提供更多信息,所以它最终可能看起来像这样
[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中发布模块中此Shortcode的结果: 缩略图
接下来是什么? 我对XOOPS中的Shortcode非常兴奋,昨天我还尝试了几个其他的Shortcode:- Google图表 - 国家旗帜 - QR码 - 日期时间小部件 例如,要在任何内容中添加旗帜,我们现在只需放置以下Shortcode
[countryflag]
这将显示默认尺寸的默认旗帜(我将其设置为美国和64px),但您可以选择任何您想要的。标准旗帜大小为:16,32,64。或者您也可以手动指定您想要的旗帜大小和所属国家
[qrcode][countryflag size=64 country="CA"]
这将创建一个64像素长的加拿大国旗。国家通过标准两位字母国家代码选择,例如,US代表USA,FR代表法国,DE代表德国等。请注意,您也可以通过编程方式做同样的事情,最好的方法是安装XOOPS 2.6.0中的" Codex "模块,并查看XOOPS 2.6.0的新增功能。通过使用此Shortcode来创建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内部功能的Shortcode,例如当前页面的QR码
[qrcode]
,以及之前提到的国家旗帜: 缩略图
感谢Richard,XOOPS通过短代码实现了许多非常酷的功能。WordPress上有许多非常出色的短代码,您可以随时尝试将它们转换为XOOPS,并与我们分享。要了解更多关于如何创建短代码的信息,您可以这样做:a) 学习Richard重构的TextSanitizer类,它们本身基本上就是短代码;b) 学习来自其他CMS(如WordPress)的短代码,并尝试将它们转换为XOOPS。如果您感兴趣,我已经将昨天实验的五个短代码放在了我的GitHub仓库里,您可以随意Fork它们并贡献回来显然,得益于Richard在核心部分所做的所有激动人心的工作,以及Eduardo将RM Common Utilities合并到核心,XOOPS的下一个版本将会非常、非常酷! 加油XOOPS!