In my text the user can input modules which look like this; [[form:contact]]
, representing a module and its name; [[module:name]
I use the following code to retract this from the text, and split it, get the information from the database I want and replace it.
Is this the best way? It works good, but I'm not sure if this is the most efficient way, and was wondering wha开发者_开发知识库y you guys would think of it...
I'm working with the Zend Framework.
This is the code:
$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;
You could use a regular expression- depending on your needs:
$pattern="/\[\[(.*?)\]\]/";
$string="some string with a [[module]] in it, and [[another]] here";
$match=preg_match_all($pattern, $string, $matches);
print_r($matches);
Would give an array of all the modules/identifiers:
Array ( [0] => Array ( [0] => [[module]] [1] => [[another]] ) [1] => Array ( [0] => module [1] => another ) )
The first child includes the extracts as array children with the brackets (if you need these) the second child contains an array of the contents....
This would work with as many references as you wish.
Yes, it's a good way to do it.
精彩评论