thunderfear
Messages postés99Date d'inscriptionlundi 8 septembre 2003StatutMembreDernière intervention 1 septembre 2010
-
26 nov. 2009 à 17:43
thunderfear
Messages postés99Date d'inscriptionlundi 8 septembre 2003StatutMembreDerniè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.
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 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";
cyrhades
Messages postés23Date d'inscriptionsamedi 21 novembre 2009StatutMembreDernière intervention22 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")] } ) } )
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 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.