2014-01-27 57 views
1

我開發了一個模板系統,用於搜索{tag}之類的標籤,並在加載時動態替換模板文件中的內容。如何搜索並替換兩次

什麼即時試圖做的就是這樣的{download='text for button'}

標籤下面是我的所有標籤如何開始

//Download button 
$download = '<a class="button">Download</a>'; 
$search = "{download}"; 
if (contains($string,$search)) 
    $string=str_ireplace($search,$download,$string); 

因此,儘管{下載}返回<a class="button">Download</a>這個{下載=「按鈕文本」}應該返回<a class="button">button text</a>

+0

想法是偉大的,但爲什麼重新發明輪子? – ex3v

+0

它很容易設置,用戶可以使用html/css基本創建自己的模板,但是使用這些標籤可以使某些事情變得相同。 –

回答

1

也許這個?

<?php 

    $str = '{download} button {download="hello"} {download=\'hey\'} assa {download="asa"}'; 

    $str = str_replace('{download}', '{download="Download"}', $str); 

    $str = preg_replace(
     '/\{download(\=\"(.*)\"|\=\'(.*)\'|)\}/siU', 
     '<a href="#" class="button">$2</a>', 
     $str); 

    echo $str; 

?> 
+0

我已經提供了一個完整的工作示例,因此只需將$ str替換爲您要「搜索」的字符串即可。 –

+0

我困惑於$ str = str_replace('{download}','{download =「Download」}',$ str);這是爲了什麼? –

+0

Johnson先生,如果您替換此行,該按鈕將永遠不會有默認文本。這是在做任何核心工作之前用{download =「Download」}替換任何{下載}代碼。 –

1
preg_match_all("/{download='(.*?)'}/", $string, $matches, PREG_SET_ORDER); 

foreach ($matches as $val) { 
    $string = str_replace("{download='" . $val[1] . "'}", "<a class=\"button\">" . $val[1] . "</a>", $string); 
} 

這應該工作。

例子: http://3v4l.org/cl1aI

1

嗯,這一個 - 爲ex3v說 - 似乎是對我來說就像「重新發明輪子」的問題有點過,但我還挺喜歡它,所以我周圍玩一點點,但沒有正則表達式,因爲我希望它是一個更通用的解決方案,它啓用了自定義屬性(但沒有空格作爲屬性值)。所以它結束了這樣的:

<?php 

function use_template($search,$replace,$string, $options=array()) { 

    $searchdata = explode(" ", $search); //{download, text='Fancy'} 
    $template = substr($searchdata[0],1); // download 


    for ($i = 1; $i < sizeof($searchdata);$i++) { 
     $attribute = explode("=", $searchdata[$i]); //$attribute[0] = "text"; $attribute[1] = "'Fancy'}" 
     if (endsWith($attribute[1],'}')) { 
      $options[$attribute[0]] = substr($attribute[1], 0, -1); 
     } else { 
      $options[$attribute[0]] = $attribute[1]; 
     } 
    } 

    $a = str_ireplace("{".$template."}",$replace,$string); // Hello, this is my {<a class="button">[text]</a>} button 
    foreach($options as $to_replace => $newval) { 
     $a = str_ireplace("[".$to_replace."]", $newval, $a); // Hello, this is my Fancy button 
    } 
    return $a; 
} 

function endsWith($haystack, $needle) 
{ 
    return $needle === "" || substr($haystack, -strlen($needle)) === $needle; 
} 

$download = '<a class="button" style="background-color: [color];">[text]</a>'; 
$search = "{download text='Fancy' color=red}"; 
$string = "Hello, this is my {download} button!"; 
$options = array("text" => "Download", "color" => "#000000"); 


$string= use_template($search,$download,$string,$options); 
echo $string; 
?> 
+0

這也是偉大的 –