LISTING DE RÉPERTOIRE AVEC AFFICHAGE PAGE PAR PAGE

Eliays Messages postés 67 Date d'inscription samedi 3 juin 2006 Statut Membre Dernière intervention 29 janvier 2009 - 10 juil. 2007 à 18:34
jlmcreation Messages postés 6 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 30 novembre 2007 - 25 nov. 2007 à 13:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43407-listing-de-repertoire-avec-affichage-page-par-page

jlmcreation Messages postés 6 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 30 novembre 2007
25 nov. 2007 à 13:41
et non voila le message des l'ouverture de la page

Warning: in_array() [function.in-array]: Wrong datatype for second argument in liste.php on line 14

Warning: in_array() [function.in-array]: Wrong datatype for second argument in liste.php on line 14

Page précédente - - Page suivante
sparko_dutos Messages postés 9 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 1 juin 2011
25 nov. 2007 à 12:30
Il suffit de de ne pas fermer la parenthse du if avant le && mais après cet élément !!

if($file != '.' && $file != '..' && $file != $current && in_array(array('.htm','.html'),strrchr($file,'.')))

ca devrait mieux marcher !!
jlmcreation Messages postés 6 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 30 novembre 2007
25 nov. 2007 à 12:02
voila le script :

<?php
$path = '.';
$current = $_SERVER['PHP_SELF'];
if(is_numeric($_GET['page'])){
$num_page = $_GET['page'];
} else {
$num_page = 1;
}
$dh = opendir($path);
$i 0;$compteur 0;
$debut = ($num_page - 1) * 10;
$fin = $debut + 9;
while (($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..' && $file != $current) && in_array(array('.htm','.html'),strrchr($file,'.'))
{
if ($i >= $debut && $i <= $fin) {
printf('%s. [%s/%s %s]
', $i+1, $path, $file, $file);
}
$i++;$compteur++;
}
}
closedir($dh);
echo '';
if($num_page > 1) {
echo '['.$current.'?page='.($num_page - 1).' Page précédente] - ';
} else {
echo 'Page précédente - ';
}
$div = floor($compteur / 10);
if($div == $compteur / 10){
$total_page = $div;
} else {
$total_page = $div + 1;
}
for($b = 1;$b <= $total_page;$b++){
if($b == $num_page){
echo $b.' ';
} else {
echo '['.$current.'?page='.$b.' '.$b.'] ';
}
}
if(10 * $num_page < $compteur){
echo ' - ['.$current.'?page='.($num_page+1).' Page suivante]';
} else {
echo ' - Page suivante';
}
?>

merci pour tes reponces
jlmcreation Messages postés 6 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 30 novembre 2007
25 nov. 2007 à 12:00
voila ce que ca affiche quand j'ouvre la page

Parse error: syntax error, unexpected T_BOOLEAN_AND in liste.php on line 14
sparko_dutos Messages postés 9 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 1 juin 2011
24 nov. 2007 à 21:35
oui tout à fait :)

après $file != $current il suffirait de rajouter
&& in_array(array('.htm','.html'),strrchr($file,'.'))

ca devrait fonctionner ...
ca verifie que l'extension du fichier lu appartient à une liste prédéfinie (array('.htm','.html')...)
En esperant que ca t'aide :)
jlmcreation Messages postés 6 Date d'inscription samedi 24 novembre 2007 Statut Membre Dernière intervention 30 novembre 2007
24 nov. 2007 à 17:07
BONJOUR
BIEN COOL CE SCRIPT , mais est ce possible de lire que les fichiers .html ou .htm ,ne pas voir les photo gif,jpeg et autres

merci
kiki2sirom Messages postés 153 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 23 décembre 2010
24 juil. 2007 à 10:59
'lut
j'y reviens
je préfère ma méthode POUR CE TYPE DE PROGRAMME s'entend !
ici ce ne sont que des if / else, plus clair, non ?
@TOZMAN2 :
lister un répertoire, je ne suis pas sûr que le temps mis à l'exécution par PHP soit plus lent avec la méthode ternaire, qu'avec le classique if / else

cf cette "source" http://www.phpcs.com/codes/IF-ELSEIF-ELSE-AVEC-OPERATEUR-TERNAIRE_34335.aspx
intéressant de voir les différents avis, surtout de personnes confirmées de ce site.

je persiste : ici l'utilisation de l'opérateur ternaire est plus clair.

surtout qu'une fois qu'on a compris que c'est :
$var = ( condition ) ? condition-vrai : condition-fausse;

non ?

je lance le débat interminable du "moi, je préfère ça" - "pas moi, je préfère ça" - "ça, c'est plus rapide..." etc.......

kiki
Eliays Messages postés 67 Date d'inscription samedi 3 juin 2006 Statut Membre Dernière intervention 29 janvier 2009
20 juil. 2007 à 15:21
coucou, c'est possible de modifier ce code pour qu'il parcour aussi les dossier/sous dossier/ ect? ;)
sparko_dutos Messages postés 9 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 1 juin 2011
17 juil. 2007 à 08:57
@ simonviei > je connnaissais également déjà glob...mais cette fonction est désactivée chez certains hébergeurs (free notamment) car elle ne tient pas compte des droits utilisateurs et permettait de naviguer dans tous les répertoires d'un site même les répertoires parents où l'utilisateur n'était pas cené aller ...

