plugins - Joomla 3 替换文本插件使用 preg 替换不起作用

标签 plugins joomla preg-replace joomla3.0 joomla-extensions

我正在关注有关 joomla 3 扩展开发的教程。我正在使用 Joomla 3.2.4 我有一个名为 clicktocall 的插件,它可以使所有电话号码文本显示为链接。 电话号码格式为 XXXX-XXXX 或 XXXX XXXX,X 为数字。我想将任何电话号码显示为“>” 该方法使用模式作为通过链接标记替换任何与模式匹配的文本

我安装并启用了该插件 我在电子书中的教程之后做到了这一点,在书中一切都很顺利,但在我的网站上,在我查看一篇包含电话号码文本的文章后,没有任何反应。该插件无法正常工作。

我的代码: clicktocall.php

定义('_JEXEC')或死亡;

jimport('joomla.plugin.plugin');

类 plgContentClicktocall 扩展 JPlugin {

function plgContentClicktocall(&$subject, $params) {
    parent::__construct($subject, $params);
}

public function onContentPrepare($context, &$row, &$params, $page = 0) {
    //don't run this when the content is indexing
    if ($context == 'com_finder.indexer') {
        return true;
    }
    if (is_object($row)) {
        echo $row->text;
        return $this->clickToCall($row->text, $params);
    }
    return $this->clickToCall($row, $params);
}

protected function clickToCall(&$text, &$params) {
    // matches 4 numbers followed by an optional hyphen or space, 
    // then followed by 4 numbers.
    // phone number is in the form XXXX-XXXX or XXXX XXXX
    $pattern = '/(\W[0-9]{4})-? ?(\W[0-9]{4})/';
    $replacement = '<a href="tel:$1$2">$1$2</a>';
    $text = preg_replace($pattern, $replacement, $text);
    return true;
}

}

clicktocall.xml

<?xml version="1.0" encoding="UTF-8"?>
<extension
version="3.0"
type="plugin"
group="content"
method="upgrade">
<name>Content - Click To Call</name>
<author>Tim Plummer</author>
<creationDate>April 2013</creationDate>
<copyright>Copyright (C) 2013 Packt Publishing. All rights  
reserved.</copyright>
<license> http://www.gnu.org/licenses/gpl-3.0.html</license>
<authorEmail><a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f99c81989489959cb989989a928d898c9bd79a9694" rel="noreferrer noopener nofollow">[email protected]</a></authorEmail>
<authorUrl>http://packtpub.com</authorUrl>
<version>1.0.0</version>
<description>This plugin will replace phone numbers with click  
to call links. Requires Joomla! 3.0 or greater.
Don't forget to publish this plugin!
</description>
<files>
<filename plugin="clicktocall">clicktocall.php</filename>
<filename>index.html</filename>
</files>
</extension>

index.html:仅空白标签

对 XML 感到抱歉,我尝试了 10 分钟对其进行预格式化,但似乎没用,但我确认没问题,已将所有文件包含在我的插件中

最佳答案

我认为问题是您正在从 onContentPrepare() 方法内的 click2Call() 方法返回值。尝试像这样重新格式化:

public function onContentPrepare($context, &$row, &$params, $page = 0) {
    //don't run this when the content is indexing
    if ($context == 'com_finder.indexer') {
        return true;
    }
    if (is_object($row)) {
        echo $row->text;
        $this->clickToCall($row->text, $params);
    } else {
        $this->clickToCall($row, $params);
    }

    return true;
}

由于引用了行变量,因此您对行数据所做的任何更改都会影响实际数据。因此,不需要在方法末尾返回 true 之外返回任何数据。

关于plugins - Joomla 3 替换文本插件使用 preg 替换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626011/

相关文章:

mysql - VirtueMart 搜索错误

html - 在手机和平​​板电脑上隐藏页脚

php - 删除/过滤数组元素中的字符和/或单词

php - TYPO3:数据未发布到要上传的大于 1.5 KB 的选定文件上

javascript - 如何设置这个自定义滚动插件?

joomla - 在 joomla 中返回上一页

php - 除了带有远程链接的 anchor 之外,我如何去除标签?

php - 有趣的 PHP 正则表达式 (preg_replace)

java - struts2插件如何工作

php - 确定插件中的 Joomla 版本