2010-08-02 7 views
0

J'essaye d'analyser une vue avec BBCode, et cela fonctionne très bien. Mais il y a une caractéristique que je ne sais pas comment implémenter.preg_replace avec des vues dans Codeigniter, comment?

[box = test] doit être remplacé par $ this-> load-> view ('admin/news/test', '', true);

Ceci est mon code à ce jour:

$CI =& get_instance(); 
$view = preg_replace("'\[box=(.*?)\]'i", "\\1", $str); 

La chose est que \ 1 sera le nom de la vue que je veux charger. Idéalement, je veux faire quelque chose comme ceci:

$CI =& get_instance(); 
$str = preg_replace("'\[box=(.*?)\]'i", $CI->load->view('admin/news/'."\\1", '', true), $str); 
return $str; 

Alors, espérons que vous comprenez de cet exemple ce que je suis en train de faire. Mais je n'ai aucune idée de comment le faire vraiment?

grâce

Répondre

2

Vous pouvez essayer:

$str = preg_replace_callback("'\[box=(.*?)\]'i",'myCallBack',$str); 

function myCallBack($match) 
{ 
    $CI =& get_instance(); 
    return $CI->load->view('admin/news/'.$match[1], '', true); 
} 

modifier la douleur dans ces questions de rappel est toujours la portée de la fonction;

+0

au lieu de get_CI(), juste passer par référence comme il est dit dans le guide de l'utilisateur, comme : $ CI = & get_instance(); – Matthew

+0

On dirait que tu as raison, mais comme je ne savais pas quoi d'autre get_instance(), je me suis dit que je ferais mieux de rester prudent ;-) – mvds

+0

Je mets simplement $ CI = & get_instance() au dessus du retour déclaration et cela a fonctionné comme un charme. Tu es l'homme! Merci! –