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类。
目前我们有以下从 FilterAbstract 衍生的类
- Censor
- Clickable
- Quote
- SyntaxHighlight
- TextFilter
- Xss
以及以下从 ExtensionAbstract 衍生的类
- Flash
- Iframe
- Image
- Mms
- Mp3
- Rtsp
- SoundCloud
- UnorderedList
- Wiki
- Wmp
- XoopsCode
- YouTube
就我们的目的而言,我们将主要使用 ExtensionAbstract 类。现在让我们看看如何使用它来创建 Google Charts 和 Google Maps 的短代码(短代码详细信息请参阅这里)
但在我们进一步之前,我们来简要了解一下 短代码 短代码 并非与众不同,它们是你创建的用于重复执行某些活动的宏或脚本。它们可以是极其简单的,也可以是非常复杂的。其中一些是真正的代码片段,没有直接的交互,而另一些则相当复杂,具有帮助您选择选项的视觉GUI。还有不同的方法与短代码进行交互:a) 简单的没有属性的自定义代码,基本上是单个命令,例如我们的BB代码是简单的自定义代码,我们通过在文本周围放置 [ b ] 和 [ /b ] 来使文本加粗 b) 更复杂的带属性的简单代码,如Richard在上面展示的YouTube示例
[youtube url="JxS5E-kZc2s" width="640" height="385" /]
class Googlemap extends ExtensionAbstract
{
}
受保护的静态$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
];
public function registerExtensionProcessing()
{
}
此方法需要两个参数: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 = '
[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中的Shortcode非常兴奋,昨天我还尝试了几个其他的Shortcode:- Google图表 - 国家旗帜 - QR码 - 日期时间小部件 例如,要在任何内容中添加旗帜,我们现在只需放置以下Shortcode
[countryflag]
[qrcode][countryflag size=64 country="CA"]
[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!