CLASSE LECTUREENLIGNE - POUR LES SITES DE SCANTRAD OU ...

codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 18 sept. 2008 à 15:00
tiger222 Messages postés 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 septembre 2008 - 27 sept. 2008 à 22:02
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/47989-classe-lectureenligne-pour-les-sites-de-scantrad-ou

tiger222 Messages postés 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 septembre 2008
27 sept. 2008 à 22:02
Mise à jour moyenne : possibilité d'avoir un affichage moins "lourd" pour les miniatures. Seulement 3 seront affichées, celle de l'image précédente, l'image actuelle et l'image suivante. Niveau ressources ça allège pas mal la chose puisque seulement 3 miniatures seront créées (si inexistantes) et ensuite une seule par page (la suivante).

J'ai ajouté une vérification au niveau de la hauteur des miniatures existantes; avant, je ne vérifiais que le nom de la miniature, du coup si l'utilisateur changeait la valeur de leur hauteur de celles-ci, ce n'était pas pris en compte.

++@ !
tiger222 Messages postés 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 septembre 2008
22 sept. 2008 à 21:30
Merci LongShot41 !
longshot41 Messages postés 17 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 14 janvier 2021
22 sept. 2008 à 19:46
J aime bien lire ton code, pas encore testé, mais c'est simpa de voir du code propre (en premiere lecture ;) ) Fallait le dire!
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 sept. 2008 à 23:22
C'est déjà franchement pas mal, ce que je te proposais à la fin, c'était des améliorations non essentielles.

De toute facon on peux toujours améliorer un code, il y a un dicton qui dit qu'un programme n'est vraiment terminé qu'à la mort de tous ses développeurs :p

L'essentiel, c'est que tu comprenne ce que tu fait et que tu progresse. Si tu t'intéresse à la SPL, tu va découvrir de nouveaux horizons, etc.

Continue, apprends, renseigne toi, instruit toi, et tu ne feras que progresser :)
tiger222 Messages postés 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 septembre 2008
21 sept. 2008 à 22:47
Voilà, la dernière MAJ vient d'être faite, j'en reste là pour cette classe.

Je te remercie grandement pour ton aide et conseil.
Je partirai sur de meilleures bases pour mes futures classes !

Merci !

;)
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 sept. 2008 à 16:07
C'est de mieux en mieux ! :)

Maintenant que tu lance des exceptions, tu n'a plus vraiment besoin de la fonction "erreur". En effet, à chaque erreur lancée, tu crée un tableau qui contient les différents messages d'erreur. Pourquoi ne pas les mettres dans la structure de la table ? genre
<?php
class MyClass { private $_Errors array (0> 'erreur 1',
1 => 'erreyr 2',
2 => ... etc...);
}
?>
comme cela dans ton code tu n'a plus qu'a faire
throw new Exception ($this->_Errors[x]); avec X, l'index correspondant à l'erreur !

Pour le parcours du dossier, tu peux jeter un oeil à DirectoryIterator, qui est une amélioration (et un passage en objet) de opendir et cie.

Mais tout ca, ce n'est que des broutilles ! :)

Très bon boulot et beaux efforts de ta part de mettre le code à jour ! :)

Je te met 8/10 :)
tiger222 Messages postés 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 septembre 2008
20 sept. 2008 à 22:36
Merci beaucoup pour ces indications !

Du coup, j'ai changé les noms des fonctions privées, mis en place la gestion des erreurs, le lien pour les fonctions precedente et suivante a été revu pour prendre en compte l'URL complète, et si jamais l'utilisateur entre manuellement un numéro dans l'URL mais qu'il n'existe pas dans le tableau, alors on redirige vers l'image de départ.

J'ai commencé à regarder pour la SPL, mais c'est tout nouveau, je mettrai à jour dès que ce sera au point.

Merci ;)
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
19 sept. 2008 à 19:56
Bon, ca s'améliore, et je te félicite pour l'effort que tu y as mis :)

Cependant, j'ai encore quelques remarques (histoire de perfectionner la chose encore)

Ta fonction erreur, qu'est-ce que je vois dedans ??? Nan mais ??? Lance des exceptions plutôt, c'est à l'utilisateur de ta classe de faire en sorte d'attraper les exceptions que tu lance afin que son code se déroule bien (throw new Exception ($this->tableau_erreur[$numero]);)
Par ailleur, quand tu appel cette fonction, tu lui passe en paramètre un nombre mais en string ($this->erreur('3');), c'est un nombre, passe le comme tel ($this->erreur(3);)

Ensuite, tes méthodes suivant et précédent, tu propose une url avec ?[constante]=$var, constante étant param_url et valant forcément img. Je te met devant deux problemes :
Si ma page possède d'autres paramètres en GET, avec ton script je suis coincé ca marchera pas (genre id_repertoire=3 pour une requete dans une bdd (par ex)), ton script va me forcer l'affichage de ma page avec img=x et mon script ne saura plus quel repertoire correspond la page en cours.
Autre problème, si j'ai déjà une variable en GET qui s'appele img (pour une raison quelconque), ton script va la modifier à son usage, voir pire, va planter car le paramètre fourni pour la valeur $_GET['img'] ne sera pas celui auquel il s'attends (ca peux être le répertoire, car j'ai décidé que mon repertoire serait passé en get, par la clée "img").

Moralité : propose le nom de variable comme paramètre, et prends en compte les autres arguments de la page actuelle.

Petit point négligeable, en règle général, on préfixe les fonctions privées/protégées par un _ (private function _myPrivateFunction). Mais c'est rien de bien important ;)

Dernier point, et non des moindres : Ta fonction lister_miniatures retourne un tableau de valeurs, c'est pas mal. Le niveau au dessus maintenant, c'est de se tourner vers la SPL, notament vers les interfaces Iterate, Seekable et Countable, qui te permette de parcourir un résultat juste avec un foreach !
(imagine :
<?php
$obj = new lectureEnLigne ('images/');
foreach ($obj as $images) {
echo '
';
}
?>

Et voila, toutes mes images sont affichées !
C'est d'un niveau supérieur, mais ca vaut franchement le coup !

A toi de voir :)

Mais bon boulot quand même ! :)

J'attends ton prochain commentaire pour noter (si tu préfère t'arreter là) ou continuer (auquel cas je noterai après la prochaine mise à jours)
tiger222 Messages postés 13 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 27 septembre 2008
19 sept. 2008 à 17:49
Merci du retour CodeFalse. Les modifications ont été apportées !
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
18 sept. 2008 à 15:00
J'ai bien aimé l'idée de la classe, j'ai bien apprécié le style de code dans la classe ... jusqu'à la moitié !
Pourquoi ?

PAS DE HTML DANS TES CLASSES !!!

Si j'ai un style perso sur mon site et que je veux utiliser ta classe, sans adaptation, je suis coincé. Donc si je cherche une classe de ce style, je ne prendrais pas la tienne car d'autres proposent le même rendu (ou presque) sans me forcer à modifier ton code !

Tu peux créer une classe externe qui utilise un template pour le rendu, ou prendre directement un fichier php simple et faire des trucs genre
path; ?>" alt="<?php echo $myImageClass->title; ?>" />
et pour la liste des images
<?php
$Images = $myImageClass->getAll ();
foreach ($Images as $Image) {
" alt="<?php echo $Image['title']; ?>" />
}
?>

comme ca l'utilisateur de ta classe n'aura qu'à adapter la partie html à son site, et c'est tout !