已弃用:Joomla 插件中的 preg_replace()
Deprecated: preg_replace() in Joomla Plugin
我有一个关于 Joomla 3 的第 3 方组件的问题。不幸的是我不是高级 php 开发人员并且组件所有者现在不支持这个,所以我完全靠我自己=)
提前 - 我已经阅读了那里的所有相关主题,但无法以正确的方式完成。
我的问题是转换这一行:
return preg_replace('/\{([a-zA-Z_]+)\}/e', '$item->\1', $this->rowtemplate);
with preg_replace_callback(),因为在 php 5.5 /e 参数中已弃用。
非常感谢。
编辑:
还有完整的代码部分:
public function loadRowtemplate ($item)
{
$table = $this->params->get('table');
if(!$this->rowtemplate) {
$rowtemplate = $table['row'][0] ? "<td><p>" . nl2br($table['row'][0]) . "</p></td>" : "";
$rowtemplate .= $table['row'][1] ? "<td><p>" . nl2br($table['row'][1]) . "</p></td>" : "";
$rowtemplate .= $table['row'][2] ? "<td><p>" . nl2br($table['row'][2]) . "</p></td>" : "";
$rowtemplate .= $table['row'][3] ? "<td><p>" . nl2br($table['row'][3]) . "</p></td>" : "";
$rowtemplate .= $table['row'][4] ? "<td><p>" . nl2br($table['row'][4]) . "</p></td>" : "";
$this->rowtemplate = str_replace(",", "<br/>", $rowtemplate);
}
**return preg_replace('/\{([a-zA-Z_]+)\}/e', '$item->\1', $this->rowtemplate);**
}
编辑 2:
Harold Prins Extension (com_profiler) 和 PHP 5.5:
为 Joomla 3 和 Profiler 提供了正确的工作解决方案
return preg_replace_callback(
'/\{([a-zA-Z_]+)\}/',
function ($match) use ($item) {
if (isset($item->{$match[1]})) {
return $item->{$match[1]};
}
return "";
},
$this->rowtemplate
);
非常感谢 Matteo Tassinari 的解决方案。
你想要的应该是这样的:
return preg_replace_callback(
'/\{([a-zA-Z_]+)\}/',
function ($match) use ($item) {
if (isset($item->{$match[1]})) {
return $item->{$match[1]};
}
return "";
},
$this->rowtemplate
);
另请参阅函数本身的文档:http://php.net/manual/en/function.preg-replace-callback.php
我有一个关于 Joomla 3 的第 3 方组件的问题。不幸的是我不是高级 php 开发人员并且组件所有者现在不支持这个,所以我完全靠我自己=)
提前 - 我已经阅读了那里的所有相关主题,但无法以正确的方式完成。
我的问题是转换这一行:
return preg_replace('/\{([a-zA-Z_]+)\}/e', '$item->\1', $this->rowtemplate);
with preg_replace_callback(),因为在 php 5.5 /e 参数中已弃用。
非常感谢。
编辑:
还有完整的代码部分:
public function loadRowtemplate ($item)
{
$table = $this->params->get('table');
if(!$this->rowtemplate) {
$rowtemplate = $table['row'][0] ? "<td><p>" . nl2br($table['row'][0]) . "</p></td>" : "";
$rowtemplate .= $table['row'][1] ? "<td><p>" . nl2br($table['row'][1]) . "</p></td>" : "";
$rowtemplate .= $table['row'][2] ? "<td><p>" . nl2br($table['row'][2]) . "</p></td>" : "";
$rowtemplate .= $table['row'][3] ? "<td><p>" . nl2br($table['row'][3]) . "</p></td>" : "";
$rowtemplate .= $table['row'][4] ? "<td><p>" . nl2br($table['row'][4]) . "</p></td>" : "";
$this->rowtemplate = str_replace(",", "<br/>", $rowtemplate);
}
**return preg_replace('/\{([a-zA-Z_]+)\}/e', '$item->\1', $this->rowtemplate);**
}
编辑 2:
Harold Prins Extension (com_profiler) 和 PHP 5.5:
为 Joomla 3 和 Profiler 提供了正确的工作解决方案return preg_replace_callback(
'/\{([a-zA-Z_]+)\}/',
function ($match) use ($item) {
if (isset($item->{$match[1]})) {
return $item->{$match[1]};
}
return "";
},
$this->rowtemplate
);
非常感谢 Matteo Tassinari 的解决方案。
你想要的应该是这样的:
return preg_replace_callback(
'/\{([a-zA-Z_]+)\}/',
function ($match) use ($item) {
if (isset($item->{$match[1]})) {
return $item->{$match[1]};
}
return "";
},
$this->rowtemplate
);
另请参阅函数本身的文档:http://php.net/manual/en/function.preg-replace-callback.php