使用Smarty和PHP变量

时间:2012-01-31 00:52:25

标签: php smarty

以下是该方案。

我在数据库中有文字,如下所示:

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正在按原样打印变量,而不是像往常一样运行变量。

请帮帮我。

2 个答案:

答案 0 :(得分:3)

替换它:

$smarty->assign(''.$foo.'', $match);

有了这个:

$smarty->assign(''.$foo.'', ${$foo});

答案 1 :(得分:0)

您正在使用正则表达式{(.+)}.+会“吃掉”它看到的所有内容,因此它会匹配:$name} {$index

你应该使用贪婪杀手:''/\\{(.+?)\\}/U''