Est-ce la meilleure / bonne façon de remplacer une étiquette?
-
29-09-2019 - |
Question
Dans mon texte, les modules d'entrée de boîte utilisateur qui ressemblent à ceci; [[form:contact]]
, ce qui représente un module et son nom; [[module:name]
J'utilise le code suivant à me rétracter du texte, et le diviser, obtenir les informations de la base de données que je veux et le remplacer.
Est-ce la meilleure façon? Il fonctionne bien, mais je ne suis pas sûr que ce soit la façon la plus efficace, et je me demandais whay les gars penseraient ...
Je travaille avec le Zend Framework.
Voici le 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;
La solution
Oui, il est une bonne façon de le faire.
Autres conseils
Vous pouvez utiliser une expression- régulière en fonction de vos besoins:
$pattern="/\[\[(.*?)\]\]/";
$string="some string with a [[module]] in it, and [[another]] here";
$match=preg_match_all($pattern, $string, $matches);
print_r($matches);
donnerait un tableau de tous les modules / identifiants:
Array ( [0] => Array ( [0] => [[module]] [1] => [[another]] ) [1] => Array ( [0] => module [1] => another ) )
Le premier enfant comprend les extraits que les enfants de tableau avec les supports (si vous avez besoin de ces) le deuxième enfant contient un tableau du contenu ....
travaillerait avec autant de références que vous le souhaitez.