2010-05-13 5 views
0

J'ai un plugin Joomla (pas important dans ce contexte), qui est conçu pour prendre une entrée avec un chargement de nombres (dans un paragraphe de texte) et les remplacer par une série de s.Remplacer des valeurs using preg_replace

Mon problème est que je dois faire un preg_replace sur mon article $-> texte, mais je ne sais pas comment appliquer ensuite les changements aux termes correspondants. J'ai vu le preg_replace_callback, mais je ne sais pas comment je peux appeler cela dans une fonction.

function onPrepareContent(&$article, &$params, $limitstart) 
    { 
     global $mainframe; 
     // define the regular expression 
     $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s"; 
     if(isset($article->text)){ 
      preg_match($pattern, $article->text, $matches); 
      $numbers = explode("," , $matches[1]); 
      foreach ($numbers as $number) { 
       echo "<div class='number'><span>" . $number . "</span></div>"; 
      } 
     }else{ 
      $article->text = 'No numbers'; 
     } 
     return true; 
    } 

CODE MODIFIÉ:

function onPrepareContent(&$article, &$params, $limitstart) 
    { 
     global $mainframe; 
     // define the regular expression 
     $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s"; 
     if(isset($article->text)){ 
      preg_match($pattern, $article->text, $matches); 
      $numbers = explode("," , $matches[1]); 
      foreach ($numbers as $number) { 
       $numberlist[] = "<div class='number'><span>" . $number . "</span></div>"; 
      } 
      $numberlist = implode("", $numberlist); 
      $article->text = preg_replace($pattern, $numberlist, $article->text); 

     }else{ 
      $article->text = 'No numbers'; 
     } 
     return true; 
    } 
+0

Je l'ai utilisé cette fonction avant que je puisse vous aider, mais vous devez me expliquer mieux la question – mck89

+0

Excuses les gars, comme je l'ai relu, je me demandais si cela avait du sens. Je l'ai depuis réécrit à l'effet désiré, mais il semble lourd. Le résultat souhaité est: 1) Trouver le terme {lotterynumbers} dans le texte 2) Extraire les numéros (csv) et envelopper un div autour de chacun 3) réinjecter dans article- de $> Texte Je J'ai placé mon code modifié dans la question – Jeepstone

+0

Pourquoi la fonction modifiée ne fonctionne pas? Il semble ok. – mck89

Répondre

1
function onPrepareContent(&$article, &$params, $limitstart) 
{ 
    global $mainframe; 
    // define the regular expression 
    $pattern = "#{lotterynumbers}(.*?){/lotterynumbers}#s"; 
    if(isset($article->text)){ 
     $article->text=preg_replace_callback($pattern,create_function('$match','$init="<div class=\'number\'><span>";$out="</span></div>"; return $init.implode($out.$init,explode(",",$match[1])).$out;'),$article->text); 

    }else{ 
     $article->text = 'No numbers'; 
    } 
    return true; 
} 

Je n'ai pas testé, mais il devrait fonctionner

+0

Merci mck89. Je vous ai crédité de la réponse, bien que les deux méthodes fonctionnent. C'est un cas de maintenabilité/lisibilité vs solution technique. Utile pour référence dans les deux cas. Pete – Jeepstone