Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2011-03-13 15:44:39

fix
Membre
Inscription : 2005-01-20
Site Web

Permettre de spécifier le "alt" avec EntryFirstImage

Bonjour,

Sur le site sur lequel je travaille en ce moment, j'affiche des couvertures de livre en miniature sur la page d'accueil ainsi que sur les listes des billets. Ces images sont donc purement décoratives, et devraient donc avoir un alt="" (vide, donc) selon les recommandations en vigueur.

En revanche, sur la page d'un billet (post.html), j'affiche l'image de la couverture en plus grand : cette fois l'objectif est bien de pouvoir donner un aperçu de la couverture du livre. J'aurais donc besoin de pouvoir remplir l'attribut alt avec le nom de l'auteur et le titre du livre.

Ma question est donc la suivante : comment faire en sorte de pouvoir spécifier l'attribut "alt" pour la balise EntryFirstImage ? j'ai commencé à trifouiller le code de EntryFirstImageHelper dans inc/public/lib.tpl.context.php... mais ça me dépasse, et de loin.

Merci pour votre aide !

Hors ligne

#2 2011-03-13 16:14:44

Fix_x_xer
Membre
Lieu : Québec
Inscription : 2007-07-28

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Bonjour,

J'ai jeté un oeil au helper en question et de ce que j'en vois, il y a une expression régulière qui tente de trouver l'attribut alt alors j'imagine qu'il est peut-être possible d'ajouter alt="auteur..." dans la balise EntryFirstImage.

Je n'ai pas testé par contre. Si t'as une chance, reviens moi avec ça.

Hors ligne

#3 2011-03-13 16:45:28

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Je ne vois pas la différence entre les petites et les grandes images : ce sont à chaque fois des couvertures de livre, non ? Il me semble donc que l'attribut alt peut-être rempli (ou pas) de la même manière.

Le titre du livre et le nom de l'auteur me paraissent très bien comme texte alternatif, d'ailleurs ;)

Hors ligne

#4 2011-03-13 16:49:00

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Pour l'instant, j'ai dupliqué et modifié les deux fonctions incriminées dans le _public.php de mon thème, ce qui donne :

$core->tpl->addValue('EntryFirstImage', array('tplMyThemeAdditions', 'EntryFirstImage'));
$core->tpl->addValue('EntryFirstImageHelper', array('tplMyThemeAdditions', 'EntryFirstImageHelper'));

	public function EntryFirstImage($attr)
	{
		$size = !empty($attr['size']) ? $attr['size'] : '';
		$class = !empty($attr['class']) ? $attr['class'] : '';
		$with_category = !empty($attr['with_category']) ? 'true' : 'false';
		$alt = !empty($attr['alt']) ? $attr['alt'] : '';
		
		return "<?php echo context::EntryFirstImageHelper('".addslashes($size)."',".$with_category.",'".addslashes($class)."','".addslashes($alt)."'); ?>";
	}
	
	public static function EntryFirstImageHelper($size,$with_category,$class="",$myalt="")
	{
		if (!preg_match('/^sq|t|s|m|o$/',$size)) {
			$size = 's';
		}
		
		global $core, $_ctx;
		
		$p_url = $core->blog->settings->system->public_url;
		$p_site = preg_replace('#^(.+?//.+?)/(.*)$#','$1',$core->blog->url);
		$p_root = $core->blog->public_path;
		
		$pattern = '(?:'.preg_quote($p_site,'/').')?'.preg_quote($p_url,'/');
		$pattern = sprintf('/<img.+?src="%s(.*?\.(?:jpg|gif|png))"[^>]+/msu',$pattern);
		
		$src = '';
		$alt = '';
		
		# We first look in post content
		if ($_ctx->posts)
		{
			$subject = $_ctx->posts->post_excerpt_xhtml.$_ctx->posts->post_content_xhtml.$_ctx->posts->cat_desc;
			if (preg_match_all($pattern,$subject,$m) > 0)
			{
				foreach ($m[1] as $i => $img) {
					if (($src = self::ContentFirstImageLookup($p_root,$img,$size)) !== false) {
						$src = $p_url.(dirname($img) != '/' ? dirname($img) : '').'/'.$src;
						if (preg_match('/alt="([^"]+)"/',$m[0][$i],$malt)) {
							$alt = $malt[1];
						}
						break;
					}
				}
			}
		}
		
		# No src, look in category description if available
		if (!$src && $with_category && $_ctx->categories)
		{
			if (preg_match_all($pattern,$_ctx->categories->cat_desc,$m) > 0)
			{
				foreach ($m[1] as $i => $img) {
					if (($src = self::ContentFirstImageLookup($p_root,$img,$size)) !== false) {
						$src = $p_url.(dirname($img) != '/' ? dirname($img) : '').'/'.$src;
						if (preg_match('/alt="([^"]+)"/',$m[0][$i],$malt)) {
							$alt = $malt[1];
						}
						break;
					}
				}
			};
		}
		
		if ($myalt == 'none') { $alt = ''; } elseif (!empty($myalt)) { $alt = $myalt; }
		
		if ($src) {
			return '<img alt="'.$alt.'" src="'.$src.'" class="'.$class.'" />';
		}
	}

