Dotclear

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

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2012-02-08 21:27:33

fix
Membre
Inscription : 2005-01-20
Site Web

Chargement dynamique des images

Bonjour,

Je cherche à faire un carousel chargeant dynamiquement (c'est-à-dire au fur et à mesure où elles sont affichées) les images des billets.

J'ai un carousel qui fonctionne très bien sur ce principe, et qui utilise les images des galeries. Je cherche maintenant à appliquer cela aux images des billets eux-mêmes, en réutilisant (non sans honte) une partie du code du plugin listImages.

Le script jcarousel fait donc appel à un fichier php qui se charge de renvoyer un tableau contenant les infos (url, src et title) des images à afficher.

Voici ce que contient ce fichier php :

<?php

// Array indexes are 0-based, jCarousel positions are 1-based.
$first = max(0, intval($_GET['first']) - 1);
$last  = max($first + 1, intval($_GET['last']) - 1);

$length = 100;

// ---
global $core;
$core->blog = new dcBlog($core, 'biblio');
$media = new dcMedia($core);
$sizes = implode('|',array_keys($media->thumb_sizes));
$size = 's';
$p_url = $core->blog->settings->system->public_url;
$p_root = $core->blog->public_path;
$p_site = preg_replace('#^(.+?//.+?)/(.*)$#','$1',$core->blog->url);
$pattern_path = '(?:'.preg_quote($p_site,'/').')?'.preg_quote($p_url,'/');
$pattern_src = sprintf('/src="%s(.*?\.(?:jpg|jpeg|gif|png|JPEG|JPG|GIF|PNG))"/msu',$pattern_path);
$a = 0;
$params["order"] = "post_dt DESC";
$params['post_type'] = "post";
$_ctx->posts = $core->blog->getPosts($params); unset($params);
while ($_ctx->posts->fetch()) :
	$subject = ($from != 'content' ? $_ctx->posts->post_excerpt_xhtml : '').($from != 'excerpt' ? $_ctx->posts->post_content_xhtml : '');
	if (preg_match_all('/<img(.*?)\/\>/msu',$subject,$m) > 0) :
		$i = (!preg_match($pattern_src,$m[1][0],$src) ? '' : $src[1]);
		if ($i != '') :
			$info = path::info($i);
			$base = $info['base'];
			if (substr($info['dirname'],-1) != '/') $info['dirname'] .= '/';
			if (substr($root,-1) != '/') $root .= '/';
			if (preg_match('/^\.(.+)_('.$sizes.')$/',$base,$q)) $base = $q[1];
			$res = false;
			if ($size != 'o' && file_exists($p_root.$info['dirname'].'.'.$base.'_'.$size.'.jpg')) {
				$res = '.'.$base.'_'.$size.'.jpg'; $media_info = getimagesize($p_root.$info['dirname'].$res);
			} else {
				$f = $p_root.$info['dirname'].$base;
				if (file_exists($f.'.'.$info['extension'])) {
					$res = $base.'.'.$info['extension'];
				} elseif (file_exists($f.'.jpg')) {
					$info['extension'] = 'jpg'; $res = $base.'.'.$info['extension'];
				} elseif (file_exists($f.'.jpeg')) {
					$info['extension'] = 'jpeg'; $res = $base.'.'.$info['extension'];
				} elseif (file_exists($f.'.png')) {
					$info['extension'] = 'png'; $res = $base.'.'.$info['extension'];
				} elseif (file_exists($f.'.gif')) {
					$info['extension'] = 'gif'; $res = $base.'.'.$info['extension'];
				}
			}
			if ($res !== false) :
				$images[$a]['src'] = $p_url.(dirname($i) != '/' ? dirname($i) : '').'/'.$res;
				$images[$a]['url'] = $_ctx->posts->getURL();
				$images[$a]['title'] = html::escapeHTML($_ctx->posts->post_title);
				if ($a == $length) break;
				$a++;
			endif;
		endif;
	endif;
endwhile;
$_ctx->posts = null;

$total = count($images);
$selected = array_slice($images, $first, $length);
$images = null;
// ---

header('Content-Type: text/xml');

echo '<data>';

// Return total number of images so the callback
// can set the size of the carousel.
echo '  <total>'.$total.'</total>';

foreach ($selected as $img) {
    echo '  <image>'
		.'    <url>'.$img['url'].'</url>'
		.'    <src>'.$img['src'].'</src>'
		.'    <title>'.$img['title'].'</title>'
		.'  </image>';
}

echo '</data>';

?>

Le résultat, le voilà : on peut voir sur mon blog de tests, sous le titre "C'est vous qui le dites !", qu'aucune image ne s'affiche...
Pourquoi ? Mystère... Il serait pourtant intéressant, dans un carousel, de na pas "simplement" charger TOUTES les images de tous les billets (ça ferait beaucoup trop), mais de ne les charger que quand on a besoin de les afficher...

Quelqu'un aurait-il une idée ?

Dernière modification par fix (2012-02-08 23:05:57)

Hors ligne

#2 2012-02-08 23:30:50

fix
Membre
Inscription : 2005-01-20
Site Web

Re : Chargement dynamique des images

J'ai trouvé le problème : il manquait juste un

require '../../../../dotclear/inc/prepend.php';

au début...

Hors ligne

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

Pied de page des forums

Sites map