Dotclear

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

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2011-10-19 09:39:19

patidou
Membre
Inscription : 2004-11-14
Site Web

Récupérer l'url de la première image

Bonjour,

Il existe une fonction qui renvoie le code html pour la première image, mais est-il possible de récupérer juste l'url?

Merci d'avance.

Patidou

Dernière modification par patidou (2011-10-19 09:39:44)


«Quand j'étais petit, je voulais être maître du monde. Maintenant que je suis grand, j'arrive à peine à être maître de moi-même.» Le Chat/Philippe Geluk.
Dotclear a besoin de vous

Hors ligne

#2 2011-10-19 10:21:15

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

Re : Récupérer l'url de la première image

Il n'existe pas de balise de template pour cela, il faut passer par un plugin ou peut-être un ajout au fichier _public.php du thème.

Hors ligne

#3 2011-10-19 11:13:10

patidou
Membre
Inscription : 2004-11-14
Site Web

Re : Récupérer l'url de la première image

Oui, c'est à ça que je pensais. J'ai déjà vu comment créer des balises de templtates mais mon souci est la méthode pour récupérer cette url, je fais un regexp sur la balise img renvoyée par la fonction?

Dernière modification par patidou (2011-10-19 11:13:32)


«Quand j'étais petit, je voulais être maître du monde. Maintenant que je suis grand, j'arrive à peine à être maître de moi-même.» Le Chat/Philippe Geluk.
Dotclear a besoin de vous

Hors ligne

#4 2011-10-19 13:25:49

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

Re : Récupérer l'url de la première image

Oui, tu peux t'inspirer d'un plugin comme lastImages et de son fichier _public.php, tu trouveras la règle permettant de récupérer la première balise <img /> et son attribut src ;)

Hors ligne

#5 2011-10-19 17:51:37

patidou
Membre
Inscription : 2004-11-14
Site Web

Re : Récupérer l'url de la première image

Merci :-)


«Quand j'étais petit, je voulais être maître du monde. Maintenant que je suis grand, j'arrive à peine à être maître de moi-même.» Le Chat/Philippe Geluk.
Dotclear a besoin de vous

Hors ligne

#6 2011-10-19 18:52:49

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

Re : Récupérer l'url de la première image

Bonjour, au besoin j'avais fait ca, le code est ici : http://aiguebrun.adjaya.info/post/20090 … -dotclear2


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

Hors ligne

#7 2011-10-20 08:15:17

patidou
Membre
Inscription : 2004-11-14
Site Web

Re : Récupérer l'url de la première image

Je vais essayer ça dès que j'ai un moment de libre, merci. ;-)


«Quand j'étais petit, je voulais être maître du monde. Maintenant que je suis grand, j'arrive à peine à être maître de moi-même.» Le Chat/Philippe Geluk.
Dotclear a besoin de vous

Hors ligne

#8 2011-10-20 10:10:59

Mathieu M.
Membre
Lieu : Rhône-Alpes
Inscription : 2009-09-14

Re : Récupérer l'url de la première image

Plop,

Si tu arrive à un résultat, je serais fort intéressé par le code si tu veux bien le mettre à disposition :)

Hors ligne

#9 2011-10-20 13:19:38

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

Re : Récupérer l'url de la première image

Si tu veux bien remonter au message #6, tu verra que j'ai mis un lien vers le code.

Petite précision, je n'ai fait qu'ajouter quelques lignes au code d'origine pour donner un attribut supplémentaire "src_only" à la balise tpl.
J'ai fait ca il y a un moment déjà, et la fonction d'origine a légèrement évoluée depuis, donc prendre le temps de jeter un œil sur la version de dotclear en cours pour mettre à jour, au cas ou ce code répond à ton attente.

Dernière modification par adjaya (2011-10-20 13:20:27)


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

Hors ligne

#10 2012-09-02 13:22:40

patidou
Membre
Inscription : 2004-11-14
Site Web

Re : Récupérer l'url de la première image

Juste pour info, en utilisant la méthode d'adjaya pour la version suivante du thème polyvalence :

$core->tpl->addValue('MyEntryFirstImageURL',array('tplPolyvalenceTpl','MyEntryFirstImageURL'));


class tplPolyvalenceTpl
{
	public static function MyEntryFirstImageURL($attr)
	{
		$size = !empty($attr['size']) ? $attr['size'] : '';
		$class = !empty($attr['class']) ? $attr['class'] : '';
		$with_category = !empty($attr['with_category']) ? 'true' : 'false';
		
		return "<?php echo tplPolyvalenceTpl::MyEntryFirstImageURLHelper('".addslashes($size)."',".$with_category.",'".addslashes($class)."'); ?>";
	}
	public static function MyEntryFirstImageURLHelper($attr)
	{
		global $core, $_ctx;
		
		$media = new dcMedia($core);
		$sizes = implode('|',array_keys($media->thumb_sizes)).'|o';
		if (!preg_match('/^'.$sizes.'$/',$size)) {
			$size = 's';
		}
		$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|jpeg|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;
			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 ($src) {
			return $src;
		}
	}
	private static function ContentFirstImageLookup($root,$img,$size)
	{		
		global $core;
		# Get base name and extension
		$info = path::info($img);
		$base = $info['base'];
		
		$media = new dcMedia($core);
		$sizes = implode('|',array_keys($media->thumb_sizes));
		if (preg_match('/^\.(.+)_('.$sizes.')$/',$base,$m)) {
			$base = $m[1];
		}
		
		$res = false;
		if ($size != 'o' && file_exists($root.'/'.$info['dirname'].'/.'.$base.'_'.$size.'.jpg'))
		{
			$res = '.'.$base.'_'.$size.'.jpg';
		}
		else
		{
			$f = $root.'/'.$info['dirname'].'/'.$base;
			if (file_exists($f.'.'.$info['extension'])) {
				$res = $base.'.'.$info['extension'];
			} elseif (file_exists($f.'.jpg')) {
				$res = $base.'.jpg';
			} elseif (file_exists($f.'.jpeg')) {
				$res = $base.'.jpeg';
			} elseif (file_exists($f.'.png')) {
				$res = $base.'.png';
			} elseif (file_exists($f.'.gif')) {
				$res = $base.'.gif';
			}
		}
		
		if ($res) {
			return $res;
		}
		return false;
	}
}

«Quand j'étais petit, je voulais être maître du monde. Maintenant que je suis grand, j'arrive à peine à être maître de moi-même.» Le Chat/Philippe Geluk.
Dotclear a besoin de vous

Hors ligne

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

Pied de page des forums

Sites map