以下是该方案。
我在数据库中有文字,如下所示:
blah blah blah blah blah {$name} {$index}
如您所见,它包含两个Smarty变量{$name}
和{$index}
现在我需要使用Smarty将值赋给变量。对于那些不了解Smarty的人来说,价值可以通过这种方式轻松分配:
$smarty->assign('name_of_the_variable', $variable);
问题是这个文本来自数据库,我不知道文本中会有哪些变量,所以我试图抽象代码执行以下操作:
function getPageContent($page) {
$smarty = new Smarty(); // initializing Smarty
//selecting the content and saving it into the $content variable
$q='SELECT * FROM pages_blocks WHERE Page="'.$page.'"';
$r=mysql_query($q) or die(mysql_error());
while($row = mysql_fetch_array($r)) {
$content = $row['Content'];
}
//defining variables
$name = "NAME";
$index = "INDEX";
//getting all the variables inside brackets {}
preg_match_all('/{(.+)}/U', $content, $matches);
//abstracting the code assigning values to the variables found
foreach ($matches[1] as $match) {
$foo = str_replace('$', '', $match); //removing the $ to give a name to smarty
$smarty->assign(''.$foo.'', $match); //final assignation of name and its variable
}
$smarty->display('string:'.$content); //displaying the final content
}
问题是最终内容如下:
blah blah blah blah blah $name $index
而不是
blah blah blah blah blah NAME INDEX
出了点问题。 Smarty正在按原样打印变量,而不是像往常一样运行变量。
请帮帮我。
答案 0 :(得分:3)
替换它:
$smarty->assign(''.$foo.'', $match);
有了这个:
$smarty->assign(''.$foo.'', ${$foo});
答案 1 :(得分:0)
您正在使用正则表达式{(.+)}
,.+
会“吃掉”它看到的所有内容,因此它会匹配:$name} {$index
。
你应该使用贪婪杀手:''/\\{(.+?)\\}/U''