Устаревший: preg_replace () в плагине Joomla

У меня проблема с одним сторонним компонентом для Joomla 3. К сожалению, я не являюсь продвинутым разработчиком php, и владелец компонента пока не поддерживает это, поэтому я полностью сам по себе =)

Заранее — я прочитал все связанные темы там и не смог сделать это правильно.

Моя проблема заключается в преобразовании этой строки:

return preg_replace('/\{([a-zA-Z_]+)\}/e', '$item->\\1', $this->rowtemplate);

с 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:

Существует правильное рабочее решение для Joomla 3 и Profiler от Harold Prins Extension (com_profiler) с PHP 5.5:

return preg_replace_callback(
'/\{([a-zA-Z_]+)\}/',
function ($match) use ($item) {
if (isset($item->{$match[1]})) {
return $item->{$match[1]};
}

return "";
},
$this->rowtemplate

);

Большое спасибо Маттео Тассинари за решение.

0

Решение

То, что вы хотите, должно выглядеть так:

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]