【问题标题】:Joomla 3 replace text plugin using preg replace not workingJoomla 3使用preg替换替换文本插件不起作用
【发布时间】:2014-10-26 20:57:44
【问题描述】:

我正在关注有关 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>example@packtpub.com</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 分钟使其预先格式化但似乎没用,但我确认没关系,将所有文件包含在我的插件中

【问题讨论】:

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


    【解决方案1】:

    我认为问题在于您正在从 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 之外的任何数据。

    【讨论】:

    • 不客气。如果我的回答确实解决了问题,您应该将其标记为已关闭,以供该问题的未来读者使用,我将不胜感激! ;)
    猜你喜欢
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2012-01-26
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    相关资源
    最近更新 更多