0

私のテキストでは、ユーザーは次のようなモジュールを入力できます。[[form:contact]]、モジュールとその名前を表します。[[module:name]

次のコードを使用して、これをテキストから撤回し、分割して、必要なデータベースから情報を取得し、置き換えます。

これが最善の方法ですか?それはうまく機能しますが、これが最も効率的な方法であるかどうかはわかりません。

ZendFrameworkを使用しています。

これはコードです:

$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;
4

2 に答える 2

1

必要に応じて、正規表現を使用できます。

$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 ) ) 

最初の子には、角かっこ付きの配列子として抽出が含まれます(必要な場合)。2番目の子には、コンテンツの配列が含まれます。

これは、必要な数の参照で機能します。

于 2010-11-09T11:34:29.617 に答える
0

はい、それはそれを行うための良い方法です。

于 2010-11-09T11:18:55.247 に答える