par
Cyrano » 09 mars 2008, 10:03
Salut,
il y aurait beaucoup à dire sur ton code. Pour commencer, il y a beaucoup trop de répétitions. Tu initialises deux fois certaines variables inutilement, et tu effectues deux fois la même boucle pour des instructions différentes.
Ensuite, tu testes tous les fichiers du répertoire alors qu'en fin de compte, tu cherches justes les images. Donc au départ, tu pourrais isoler les images en les mettant dans un répertoire spécifique.
Tu as écrit également "
$current = $_SERVER['PHP_SELF'];" : $_SERVER['PHP_SELF'] est un chemin, pas un fichier.
Ce que tu peux faire, c'est ajouter un test sur le type de fichier.
- Puisque tu veux afficher des images, alors vérifie le type. Tu dois trouver des types "jpg", "png" ou "gif" avec
la fonction pathinfo().
- Ensuite tu veux les trier chronologiquement, alors récupère la date de la dernière modification avec
la fonction filemtime
Met ça dans un tableau associatif et ajoute une condition dans le if en remplacement du test sur "
$current".
Ensuite, on fait des tris de tableaux en utilisant
array_multisort(), tout ceci est directement tiré de la documentation PHP. Essayes comme ceci :
<?php
$current = $_SERVER['PHP_SELF'];
$path = '.';
$num_page = (isset($_GET['page']) && is_numeric($_GET['page']) ? $_GET['page'] : 1);
$i = 0;
$compteur = 0;
$debut = ($num_page - 1) * 112;
$fin = $debut + 111;
$liens = array();
$types = array("jpg", "png", "gif");
/* Parcours du répertoire pour collecter les informations */
$dh = opendir($path);
while (($file = readdir($dh)) !== false)
{
if(!is_dir($file) && $file != '.' && $file != '..')
{
$infos = pathinfo($file);
if(isset($infos['extension']) && in_array($infos['extension'], $types))
{
/* Construction du lien sur l'image */
$liens[$i]['adresse'] = '<a href="lightbox/'. $file .'" rel="lightbox[photos]"><img src="'. $path .'/'. $file .'" alt="" /></a> ';
/* Stockage de la date de dernière modificaiton di fichier */
$liens[$i]['date'] = filemtime($file);
$i++;
$compteur++;
}
/* Nettoyage des informations stockées sur le fichier */
clearstatcache();
}
}
closedir($dh);
/* Construction de la barre de navigation */
$precedant = $num_page > 1 ? '<a href="'.$current.'?page='.($num_page - 1).'"><img src="images/precedent.png" alt="" /></a>' : '<img src="images/precedent.png" alt=""/>';
$suivant = (112 * $num_page) < $compteur ? '<a href="'.$current.'?page='.($num_page+1).'"><img src="images/suivant.png" alt="" /></a>' : '<img src="images/suivant.png" alt="" />';
$navigation = '<p style="text-align:center">'. $precedant . $suivant .'</p>';
// Obtient une liste de dates
foreach ($liens as $cle => $ligne)
{
$date[$cle] = $ligne['date'];
}
// Trie les données par adresse (croissant), date (croissant)
// Ajoute $liens en tant que dernier paramètre, pour trier par la clé commune
array_multisort($date, SORT_ASC, $liens);
/* Création des liens */
$liste_liens = '';
foreach ($liens as $cle => $val)
{
$liste_liens .= $liens[$cle]['adresse'];
}
/* Affichage */
echo($navigation);
echo '<p style="text-align:center">'. $liste_liens .'</p>';
echo($navigation);
?>
Si tu as bien suivi ce code, tu verras que pas mal de chose ont disparu par rapport à l'original. D'abord on traite et on trie les données, on prépare ce qu'il y aura à afficher. Ensuite seulement on affiche et ça tient en trois lignes.
Salut,
il y aurait beaucoup à dire sur ton code. Pour commencer, il y a beaucoup trop de répétitions. Tu initialises deux fois certaines variables inutilement, et tu effectues deux fois la même boucle pour des instructions différentes.
Ensuite, tu testes tous les fichiers du répertoire alors qu'en fin de compte, tu cherches justes les images. Donc au départ, tu pourrais isoler les images en les mettant dans un répertoire spécifique.
Tu as écrit également "[i]$current = $_SERVER['PHP_SELF'];[/i]" : $_SERVER['PHP_SELF'] est un chemin, pas un fichier.
Ce que tu peux faire, c'est ajouter un test sur le type de fichier.
- Puisque tu veux afficher des images, alors vérifie le type. Tu dois trouver des types "jpg", "png" ou "gif" avec [b][url=http://www.php.net/manual/fr/function.pathinfo.php]la fonction pathinfo()[/url][/b].
- Ensuite tu veux les trier chronologiquement, alors récupère la date de la dernière modification avec [b][url=http://www.php.net/manual/fr/function.filemtime.php]la fonction filemtime[/url][/b]
Met ça dans un tableau associatif et ajoute une condition dans le if en remplacement du test sur "[i]$current[/i]".
Ensuite, on fait des tris de tableaux en utilisant [b][url=http://www.php.net/manual/fr/function.array-multisort.php]array_multisort()[/url][/b], tout ceci est directement tiré de la documentation PHP. Essayes comme ceci :
[php]<?php
$current = $_SERVER['PHP_SELF'];
$path = '.';
$num_page = (isset($_GET['page']) && is_numeric($_GET['page']) ? $_GET['page'] : 1);
$i = 0;
$compteur = 0;
$debut = ($num_page - 1) * 112;
$fin = $debut + 111;
$liens = array();
$types = array("jpg", "png", "gif");
/* Parcours du répertoire pour collecter les informations */
$dh = opendir($path);
while (($file = readdir($dh)) !== false)
{
if(!is_dir($file) && $file != '.' && $file != '..')
{
$infos = pathinfo($file);
if(isset($infos['extension']) && in_array($infos['extension'], $types))
{
/* Construction du lien sur l'image */
$liens[$i]['adresse'] = '<a href="lightbox/'. $file .'" rel="lightbox[photos]"><img src="'. $path .'/'. $file .'" alt="" /></a> ';
/* Stockage de la date de dernière modificaiton di fichier */
$liens[$i]['date'] = filemtime($file);
$i++;
$compteur++;
}
/* Nettoyage des informations stockées sur le fichier */
clearstatcache();
}
}
closedir($dh);
/* Construction de la barre de navigation */
$precedant = $num_page > 1 ? '<a href="'.$current.'?page='.($num_page - 1).'"><img src="images/precedent.png" alt="" /></a>' : '<img src="images/precedent.png" alt=""/>';
$suivant = (112 * $num_page) < $compteur ? '<a href="'.$current.'?page='.($num_page+1).'"><img src="images/suivant.png" alt="" /></a>' : '<img src="images/suivant.png" alt="" />';
$navigation = '<p style="text-align:center">'. $precedant . $suivant .'</p>';
// Obtient une liste de dates
foreach ($liens as $cle => $ligne)
{
$date[$cle] = $ligne['date'];
}
// Trie les données par adresse (croissant), date (croissant)
// Ajoute $liens en tant que dernier paramètre, pour trier par la clé commune
array_multisort($date, SORT_ASC, $liens);
/* Création des liens */
$liste_liens = '';
foreach ($liens as $cle => $val)
{
$liste_liens .= $liens[$cle]['adresse'];
}
/* Affichage */
echo($navigation);
echo '<p style="text-align:center">'. $liste_liens .'</p>';
echo($navigation);
?>[/php]
Si tu as bien suivi ce code, tu verras que pas mal de chose ont disparu par rapport à l'original. D'abord on traite et on trie les données, on prépare ce qu'il y aura à afficher. Ensuite seulement on affiche et ça tient en trois lignes.