2012-01-31 11 views
1

ここにシナリオがあります。SmartyとPHP変数の操作

私はこのようになりますDB内のテキストを持っている:あなたは、2つのSmarty変数{$name}{$index}

が含まれて見ることができるとして今、私はSmartyの持つ変数に値を割り当てる必要が

blah blah blah blah blah {$name} {$index} 

。 Smartyのを知らない人のために、値が簡単にこの方法を割り当てることができます。

$smarty->assign('name_of_the_variable', $variable); 

問題は、このテキストはDBから来ている、と私はテキストになりますどの変数かわからないので、私ということです

blah blah blah blah blah $name $index 

代わりの

:問題は、最終的なコンテンツがどのように見えるということです

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 

何かが間違っています。 Smartyは、以前のように実行する代わりに、変数をそのまま印刷します。

私を助けてください。

+0

を私は($マッチ)evalにも試みたが、まったく運を持ちます。 –

+1

スマートに使用しないでください。 PHPはすでに強力なテンプレートエンジンです – dynamic

+0

良い助言。しかし、それは現時点で私を助けてくれていません。私はちょうどあなたがyes123何らかの特定の理由@ \\ –

答えて

0

regexp {(.+)}を使用しています。.+は、見ているすべてを「食べる」ので、一致する:$name} {$indexです。

あなたは貪欲なキラーを使用する必要があります。''/\\{(.+?)\\}/U''

+0

を作った理由です知っている – dynamic

+0

をdoulbeべきではありませんコメント – Vyktor

3

がこれを置き換えます。これにより

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

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

IT WORKED !!!!!! –

+0

なぜですか?なにが問題だったの?私は好奇心が強いです –

+0

'eval'は別の変数名に基づいて変数をロードする正しい方法ではありません。 '$ {...}'は方法です。ここで、 "..."は補間を伴う文字列のようなものなので、そこに他の変数を入れることができます。 –