0

在我的文本中,用户可以输入如下所示的模块;[[form:contact]],代表一个模块及其名称;[[module:name]

我使用以下代码从文本中收回它,然后拆分它,从我想要的数据库中获取信息并替换它。

这是最好的方法吗?它工作得很好,但我不确定这是否是最有效的方法,并且想知道你们会怎么想......

我正在使用 Zend 框架。

这是代码:

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

第一个孩子将提取物包含为带有括号的数组孩子(如果您需要这些),第二个孩子包含一个内容数组...。

这将适用于您希望的尽可能多的引用。

于 2010-11-09T11:34:29.617 回答
0

是的,这是一个很好的方法。

于 2010-11-09T11:18:55.247 回答