Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/05/2007, 20h15   #1
Membre du Club
 
Avatar de Lost In Translation
 
Raphaël Deschler
Inscription : mai 2007
Messages : 166
Détails du profil
Informations personnelles :
Nom : Raphaël Deschler
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2007
Messages : 166
Points : 55
Points : 55
Par défaut Problème de str_replace

Bonsoir, j'ai un soucis... enfin vous vous en doutez surement.

Je voudrais dans une variable contenant un "contenu" remplacer touts les

"<!--ICI OBJETLUGIN=1 -->" par un include.

exemple : remplacer <!--ICI OBJETLUGIN=1 --> par include('plugin/inscription/inscription.php');

Voici le code que j'ai fais... mais il ne semble pas marcher, quelqu'un aurait une solution plus simple que la mienne ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
/*GESTION DES OBJETS*/
 
//si PLUGIN=4 ALORS $e[0] => PLUGIN et $e[1] => id du plugin dans bdd
  public function getIdAndTypeObjet($objet)
  {
    $e = explode("=",$objet);
    return $e;
  }
 
//$this->balises['objet'][0] c'est <!--ICI OBJET: et $this->balises['objet'][1] c'est -->
  public function getObjetsDansContenu($contenu)
  {
    $nbOccurences = preg_match_all('#'.$this->balises['objet'][0].'(.*)'.$this->balises['objet'][1].'#Uis', $contenu, $m); 
    if ($nbOccurences > 0) 
    {  
      for ($i = 0; $i < $nbOccurences; $i++)
      {
        $obj = $this->getIdAndTypeObjet($m[1][$i]);
        $this->objets[] = $obj[1];//mets dans le tableau objet, l'ID de l'objet
      }      
      return $this->objets;
    }
    else
      return false;
  }
 
  public function parseObjets($contenu, DB $DB)
  {
    $objetArray = $this->getObjetsDansContenu($contenu);
 
    $i = 0;
    while ($i < count($objetArray))
    {
      $this->objetInfos = $DB->getInfosObjet($objetArray[$i]);//recupere les infos en bdd de l'objets
 
      if($this->objetInfos['TypeObjet_Id'] == 1)//c'est un plugin
      {
        $replace = "include_once('".$this->objetInfos[0]['Objets_Parametre'].";')";
        $contenu = str_replace('#'.$this->balises['objet'][0].'PLUGIN='.$objetArray[$i].$this->balises['objet'][1].'#Uis',$replace,$contenu); 
      }
 
 
      $i++;
    }
 
    return $contenu;
  }
voilà mon code de test (je ne mets pas les instanciations de classe et tout le tralala
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
//les variables
$langue = $Moteur->returnLangue($User);
 
//DEBUT
 
$article = $Moteur->getArticle('4', $langue, $DB);
 
$test = $Moteur->getObjetsDansContenu($article['ArticleAvoirLangue_Contenu']);
 
$content = $Moteur->parseObjets($article['ArticleAvoirLangue_Contenu'],$DB);
//$article['ArticleAvoirLangue_Contenu'] => dans la bdd = <!--ICI OBJET:PLUGIN=1--> test blabla <!--ICI OBJET:IMAGE=2-->
 
echo $content;
 
 
print_r($test);
 
//FIN
Voilà le rendu (code source html)

Citation:
<!--ICI OBJETLUGIN=1--> test blabla <!--ICI OBJET:IMAGE=2-->Array
(
[0] => 1
[1] => 2
)

Merci de votre aide
Lost In Translation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2007, 10h36   #2
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
J'espere que 1) Sa fonctionne et 2) C'est ce que tu veux :

La fonction :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function parseObjets($match)
{
	global $DB; // On récupère la variable DB des parents de la fonction (en fait, de celles qui l'ont appelés)
 
	list($name, $value) = explode($match[1], '=');
	$this->objetInfos = $DB->getInfosObjet($value);
 
	if($this->objetInfos['TypeObjet_Id'] == 1)//c'est un plugin
	{
		$replace = "include_once('".$this->objetInfos[0]['Objets_Parametre'].";')";
	}
 
    return $replace;
}

L'appel :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//les variables
$langue = $Moteur->returnLangue($User);
 
//DEBUT
 
$article = $Moteur->getArticle('4', $langue, $DB);
 
$content = preg_replace_callback('#'.$this->balises['objet'][0].'(.*)'.$this->balises['objet'][1].'#Uis', array($this, 'parseObjets'), $article['ArticleAvoirLangue_Contenu']);
 
//$article['ArticleAvoirLangue_Contenu'] => dans la bdd = <!--ICI OBJET:PLUGIN=1--> test blabla <!--ICI OBJET:IMAGE=2-->
 
echo $content;
 
print_r($test);
 
//FIN
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h35.


 
 
 
 
Partenaires

Hébergement Web