在我的文本中,用户可以输入看起来像这样的模块; [[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 :(得分: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 ) )
第一个子节点包含带括号的数组子节点(如果需要这些子节点),第二个子节点包含一系列内容....
这可以使用任意数量的引用。
答案 1 :(得分:0)
是的,这是一个很好的方法。