我正在关注有关 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/