8792 sujets

Développement web côté serveur, CMS

Bonjour !
Tout d'abord, merci beaucoup pour toute l'aide que vous m'avez fournie jusqu'à présent, cela me permet de bien avancer !

Maintenant je bloque sur un gros problème; j'ai déjà essayé pleins de trucs et posté sur des forums de php mais personne ne sait (ou ne veut) m'aider.
En effet, comme je n'ai aucune pistes pour résoudre mon problème (je me débrouille en php mais je ne suis pas un crack !); les gens n'ont pas trop envie de tout se taper (ce que je comprend).

Je vous soumet tout de même le problème, au cas où ! Je sais que ce n'est pas un forum de php et je m'en excuse d'avance, mais je bloque vraiment ! Si vous avez une idée, je vous en serait vraiment très reconnaissant.

Alors voilà, j'ai un script qui ouvre un répertoire et liste toutes les images contenues dedans ainsi que dans ses sous-répertoires; dans une sorte de tableau (qui n'en est pas un).
Tout fonctionne en fait, ce que je voudrais juste, c'est que chaque nom de sous-répertoire soit marqué avant qu'il insère les photos.
Donc au lieu d'avoir
(rep1)
|photo1subrep1| |photo2subrep1| |photo3subrep1|....
|photo1subrep2| |photo2subrep2| |photo3subrep2|....
|photo1subrep3| |photo2subrep3| |photo3subrep3|....

on ait
(rep1)
-subrep1
|photo1subrep1| |photo2subrep1| |photo3subrep1|....
-subrep2
|photo1subrep2| |photo2subrep2| |photo3subrep2|....
-subrep3
|photo1subrep3| |photo2subrep3| |photo3subrep3|....

Voilà !
Encore merci pour votre patiente infine ! Smiley lol
Voilà le script :
<?php
define ("NBRE_COLONNES", 5);

$types_ok = array ('image/jpeg', 'image/gif', 'image/png');
$tabl_exclus = array ('.', '..', 'miniature');
$tabl_liens = array();

// Parcours le répertoire courant et tout ses sous-répertoires récursivement.
function liste_repertoire($dir) {
	if ($handle = opendir($dir)) {
		while (($file = readdir($handle)) !== false) {
			$chemin_fichier = $dir.'/'.$file;
			if (is_dir($chemin_fichier)) {
				if (!in_array($file, $GLOBALS['tabl_exclus'])) {
					liste_repertoire($dir.'/'.$file);
				}
			} else {
				if (est_image($chemin_fichier)) {
					$chemin_miniature = $dir.'/miniature/'.$file;
					ajoute_lien($chemin_fichier, $chemin_miniature, $file);
				}
			}
		}
		closedir($handle);
	}
}

// Teste si le fichier passé en paramètre correspond à l'un des trois type d'image défini
function est_image($chemin_fichier) {
	if (list($GLOBALS['largeur'], $GLOBALS['hauteur'], $type) = getimagesize($chemin_fichier)) {
		$type = image_type_to_mime_type($type);
		if (in_array($type, $GLOBALS['types_ok'])) {
			$ext = explode("/", $type);
			$GLOBALS['extension'] = $ext[1];
			return true;
		}
	}
	return false;
}

// Crée le lien dans le tableau global
function ajoute_lien($chemin_image, $chemin_miniature, $file) {
	// Rajoute le lien vers l'image au tableau global $GLOBALS['tabl_liens']
	$lien = '<a href="'.$chemin_image.'" rel="lightbox['.$chemin_image.']">';
	$lien .= '<img src="'.$chemin_miniature.'" width="100">';
	$lien .= '</a>'."\n";
	
	array_push($GLOBALS['tabl_liens'], $lien);
}

// Gère l'affichage du tableau $GLOBALS['tabl_liens']
function affichage() {
	$compteur = 1;
	foreach ($GLOBALS['tabl_liens'] as $val_lien) {
		if ($compteur % NBRE_COLONNES == 1) {
			echo '<br>';
		}
		echo $val_lien;
		$compteur++;
	}
}
liste_repertoire('$rep');
affichage();
Si tu affiches au fure et à mesure les infos que tu lis dans les répertoires, ca serait plus simple pour faire ce que tu veux.

Ton système est tordu...tu parcours, tu stockes le HTML et ensuite du l'affiche.

Etant donné que tu ne fais pas de traitement particulier sur les infos que tu récupères, autant afficher au fur et à mesure les images.

Les modifs sont en gras.

<?php

define ("NBRE_COLONNES", 5);

$types_ok = array ('image/jpeg', 'image/gif', 'image/png');
$tabl_exclus = array ('.', '..', 'miniature');
$tabl_liens = array();

// Parcours le répertoire courant et tout ses sous-répertoires récursivement.
function liste_repertoire($dir,[b]$premier=true[/b]) {

[b]
	$cptImageRepCourant = 1;

	if(!$premier) echo "Répertoire : ".$dir."<br />";[/b]

	if ($handle = opendir($dir)) {
	
		while (($file = readdir($handle)) !== false) {

			$chemin_fichier = $dir.'/'.$file;
			if (is_dir($chemin_fichier)) {

				if (!in_array($file, $GLOBALS['tabl_exclus'])) {
					
					liste_repertoire($dir.'/'.$file[b],false[/b]);
				}

			} else {

				if (est_image($chemin_fichier)) {
					
					$chemin_miniature = $dir.'/miniature/'.$file;
					
					ajoute_lien($chemin_fichier, $chemin_miniature, $file);	
[b]
					if ($cptImageRepCourant == NBRE_COLONNES) {
						echo '<br>';
						$cptImageRepCourant = 0;
					}
					$cptImageRepCourant++;					
[/b]					
				}

			}

		}

		closedir($handle);

	}

}



// Teste si le fichier passé en paramètre correspond à l'un des trois type d'image défini

function est_image($chemin_fichier) {

	if (list($GLOBALS['largeur'], $GLOBALS['hauteur'], $type) = getimagesize($chemin_fichier)) {

		$type = image_type_to_mime_type($type);
		if (in_array($type, $GLOBALS['types_ok'])) {

			$ext = explode("/", $type);
			$GLOBALS['extension'] = $ext[1];

			return true;

		}

	}

	return false;

}



// Crée le lien dans le tableau global

function ajoute_lien($chemin_image, $chemin_miniature, $file) {

	// Rajoute le lien vers l'image au tableau global $GLOBALS['tabl_liens']

	$lien = '<a href="'.$chemin_image.'" rel="lightbox['.$chemin_image.']">';
	$lien .= '<img src="'.$chemin_miniature.'" width="100">';
	$lien .= '</a>'."\n";

	[b]echo $lien;[/b]
	
	//array_push($GLOBALS['tabl_liens'], $lien);

}



// Gère l'affichage du tableau $GLOBALS['tabl_liens']

function affichage() {

	$compteur = 1;

	foreach ($GLOBALS['tabl_liens'] as $val_lien) {

		if ($compteur % NBRE_COLONNES == 1) {
			echo '<br>';
		}

		echo $val_lien;

		$compteur++;

	}

}

liste_repertoire('$rep');

[b]//affichage();[/b]


Modifié par Zeke (16 Nov 2006 - 16:05)