2010-11-09 56 views
0

在我的文本中,用戶可以輸入看起來像這樣的模塊; [[form:contact]],代表模塊及其名稱; [[module:name]這是替換標籤的最佳方式嗎?

我使用下面的代碼從文本中撤消它,並將其拆分,從我想要的數據庫中獲取信息並將其替換。

這是最好的方法嗎?它工作的很好,但我不確定這是否是最有效的方式,並且想知道你們是否會想到它...

我正在使用Zend Framework。

這是代碼:

$start = strpos($this->view->page->text, "[["); 
$end = strpos($this->view->page->text, "]]"); 
$length = $end-$start+2; 

$getModuleTag = substr($this->view->page->text, $start, $length); 
$length = $end-$start-2; 
$removeTags = substr($getModuleTag, 2, $length); 

$split = strpos($removeTags, ":"); 

$GetModuleSort = substr($removeTags, 0, $split); 
$GetModuleName = substr($removeTags, $split+1); 

// Get the wanted data from the database 
switch($GetModuleSort) 
{ 
    case 'form': 
     $this->result = $this->formsService->GetFormByName($GetModuleName); 
     $replaceTag = $this->result->elements; 
    break; 
} 

// TEST OUTPUT 
$final = str_replace($getModuleTag, $replaceTag, $this->view->page->text); 
$this->view->finalOutput = $final; 

回答

0

是的,這是應該做的好方法。

+0

但是,它是否適用於多個模塊定義? – AndreKR 2010-11-09 11:19:05

+0

我想不是,我還沒有嘗試過,但我想通過只添加一個模塊來限制用戶,這樣他們就不能創建充滿模塊的不合邏輯的雜亂頁面,而這些頁面之間沒有任何關係 – 2010-11-09 11:20:40

+0

然後它就是在性能方面是一個好方法,但是有更少代碼的方法。 – AndreKR 2010-11-09 11:23:18

1

你可以使用一個普通expression-根據您的需要:

$pattern="/\[\[(.*?)\]\]/"; 
$string="some string with a [[module]] in it, and [[another]] here"; 
$match=preg_match_all($pattern, $string, $matches); 
print_r($matches); 

會給出所有的模塊/標識符數組:

Array ([0] => Array ([0] => [[module]] [1] => [[another]]) [1] => Array ([0] => module [1] => another)) 

第一個子包括提取物作爲陣列的孩子與括號(如果您需要這些)第二個孩子包含內容的數組....

這將工作與你想的儘可能多的引用。

+0

奧克,謝謝。事實上,它可以與多個參考一起工作,這對未來很有意義。我想知道的是,哪種方式在性能上更好? – 2010-11-12 15:57:48

相關問題