Néanmoins, c'est toujours la fonction de base de DC qui est appelée, et non ma fonction modifiée. J'ai tenté de remplacer le "context" de la ligne suivante :

return "<?php echo context::EntryFirstImageHelper('".addslashes($size)."',".$with_category.",'".addslashes($class)."','".addslashes($alt)."'); ?>";

par un "self" ou un "dcTemplate", mais cela me provoque une erreur "undefined method"...

Je n'arrive donc pas à faire en sorte que MA fonction EntryFirstImageHelper soit appelée par la fonction EntryFirstImage...

Un petit coup de pouce ? Merci d'avance.

Hors ligne

#5 2011-03-13 18:54:11

Kozlika
Modo dcTeam
Inscription : 2004-05-08
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Bonjour Fix,

Je ne sais pas dans quel but tu souhaites renseigner un alt dans ta balise img mais si c'est pour l'accessibilité ça ne se justifie pas : l'image ne donne pas d'information ni pour la petite ni pour la grande. On est bien dans les deux cas en présence d'une image décorative. (ça ne serait pas le cas si par exemple tu affichais les couvertures en galerie et que le lien sur l'image mène vers la critique du livre par exemple.)


La documentation : http://doc.dotclear.net/2.0/fulltoc
Le module de recherche du forum : http://www.dotclear.net/forum/search.php ?

Hors ligne

#6 2011-03-13 21:05:00

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Bonsoir,

Mon message ici faisait pourtant suite à une discussion intéressante sur le forum d'Alsacreations, d'où il ressortait, comme je le pense, qu'un lien contenant une image (c'est le cas sur mes pages post.html, par exemple ici) de la couverture d'un livre, et pointant vers la couverture en taille maxi n'est pas du tout à considérer comme une image décorative : son but est bien de fournir une information... sur la couverture du livre :)

Pas d'accord avec ça ?

Hors ligne

#7 2011-03-13 21:40:57

Kozlika
Modo dcTeam
Inscription : 2004-05-08
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Ah ben oui si je lis en diagonale aussi… OK donc puisque lien sur l'image, information indispensable du sujet de cette image pour que le visiteur comprenne sur quoi porte ce lien… Je retourne roupiller vu que je ne saurai pas t'aider sur le code ;-)


La documentation : http://doc.dotclear.net/2.0/fulltoc
Le module de recherche du forum : http://www.dotclear.net/forum/search.php ?

Hors ligne

#8 2011-03-13 22:03:27

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Effectivement je n'avais pas précisé dans mon message #1 qu'il y avait un lien sur l'image... Du coup ma question manquait effectivement de pertinence. Désolé.

Je reviens donc à mon problème : comment appeler MA fonction EntryFirstImageHelper depuis ma fonction EntryFirstImage dupliquée dans le fichier _public.php de mon thème ? (cf. le code en #4 ci-dessus)

Merci de votre aide !

Hors ligne

#9 2011-03-13 22:27:26

Fix_x_xer
Membre
Lieu : Québec
Inscription : 2007-07-28

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Dans le code mentionné ci-haut, les fonctions ne devraient-elles pas être incluses dans une classe? Et ce serait le nom de cette classe que tu appelerais au lieu de context lorsque tu veux appeler ta fonction.

Et de par ton code, je crois que ce devrait être tplMyThemeAdditions le nom de ta classe. Bon, j'ai jamais touché à ça dans un thème alors c'est possible que ce que je te dis, ça mène nul part.

Hors ligne

#10 2011-03-14 06:18:31

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Mes fonctions sont bien dans une classe, c'est un oubli de copier/coller :)

Ceci dit, cette solution ne fonctionne pas non plus :

Fatal error: Call to undefined method tplMyThemeAdditions::contentfirstimagelookup() in /mnt/137/sdb/f/8/sxjpl/dotclear-files/themes/biblio/_public.php on line 386

Hors ligne

#11 2011-03-15 22:25:54

Fix_x_xer
Membre
Lieu : Québec
Inscription : 2007-07-28

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Salut,
Si tu pouvais reposter le code de ta classe au complet (ou du moins les parties importantes), je pourrais continuer à t'aider. Autrement, je trouve ça assez difficile de te donner un coup de main pour l'instant... désolé!

Mais question d'essayer! Ta méthode contentfirstimagelookup devrait être une méthode statique à ta classe et la casse de ta méthode est importante (oui, je sais c'est la base... sans offense!).

A+

Hors ligne

#12 2011-03-16 10:25:08

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Le code de ma fonction est en entier dans mon message #4 (il manque juste la mention de la classe omise dans mon copier/coller). Merci !

Hors ligne

#13 2011-03-17 00:27:11