@ tozman > bien d'accord avec toi : if et else est bien plus lisible :)

En ce qui concerne le @ devant le $_GET['page'] je n'en vois pas l'utilité ^^
simonviei Messages postés 17 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 1 décembre 2008
16 juil. 2007 à 12:50
une fonction tres interressrante pour lister un dossier : glob()
trabi11fr Messages postés 40 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 décembre 2008
16 juil. 2007 à 11:59
Bonjour,
Question à Masterhill: je ne vois pas le '@' dont tu parles. Où le places-tu exactement? Ma queqtion peut paraitre stupide à certains, mais je suis totalement débutant en PHP (je faisais de l'ASP que je préfére nettement au niveau de la gestion des bases de données que j'ai beaucoup de mal à assimiler en PHP, mais le coût de l'hebergement....)
tozman2 Messages postés 1 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 16 juillet 2007
16 juil. 2007 à 11:36
Les if...else sont plus rapide à executer par PHP... donc l'interêt de les changer reste limité. d'autant que pour modification du code un bloc if...else est bien plus explicite, surtout pour les débutants.
sparko_dutos Messages postés 9 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 1 juin 2011
13 juil. 2007 à 12:04
Salut @ tous

kiki2sirom : je connais les operateurs ternaires, mais pour plus de lisibilité (tout le monde ne les connait pas) j'ai préféré passer par les if else...

Ensuite il est vrai que certaines lignes auraient pu être mieux codées... j'avais pas fait gaffe :p

Vais modifier cela :)
masterhill Messages postés 3 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 12 juillet 2007
12 juil. 2007 à 13:37
Salut !
Bon code, j'me suis juste permis de rajouter un pti '@' à la ligne 4 parce qu'au lancement de page sans le $_get['page'], on a le droit à un pti avertissement.
Mais sinon tout est impec 9.5/10 ;-)
kiki2sirom Messages postés 153 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 23 décembre 2010
12 juil. 2007 à 12:04
damn !!!
pas conservé mon indentation...
chaipa comment qu'on fait ici
;-)
kiki
kiki2sirom Messages postés 153 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 23 décembre 2010
12 juil. 2007 à 12:01
je pense qu'ici un peu d'opérateur ternaire ne ferait pas de mal
mais ce n'est que mon avis personnel.
vu que tu as beaucoup de if, else, du style :

if($num_page > 1) {
echo '['.$current.'?page='.($num_page - 1).' Page précédente] - ';
} else {
echo 'Page précédente - ';
}

pourrait devenir simplement :
echo ($num_page > 1?'['.$current.'?page='.($num_page - 1).' Page précédente] - ':'Page précédente - ');

tout comme :
if(10 * $num_page < $compteur){
echo ' - ['.$current.'?page='.($num_page+1).' Page suivante]';
} else {
echo ' - Page suivante';
}

pourrait devenir :
echo (10 * $num_page < $compteur?' - ['.$current.'?page='.($num_page+1).' Page suivante]':' - Page suivante');

* de plus:
if($div == $compteur / 10){
$total_page = $div;
} else {
$total_page = $div + 1;
}
for($b = 1;$b <= $total_page;$b++){
pourrait aisément devenir :
if ($div != $compteur / 10)
$div++;
for($b = 1;$b <= $div;$b++){

ton $total_page n'est pas très utile ici !

* de plus:

if(is_numeric($_GET['page'])){
$num_page = $_GET['page'];
} else {
$num_page = 1;
}

deviendrait :
$num_page=(is_numeric($_GET['page'])?$_GET['page']:1);

* tout comme :
for($b = 1;$b <= $div;$b++){
if($b == $num_page){
echo $b.' ';
} else {
echo '['.$current.'?page='.$b.' '.$b.'] ';
}
}

deviendrait :
for($b = 1;$b <= $div;$b++){
echo ($b == $num_page?$b.' ':'['.$current.'?page='.$b.' '.$b.'] ');
}


j'aime beaucoup l'opérateur ternaire, quand ça reste dans le domaine du lisible, soit if / else ou if / elseif / else

47 lignes au final devient 27 lignes :

<?php
$path = '.';
$current = $_SERVER['PHP_SELF'];
$num_page=(is_numeric($_GET['page'])?$_GET['page']:1);
$dh = opendir($path);
$i 0;$compteur 0;
$debut = ($num_page - 1) * 10;
$fin = $debut + 9;
while (($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..' && $file != $current) {
if ($i >= $debut && $i <= $fin) {
printf('%s. [%s/%s %s]
', $i+1, $path, $file, $file);
}
$i++;$compteur++;
}
}
closedir($dh);
echo '';
echo ($num_page > 1?'['.$current.'?page='.($num_page - 1).' Page précédente] - ':'Page précédente - ');
$div = floor($compteur / 10);
if ($div != $compteur / 10)
$div++;
for($b = 1;$b <= $div;$b++)
echo ($b == $num_page?$b.' ':'['.$current.'?page='.$b.' '.$b.'] ');

echo (10 * $num_page < $compteur?' - ['.$current.'?page='.($num_page+1).' Page suivante]':' - Page suivante');
?>

c'est quand même intéressant, non ?

allez
kiki
Eliays Messages postés 67 Date d'inscription samedi 3 juin 2006 Statut Membre Dernière intervention 29 janvier 2009
10 juil. 2007 à 18:34
Hehe super code ;)
Rejoignez-nous