Поместите теги вокруг части строки в Smarty

Я вытащил свои струны из MySQL база данных. Пример строки:

'
{something}Lorem ipsum{/something} dolor sit amet, consectetur adipiscing elit.
Scrupulum, inquam, abeunti;
{blablabla}Illa tamen simplicia{blablabla}, vestra versuta.
Non semper, inquam; Sed mehercule pergrata mihi oratio tua.
Stoici scilicet. Scrupulum, inquam, abeunti;
'

В php я присваиваю строку переменной Smarty следующим образом:

$smarty->assign('homePageText', $string);

Теперь я хочу сделать что-то подобное в шаблоне:

{$homePageText}
{something}
<a href="http://www.domain.com/" class="foo">{$}</a>
{/something}
{blablabla}
<b class="bar"><i>{$}</i></b>
{/blablabla}
{/$homePageText}

Таким образом, строка изменится на это:

'
<a href="http://www.domain.com/" class="foo">Lorem ipsum</a> dolor sit amet, consectetur adipiscing elit.
Scrupulum, inquam, abeunti;
<b class="bar"><i>Illa tamen simplicia</i></b>, vestra versuta.
Non semper, inquam; Sed mehercule pergrata mihi oratio tua.
Stoici scilicet. Scrupulum, inquam, abeunti;
'

Чтобы вы могли размещать теги вокруг частей переменной в шаблоне Smarty. Есть ли такая функция в Smarty 3.0? Или как я могу встроить это в Smarty в PHP 5.4? Я хочу как можно меньше php-кода в моих шаблонах. Так же {something}<tag>{$}</tag>{/something} часть не должна быть в файлах php, так как на странице будет несколько шаблонов

0

Решение

Я использую простую replace модификатор в похожих настройках. Но я предполагаю, что этот подход не очень элегантный и не гибкий. В любом случае строка в моей базе данных будет выглядеть так:

'%something1%Lorem ipsum%something2% dolor sit amet, consectetur adipiscing elit.
Scrupulum, inquam, abeunti;
%blablabla1%Illa tamen simplicia%blablabla2%, vestra versuta.
Non semper, inquam; Sed mehercule pergrata mihi oratio tua.
Stoici scilicet. Scrupulum, inquam, abeunti;'

И код в шаблоне будет выглядеть так (удалите разрывы строк!):

{$homePageText|replace:'%something1%':'<a href="http://www.domain.com/" class="foo">'
|replace:'%something2%':'</a>'
|replace:'%blablabla1%':'<b class="bar"><i>'
|replace:'%blablabla2%':'</i></b>'
}

Я использую это в сценарии, где переводы происходят из таблицы базы данных, но некоторые HTML-разметки или URL-адреса жестко закодированы в шаблонах.

кстати: вы могли бы использовать regex_replace вставить открывающий и закрывающий тег за один шаг, но это не улучшает читаемость …

|regex_replace:'/%something1%(.*)%something2%/':'<a href="http://www.domain.com/" class="foo">\\1</a>'
1

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

Я добавил плагин для Smarty:

class SmartyPlugins {

public static function addTags($string, $search, $openingTag, $closingTag) {
return str_replace(
'{/' . $search . '}',
$closingTag,
str_replace(
'{' . $search . '}',
$openingTag,
$string
)
);
}
}

//register the plugin
$smarty->registerPlugin('modifier', 'addTags', array('SmartyPlugins', 'addTags'));

Теперь я могу сделать это в шаблоне:

{$var|addTags:'a':'<a href="http://domain.com">':'</a>'} //changes "Test {a}blablabla{/a} something" to "Test <a href="http://domain.com">blablabla</a> something"
0

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