2010-11-09 26 views
0

Dans mon texte, l'utilisateur peut entrer des modules qui ressemblent à ceci; [[form:contact]], représentant un module et son nom; [[module:name]Est-ce la meilleure façon de remplacer une étiquette?

J'utilise le code suivant pour le retirer du texte, et le scinder, obtenir les informations de la base de données que je veux et les remplacer.

Est-ce la meilleure façon? Cela fonctionne bien, mais je ne suis pas sûr si c'est le moyen le plus efficace, et je me demandais whay vous y penseriez ...

Je travaille avec 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; 

Répondre

0

Oui, c'est une bonne façon de le faire.

+0

Cependant, fonctionne-t-il avec plusieurs définitions de modules? – AndreKR

+0

Je suppose que non, je ne l'ai pas encore essayé, mais je pense à limiter l'utilisateur en ajoutant un seul module afin qu'ils ne puissent pas créer des pages désordonnées pleines de modules qui n'ont rien à voir –

+0

Ensuite c'est un bon moyen en termes de performance, mais il existe des moyens avec moins de code. – AndreKR

1

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 parenthèses (si vous en avez besoin) le deuxième enfant contient un tableau du contenu ....

Cela fonctionnerait avec autant de références que vous le souhaitez.

+0

Oke, merci. Le fait qu'il puisse fonctionner avec plusieurs références est quelque chose d'intéressant pour l'avenir. Ce que je veux savoir, c'est quelle est la meilleure performance? –