vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010
-
10 mars 2008 à 17:24
vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010
-
13 mars 2008 à 23:02
Bonsoir à tous,
J'ai un soucis et j'espère trouver une réponse chez vous.
Je vous expose le problème :
J'ai écrit un code qui parcourt un dossier (avec readdir) et qui liste tous les fichiers présents dans ce dossier, leur date de création, leur auteur, leur taille, etc.
Afin de rendre la lecture plus agréable aux yeux des utilisateurs, je dois placer ces éléments dans un tableau html. (Jusque là ça va, y'a qu'a placer des tr et des td).
Mais... je ne dois pas avoir de colonnes de 300 mètres ou de rangées de 400 mètres ; tout doit s'afficher clairement à l'écran et dans le dossier parcouru, il y a des centaines de fichiers.
La solution proposée et approuvée est donc la suivante : placer ces données dans un tableau de 3x3 (3 rangées et 3 colonnes), ensuite créer un page2 avec un tableau de 3x3, puis s'il y a encore des fichiers, une page 3, etc etc...
Flachy Joe
Messages postés2103Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention21 novembre 20231 11 mars 2008 à 18:46
Alors le pré-requis est que ta liste de fichier soit stockée dans un array : $file[].
Si tu veux afficher les fichiers 0 à 9 en 3 ligne et 3 colonnes dans la premiere page alors $page vaut 0, $nx vaut 3 et $ny vaut 3.
La première boucle tourne sur les lignes, la seconde sur les colonnes.
Au 1e tour de la 1e boucle $y vaut 0, on commence une ligne avec un <tr> on entre dans la seconde boucle qui va faire tourner $x de 0 à 2 en créant à chaque fois une cellule dans laquelle tu crée un tableau avec ton image et tes info sur le fichier. (ma ligne d'exemple est mal branlée, il devrait y avoir
//for (x){
echo '<tr>'; //début de la cellule
echo ' Flachy Joe
vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010 10 mars 2008 à 18:07
Re,
Pour le soucis des tableaux 3x3, je pense avoir trouvé une solution...
En début de code je déclare un i qui vaut 0 ($i=0), puis à chaque fichier trouvé dans le dossier, j'incrémente mon i de 1 ($i=$i+1). Lorsque je dépasse 3 (if($i==4), je remets mon compteur i à 1 ($i=1) et là je pourrais donc via ce compteur placer les tr et les td nécessaires à la création du tableau de la première page (du moins je le pense).
Admettons que mon idée soit possible (dites moi ce que vous en pensez),
Il reste encore le problème de passer en page 2 pour recréer l'occurence de tableau. Peut-être en incrémentant une valeur j mais après ? Comment créer dynamiquement cette page 2 ??
Flachy Joe
Messages postés2103Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention21 novembre 20231 10 mars 2008 à 19:27
Pourquoi ne pas lister réellement tous les fichiers mais inclure le tableau dans un "div" Html dont la taille est limitée ?
En spécifiant la largeur totale du tableau les colonnes seront automatiquement redimensionnées.
Je verrai ça comme ça :
<!-- Tous tes tr et td -->
Le paramètre overflow:auto permet d'afficher les ascenseurs seulement s'ils sont nécessaires.
Ça évite du traitement php pour passer d'un tableau à l'autre et l'utilisateur parcours plus rapidement la liste.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 10 mars 2008 à 19:54
Hello,
franchement une liste est largement plus adaptée. Ce sera nettement plus ergonomique aussi. Surtout en ajoutant un affichage fractionné (comme un explorateur, quoi). Avec ton histoire de tableau sur plusieurs pages, tu vas galérer et ce ne sera pas du tout agréable à utiliser.
vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010 10 mars 2008 à 20:37
Rebonsoir,
Vos idées pourraient êtres bonnes mais il y a un soucis...
Je ne peux pas me contenter d'une simple liste.
Chaque cellule du tableau est remplie d'un tas d'éléments définis comme suit :
Nom de fichier : xxxxxxx.txt
Taille XX.XXXXX Mo
Date de création du fichier : XX-XX-XXXX
Auteur : xxxxxxx
Date de dernière modification : XX-XX-XXXX
Bon jusque là c'est encore possible de lister mais...
1) Il y a dans le répertoire environ 200 fichiers. Je travaille en 3x3 pour mes tests mais à l'avenir je devrais pouvoir passer à du 5x6. Néanmoins je ne peux pas faire 200 fois la boucle de 5 lignes (nom, taille, date, auteur, date mod), ce n'est pas agréable à regarder !!!
Alors qu'un tableau de 30 cellules au total sur la page 1, 30 sur la 2 et ainsi de suite, c'est plus propre.
Autre paramètre à prendre en compte :
2) A l'avenir, chaque fichier sera accompagné d'une icône selon son type. Cette icône sera en 150x150 et sera placée au-dessus des données citées plus haut. A vrai dire c'est cette caractéristique qui m'a fait pencher du côté du tableau et quitter l'idée de listing.
Donc il me faut bel et bien un tableau et j'espère trouver quelqu'un qui pourrait m'aider à implémenter ma demande de ce topic.
** Pour continuer le suivi de mon développement, j'ajoute que j'ai essayé l'incrémentation par la variable $i dont je parle dans mon second message de ce topic et que ça ne fonctionne pas correctement. Peut-être ais-je oublié de prendre en compte un paramètre. Je vais afficher le code source pour voir si php m'a bien placé les tr et td aux bons endroits. Je vous tiendrai au courant.
En attendant, si quelqu'un pouvait m'aider, ce serait sympa.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 10 mars 2008 à 20:46
Tu as déjà utilisé l'explorateur de windows (par exemple) ? Toutes les infos que tu veux mettre dans le tien y sont présentes, voire plus, sans franchement de soucis d'ergonomie. Et le résultat est clair.
Je maintiens qu'un tableau paginé est une très mauvaise idée, ergonomiquement parlant.
vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010 10 mars 2008 à 21:01
@malalam : j'ai jamais eu d'icones en 150 dans l'explorateur windows... ces icones sont propres à l'utilisation finale du produit et je ne peux pas les toucher ni les réduire (je Veux mais je ne Peux pas, ce sont les ordres).
Donc pour continuer le fil de développement :
J'ai réussi à implémenter le système de tr et td avec compteur. Mon soucis était que je faisais le premier tr de chaque row n'était pas suivi d'un td et donc ca ne faisait que des row.
Au final j'arrive bien à un tableau de 3 rangées et de X colonnes.
Je sais comment lui dire de s'arrêter à 3 colonnes (il me suffit d'implémenter un compteur j de la même manière que le compteur i mais qui lui va jusque 9 occurences) mais ensuite, je ne sais ABSOLUMENT PAS comment spécifier dans mon code qu'il faut créer une nouvelle page pour y inscrire les éléments suivants et c'est pour celà que j'ai créé ce topic.
Quelqu'un peut-il m'aider à réaliser cette étape ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 10 mars 2008 à 21:14
Le problème de ton système c'est que tu vas franchement galérer pour limiter l'affiochage d'un tableau sur une page (tu te limites à quoi ?), et que tu vas devoir reparcourir ton arborescence pour chaque page. Ca va être lourd niveau code, et lourd à l'utilisation. Tu te heurtes déjà au problème "sur quel critère limiter?", parce que ce n'est pas qu'une question de compteur, il faut rester logique, on n'a pas à faire à du linéaire mais à une arborescence. je vais sur une feuille, je fais quoi? Je remonte au parent, je fais quoi? Je veux aller 3 feuilles sous la feuille actuelle, je fais comment ?
Bah tu fais ce que tu veux, mais vraiment, je n'y crois pas trop ;-)
vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010 10 mars 2008 à 21:33
Pourquoi ?
Pourquoi ne puis-je pas simplement afficher mon premier tableau 3x3, implémenter un compteur qui s'arr-ete à 9 occurences et se remet à zéro en passant à la page 2, qui compte jusque 9 et se remet à zéro en passant à la page 3, etc etc ???
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 10 mars 2008 à 21:58
Ca va bien si tu te limites à 1 dossier, si.
Mais il n'empêche que tu devras reparcourir ton dossier à chaque page, à moins d'utiliser des subterfuges un peu compliqués basés sur javascript.
vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010 11 mars 2008 à 08:56
@malalam : je ne me limite de toute façon qu'à un seul dossier.
@Flachy Joe : Merci pour ce petit bout de code, je vais l'étudier et essayer de le caser dans mon code pour voir ce que ça donne. Dès que ce sera fait je vous tiendrai au courant.
vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010 11 mars 2008 à 20:36
Re,
Je viens de lire tes explications et ça me semble réalisable. Pour ce qui est du côté lourd du script, bien qu'on me l'ai déconseillé, je prends le risque.
Concernant le script je saisis de mieux en mieux l'idée que tu me proposes (je pense avoir encore quelques petits soucis notamment sur la création de la page suivante (pas l'implémentation du système mais la ligne qui fait l'acte de créer cette page). Par ailleurs j'ai le soucis de l'entete des pages (html, body,...).
Mais bon, pour le moment ça reste assez flou car je n'ai pas testé la mise en pratique de ce code ; je l'ai juste lu.
Je teste ça demain dans la journée et, quoiqu'il arrive, je posterai à la suite pour vous tenir au courant et, surement, voir ce qu'il y a à corriger dans mes erreurs...
vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010 12 mars 2008 à 12:29
Me revoilà avec... des problèmes
Alors, j'ai pris le code de Flachy joe, le mien, je les ai mis dans le shaker et voilà que les problèmes arrivent.
Pour commencer :
$page=$_GET['page'];
$nx=$_GET['nx'];
etc
Alors là, le soucis c'est que la page index.php qui n'a pas de paramètre me dit que page, nx, etc sont indéfinis.
Comment je fais-je ?
Bon pour continuer à tester j'ai remplacé par des valeurs (0,3,3)
Alors là, il me sort un tableau farfelu avec une erreur par cellule : Notice: Undefined offset: 3 in c:\program files\easyphp1-8\www\photoplayer\indextest.php on line 43.
La ligne 43 c'est tout simplement celle-ci : echo "<td></td>";
Sinon j'ai bien un tableau de 3x3... enfin plus ou moins...
En réalité, il me fait autant de tableaux qu'il n'y a de fichiers !
Il me fait d'abord un tableau de 3x3 avec dans la première cellule le fichier[0] et dans les autres rien.
En-dessous, il me fait un tableau de 3x3 avec dans la première cellule le fichier [0] et dans la deuxième le fichier [1] ;
puis encore un de 3x3 avec les trois premiers fichiers,
puis encore un tableau de 3x3 avec les 4 premiers fichiers, et ainsi de suite.
Bien entendu, ne sachant comment implémenter le GET (et d'ailleurs ne voyant pas non plus où le numéro de page est incrémenté), à aucun moment il ne passe à une quelconque page suivante.
http://www.php.net/manual/fr/index.php </var>
Je te rapelle que le code fourni n'est qu'un exemple, qu'il y a des fautes dans le premier message que j'ai envoyé et que je les ai en partie corrigé en indiquant un nouveau contenu pour la cellule du tableau.
Pour passer des paramètres à une page par la methode GET, soit tu fait un formulaire HTML
<form action="lapage.php" method ="GET">
</form>
soit tu les passes directement dans l'URL :
[lapage.php?param1=val1¶m2=val2 lien]
Tu peux m'envoyer une adresse (E-Mail, MSN, GTalk ou ICQ) par message privé si tu veux qu'on discute plus en profondeur de ton problème.
vxr888
Messages postés85Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention27 novembre 2010 13 mars 2008 à 21:43
Me revoilà,
Avec plein de bonnes nouvelles et une toute petite mauvaise.
D'abord les bonnes nouvelles : j'ai presque tout réglé. En fait c'est juste que ma boucle était mal placée et donc il me répétait le tableau autant de fois qu'il y avait de fichier. Après relecture de mon code et réflexion, j'ai vite vu où était le problème, j'ai déplacé ma boucle et là, miracle, presque parfait si ce n'est que je n'avais pas encore implémenté le lien "page suivante".
J'ajoute alors la ligne qui implémente la page suivante et là je me rends compte qu'il y a des pages jusqu'à l'infini et qu'une fois le nombre de fichiers dépassé il me remplit les cellules avec une erreur (undefine offset dans $fichier[$n], logique).
Je décide donc de rajouter un petit test basé sur un petit calcul.
Je fais donc ceci : $stop = count ($fichier);
J'obtiens ainsi le nombre total de fichiers (ou plutôt le numéro du dernier fichier).
Ensuite, il me reste à mettre l'affichage des données (nom de fichier, icone, etc) dans la boucle suivante : if($n<$stop) et voilà que le dernier tableau 3x3 s'arrête correctement.
Par exemple si sur la dernière page je n'ai que 5 fichiers, il me fait bien un tableau de 5 cellules et pas +.
Passons donc au tout petit problème qu'il me reste : Sur la dernière page, j'ai encore le lien "page suivante" qui est affiché. (C'est logique puisque je ne l'arrête à aucun moment) Lorsque je clique dessus, j'ai donc logiquement une page blanche sans tableau avec juste un lien "page suivante", qui en cliquant dessus m'envoie vers une nouvelle page avec un lien page suivante et ainsi de suite.
Voilà, je veux simplement savoir comment stopper l'affichage de ce lien lorsqu'il n'y a plus de fichiers.