8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Voici mon problème :
- Je récupère d'un seul champ un contenu de page, qui ne contient que des textes et titres dans des <h2></h2> et <p></p>
- J'ai donc généré un sommaire en allant chercher tous les <h2> et en leur appliquant une valeur $i incrémenter vers des ancres (exemple : le premier titre dans le sommaire renvoie comme ceci vers l'ancre <option value="#1">le titre du h2</option>)
- Maintenant j'essaie dynamiquement de récupérer les h2 dans mon contenu, et de leur ajouter un <a name="$i"></a> devant.
Sauf que ça refuse de fonctionner ! Voici ce que j'ai essayé :


$i = 1;
$contenu = preg_replace("#<h2>(.*?)</h2>#Usie", "<a name="$i"></a><h2>", $contenu);
$i++;
echo $contenu;


Quelqu'un pourrait-il m'aider ? Bien sur si j'enlève le "e" de "Usie", ça fonctionne, sauf que le $i n'est plus interprété.
D'ailleurs pensez-vous qu'en résolvant ce problème les ancres des h2 vont s'incrémenter automatiquement ?

Merci d'avance !
Modifié par montoumes (11 Jul 2008 - 10:24)
Salut Heyoan,

j'ai tenté en me basant sur l'exemple de la doc officielle, mais je n'y comprend rien :


$contenu = $donnees['article_contenu']; 
										function parseTagsRecursive($contenu)
										{
										
										    $regex = '#\<h2>((?:[^[]|\</h2>))#';
										
										    if (is_array($contenu)) {
										        $contenu = '<a name="'.$contenu[1].'"</a><h2>';
										    }
										
										    return preg_replace_callback($regex, 'parseTagsRecursive', $contenu);
										}
										
										$output = parseTagsRecursive($contenu);
										
										echo $output;


Le résultat, ce sont tous mes titres H2 qui ont perdu leur première lettre, qui, elle, est devenue le nom de l'ancre ! <a name="H"></a> par exemple !!!


Le résultat ici : http://egypte.webou.net/new/index.php?section=ter&article=1

Peux tu m'aider ?
Tu pourrais essayer quelque chose comme ça :
<?php
$contenu = file_get_contents('monfichier.html');

// Fonction de callback
function incrementation($matches)
{
  global $index;
  $index++;
  $ancre = 'ancre'.$index;
  return '<a href="#'.$ancre.'" name="'.$ancre.'" id="'.$ancre.'"></a><h2>'.$matches[1].'</h2>';
}

$regex = '#<h2>(.*)</h2>#';
echo preg_replace_callback(
            $regex,
            "incrementation",
            $contenu);
?>

A noter que le nom des ancres sera sous la forme ancre333.