Fix_x_xer
Membre
Lieu : Québec
Inscription : 2007-07-28

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Bon dans ce cas, c'est pas possible d'utiliser la méthode self::ContentFirstImageLookup dans ton code puisque cette méthode la n'existe pas. Si tu veux réutiliser la méthode ContentFirstImageLookup, tu vas devoir changer le préfixe self:: par celui de la classe d'où le code provient. Ensuite, si ça te donne encore un undefined method, va sûrement falloir que tu inclus cette classe dans le haut de ton fichier (via un include ou un require). Autrement, c'est normal que le tout ne fonctionne pas.

Au-delà de ça, à moins que j'ai loopé un truc, je peux pas faire grand chose de plus.
Bonne chance!

Hors ligne

#14 2011-03-17 12:16:38

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

J'ai honte. J'avais mal lu le message d'erreur du #10 : j'ai cru que c'était encore une erreur à propos de la fonction à l'intérieur de mon _public.php, alors que l'erreur venait d'ailleurs. Désolé.

Bref.

La fonction ContentFirstImageLookup se trouve dans une classe nommée "context" (fichier lib.tpl.context.php). Si je remplace donc le "self::" dans mon code par "context::"... j'ai un nouveau message d'erreur :

"Fatal error: Call to private method context::contentfirstimagelookup() from context 'tplMyThemeAdditions' in /mnt/137/sdb/f/8/sxjpl/dotclear-files/themes/biblio/_public.php on line 432

Hors ligne

#15 2011-03-17 12:19:48

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Ceci dit, je me demandais s'il n'y avait pas possibilité d'obtenir ce que je voulais avec le plugin grumph de Dsls : gère-t-il l'attribut "alt" ?

Je l'ai installé, mais je dois mal m'y prendre. Y a-t-il moyen, avec ce plugin, de :
- filtrer les images d'un billet (par exemple, ne pas afficher la première image d'un billet en mode post) ;
- afficher et styler l'image "mise en réserve" par grumph en choisissant l'attribut "alt" que l'on veut ?

Merci de votre aide !

Hors ligne

#16 2011-03-21 18:57:48

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Après l'avoir installé et testé, le plugin Grumph pourrait convenir à mes besoins... à part sur un point : quelqu'un connaît-il un quelconque moyen de filtrer les images pour NE PAS les afficher en même temps que le contenu d'un billet ?

Hors ligne

#17 2011-03-22 06:58:11

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Une expression régulière sur la balise <img> devrait faire l'affaire

$core->tpl->addValue('myContentWithoutImages',array('myTpl','myContentWithoutImages'));

class myTpl {
public static function myContentWithoutImages()
	{
		$img_src_regexp = '/<img .*?src="(.+?)"/i';
                $f = $GLOBALS['core']->tpl->getFilters($attr);
		return '<?php echo '.sprintf($f,'preg_replace($img_src_regexp,"",$_ctx->posts->post_content_xhtml)').'; ?>';
		
	}
	
}

Pas testé mais c'est l'idée ;)

Hors ligne

#18 2011-03-22 07:08:34

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Merci beaucoup !

Hors ligne

#19 2011-03-22 07:47:44

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Juste un détail : ça ne marchera d'ailleurs que si les images ne sont pas des liens, sinon tu te retrouveras avec des balises <a></a> vides ;)

Hors ligne

#20 2011-03-22 23:21:47

adjaya
Membre
Lieu : Provence - Luberon
Inscription : 2006-09-05
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

amalgame a écrit :

Une expression régulière sur la balise <img> devrait faire l'affaire

$core->tpl->addValue('myContentWithoutImages',array('myTpl','myContentWithoutImages'));

class myTpl {
public static function myContentWithoutImages()
	{
		$img_src_regexp = '/<img .*?src="(.+?)"/i';
                $f = $GLOBALS['core']->tpl->getFilters($attr);
		return '<?php echo '.sprintf($f,'preg_replace($img_src_regexp,"",$_ctx->posts->post_content_xhtml)').'; ?>';
		
	}
	
}

Pas testé mais c'est l'idée ;)

Ben ca alors, amalgame qui fait de l'expression régulière, et sans filet en plus (même pas de test!!) et t'est encore stagiaire malgré tout ca!!! que d'injustice :))


Photo, Art et Création Numérique : http://benoit-grelier.photo7.fr/

Hors ligne

#21 2011-03-23 07:51:52

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

Merci de ton soutien adjaya, après 6 ans de stage je commençais à imaginer que je m'étais fait rouler dans la farine. C'est maintenant confirmé, et je file donc de ce pas au bureau du personnel pour demander une promotion et une augmentation... ça va barder.

C'est la lutt-eu final-eu !

Hors ligne

#22 2011-03-29 15:10:18

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Permettre de spécifier le "alt" avec EntryFirstImage

J'ai eu besoin de supprimer les balises image pour un projet, et la solution que j'avais proposée ne marche pas correctement. En effet, l'expression trouve l'attribut src et il est ensuite supprimé, mais pas le reste de la balise img.

Voici la ligne à modifier

$img_src_regexp = '/<img[^>]+\>/i';

Hors ligne

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map