Modification attribut alt dans un contenu

Résolu
thunderfear Messages postés 99 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 1 septembre 2010 - 26 nov. 2009 à 17:43
thunderfear Messages postés 99 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 1 septembre 2010 - 28 nov. 2009 à 13:09
Bonjour,

Je cale un peu pour un module que j'aimerai développer.

J'ai une variable qui contient du code html:

Exemple:
$content = "
 blabla 
   ";


J'aimerai "traiter" l'attribut alt de toutes les images de la variable.

Si l'attribut alt n'existe pas pour une image, je dois le créer.
Si l'attribut alt existe mais vide alors j'aimerai le remplir d'un texte.
Si l'attribut alt est rempli, on ne fais rien.

J'imagine que l'ont doit utiliser plusieurs expressions régulière mais je ne sais pas comment les faire.

Merci à ceux qui me donneront un petit coup de pouce.

4 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
27 nov. 2009 à 09:09
Salut,

Si tu as du XHTML et non une soupe de balise alors tu peux utiliser les divers bibliothèques de traitement des documents XML, par exemple SimpleXML, afin de parser le contenu de ta chaîne et te donner des moyens de plus haut niveau pour en manipuler le contenu. Voici par exemple une fonction récursive qui te permet de vérifier chaque élément et qui appel une autre fonction sur les éléments img afin de les traiter comme tu le souhaite :

<?php

function        img_action(SimpleXMLElement &$XmlNode)
{
  foreach ($XmlNode->attributes() as $name => $value)
    {
      if ($name 'alt' && $value '')
        {
          $XmlNode['img'] = 'bidule';
          return ;
        }
      elseif ($name == 'alt')
        return ;
    }
  $XmlNode->addAttribute('alt', 'truc');
}

function        edit_img(SimpleXMLElement $XmlNode)
{
  if (sizeof($XmlNode->children()) <= 0)
    return $XmlNode;
  foreach ($XmlNode->children() as $Child)
    {
      if ($Child->getName() == 'img')
        img_action($Child);
      else
        edit_img($Child);
    }
  return $XmlNode;
}

$str = '                                                                        

                                                                           
  Lorem ipsum dolor sit amet.

       
                                                   
  Sed ut perspiciatis unde omnis iste natus error 

  

';
$DataXml = new SimpleXMLElement($str, null);
$DataXml = edit_img($DataXml);
echo $DataXml->asXML(), "\n";
3
cyrhades Messages postés 23 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 22 juillet 2010
27 nov. 2009 à 11:31
ou en jquery :
$("img").each( function() { this.attr( { src: "x.jpg", alt: "x texte" } ) } )

En une seule ligne ^^ merci Jquery

Pour l'explication :
// on boucle sur toutes les balise img
$("img").each
// en se basant sur l'attribut ..
this.attr( )
//... sur l'attribut src (nom l'image en faite) on modifie l'attribut alt.
{ src: "x.jpg", alt: "x_texte" }

voila a toi d'adapter x.jpg et x_texte avec un tableau
Exemple :
image = new Array();
image['toto.jpg'] = 'Toto a la plage';
image['tarzan.jpg'] = 'Tarzan et chita ^^';

// peut être a revoir cette partie
$("img").each( function() { this.attr( { src: "x.jpg", alt: image[this.attr("src")] } ) } )
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
27 nov. 2009 à 12:42
Salut,

@cyrhades : Je ne crois pas qu'agir sur le DOM soit la bonne solution. Déjà parce que tout le monde n'a pas JavaScript d'activé (bon ok de nos jours ce n'est presque plus le cas), mais surtout parce que le principe même de fournir un document erroné avec un correctif a appliquer me semble assez malsain.
0
thunderfear Messages postés 99 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 1 septembre 2010
28 nov. 2009 à 13:09
Sympa le code javascript mais je devait intégrer ca dans un module en php.

Un grand merci à vous 2
0
Rejoignez-nous