UNE CLASS SITEMAP POUR AFFICHER L'ARBORESCENCE DE VOTRE SITE.

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 11 juil. 2008 à 17:22
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 18 juil. 2008 à 14:22
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/47297-une-class-sitemap-pour-afficher-l-arborescence-de-votre-site

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
18 juil. 2008 à 14:22
Ben... Dans le cas d'un site web, c'est surtout le CSS, surtout si le XHTML est bien pensé. C'est justement dans cette direction que portent les travaux du W3C sur XHTML et CSS3.
Je te conseille donc de ne pas t'occuper des CSS.
Tes classes peuvent produire des données brutes (des tableaux, des itérateurs, etc). Des classes spécialisées peuvent ensuite mettre en forme ces données, dans ton cas, tu t'occuperas du XHTML. Tu mets les données en forme selon un format de présentation des données.
Les CSS c'est juste pour embellir.
waterw72 Messages postés 63 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 18 juillet 2008
18 juil. 2008 à 12:37
Oui, juste une petite question la Vue, c'est l'interface donc du HTML CSS, ect mais une classe? si?
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
18 juil. 2008 à 11:33
Tout dépend de ce que toi tu veux faire.
MVC n'est qu'un design pattern, que tu es libre de respecter ou non.
Il semble effectivement que ASP.net ne respecte pas tellement MVC. Je dis "semble", parce que je ne connais pas du tout ASP.net. Cependant, il semble manifeste qu'il permet d'aller carrément à l'encontre de MVC (libre à chacun j'imagine d'utiliser les méthodes fournies ou d'autres de son choix).

Une méthode setCssClass() de la classe oSiteMap est manifestement contraire à MVC : tu mélanges dans ce cas le modèle (ou le contrôleur) et la vue.
Ce ne doit pas être à cette classe de gérer les CSS. La raison est simple : ça implique trop de changements lors de l'intégration.
Si le développeur qui veut intégrer ta classe dans son site souhaite modifier ses CSS (ce qui est tout à fait légitime...) il devra en plus se fader la méthode setCssClass de ta classe. Si tout le monde fait pareil, il devra faire pareil pour TOUTES les classes qui produisent un affichage. On en revient à un développement mal pensé où pour modifier une couleur on doit faire 250 modifications, dans toutes les sources intégrées pour les mettre en adéquation graphique avec son site.

Un classe du modèle doit fournir des données brutes et rien d'autre. Pas de mise en forme, ce n'est pas son travail.
Les données brutes doivent pouvoir être facilement mises en pages par l'utilisateur. Pour cela, on peut imaginer une classe pour chaque type d'affichage (XML, XHTML, PDF, PNG, LaTeX, Texte brut, etc). Dans ton cas, tu n'en implémenterais qu'une : celle dont tu as besoin ; mais l'utilisateur pourrait facilement la réécrire (en écrire une autre) qui lui permettrait de produire du HTML 3.2 avec des tableaux (beurk), du XML, ou autre.
A toi de penser suffisament bien les données produites pour qu'elles puissent être mises en page facilement.
Concrètement, un ID pour le bloc de plus haut niveau. Les autres éléments que celui-ci contient peuvent alors être accédés depuis celui-ci :
#site_map ul li

Est-ce que c'est plus clair ?
waterw72 Messages postés 63 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 18 juillet 2008
18 juil. 2008 à 10:21
Pour ma seconde question.
Apparemment, tu as considéré ma classe faisant partie du modèle dans un concept de développement MVC (Modèle Vue Contrôleur).

Moi, j'avais considéré ma classe comme un composant que l'on pourrait comparer avec un composant ASP.Net tel qu'un label.
Le composant label possède des méthodes qui permettent de traiter les données (ex : la propriété .Text) et des attributs qui permettent de modifier l'apparence (ex : .Forecolor pour la couleur du text).

rmq : Je ne pense pas que ASP.Net soi respecte la logique MVC.

Enfin, pour en venir à ma question, pourquoi ma classe ne pourrait-elle pas être considérée comme un composant avec des attributs (d'affichage) et des méthodes au même titre que le label d'ASP.Net?

___
Pour ne pas utiliser les templates, que je ne maîtrise pas encore, serait-il correct de faire une classe sitemap.class.php (sans HTML) et un controller sitemap.controler.php (avec HTML, CSS)qui aurait des propriétés tel que : image de séparation, class css, ... ect

le controler hériterait de la class?

je sais que dans ce cas, le php serait tout de même dans le html mais de cette manière :
$oSiteMap = new SiteMap_controler();
$oSiteMap->setImageUrl = "";
$oSiteMap->setCssClass = "";
$oSiteMap->setSecurity = "";
$oSIteMap->printSitemap();
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
18 juil. 2008 à 10:06
Salut,

Je suis pas certain d'avoir bien compris ta question... Alors je ne me risquerai pas à y répondre... ^^
waterw72 Messages postés 63 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 18 juillet 2008
18 juil. 2008 à 09:41
Bête question,
pourquoi ma classe doit être une classe dans le "modèle" et non considérée comme un composant?
Un peu comme on utilise en ASP.Net avec des propriétés d'affichages, ect ...
waterw72 Messages postés 63 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 18 juillet 2008
18 juil. 2008 à 09:25
Bonjour,

Est-il possible d'établir une arborescence avec un sitemap tel que défini par sitemap.org.
Mon fichier sitemap permet d'imbriquer des "liens", ce qui ne semble pas possible avec sitemap.xml.

Si c'est pas possible, je vois pas trop l'intérêt. Ma source a pour but de mettre facilement en place un plan de site et une barre de navigation.
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
15 juil. 2008 à 17:21
Je n'ai donné qu'un exemple de template il en existe bien d'autre.
Bien que ce soit un site concurent, voila un très bon article sur les différents templates utilisable :
http://g-rossolini.developpez.com/comparatifs/php/templates/

Pour ma part je suis un la PhpLib car les graphistes qui me crée les pages templates et les chartes graphique ne vont pas s'ammusé a aprendre un code spécifique, avec phplib (utilisé par phpbb) tu n'asbesoin de connaitre que l'Html (ou Xhtml) et quelque regle d'usage.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 juil. 2008 à 16:51
Salut,

Concernant les exceptions, c'est un sujet assez complexe, qui est assez mal traité dans la doc et dans la plupart des tutos qu'on trouve sur le net.
En toute logique, cependant, une exception est levé depuis une classe, si le script rencontre une erreur. Le gestionnaire d'erreurs (d'exceptions dans ce cas précis) doit se situer au niveau du contrôleur, pas au niveau du modèle (la classe). Ce n'est pas à toi, qui fournis une classe prête à l'emploi, de définir comment gérer les exceptions : c'est à celui qui va utiliser ta classe de le faire, en fonction de ses besoins et du fonctionnement de son site.
Donc oui : tu lèves une exception, et tu ne l'attrappes pas. Tu laisses ce soin au développeur qui utilise ta classe.

Concernant les templates, j'aurais tendance à conseiller Smarty, plus évolué et plus performant que phpLib => http://www.smarty.net
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
14 juil. 2008 à 11:27
Un template est un squelette de ton affichage qui te permet de générer l'affichage.

Par exemple on peut avoir un template img.tpl (exemple phplib) :
<!-- BEGIN img -->

<!-- END img -->

ainsi tu peux en php faire ceci :
$t = new Template(...); // je détaille pas de code ici !
...
$t->assign_block_vars("img",array("src"=>"mon_image.png"));
$t->assign_block_vars("img",array("src"=>"mon_image2.png"));
...
$t->pparse();

ce qui donnera :




Ce n'est qu'un exemple bidon et simplifier des possibilité des templates, il en existe des tas, certain (comme phplib) ne gère que l'affichage, d'autre plus poussé sont capable de gérer une phase de traitement (boucle for, if ..) avant d'afficher.

Pour gérer les exeptions, c'est pas simple, faut imaginer tout ce qui pourrai faire buger ta classe, et avant que cella puisse générer une erreur, faire une vérification et stopper ton script en cas de besoin ; par exemple :
exit("ERROR : param $array need an array !");

Pour les sitemaps, Google microsoft et yahoo on fait ca : http://www.sitemaps.org/fr/ , regarde l'onglet "protocole".

Voila je pense que si tu veux de plus ample information tu peut faire appel a l'ami de tous : http://www.google.fr
waterw72 Messages postés 63 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 18 juillet 2008
11 juil. 2008 à 20:53
Bonjour,

- C'est quoi un template? (un exemple?)
- Comment gérer les exception alors?
Faut-il que ma class lève une exception (throw) sans la "catcher"?
- le fichier XML ressemble au fichier web.sitemap de ASP.Net d'ou m'est venue l'idée d'ailleurs. (comme l'objet sitemappath).
- je connais pas les sitemaps de google ... un exemple?

Pour finir, et le plus important, merci pour ton commentaire.
On m'a souvent dit de séparer l'HTML de la class mais je connais pas les templates. :'-(
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
11 juil. 2008 à 17:22
Salut,

J'ai survolé rapidement (je le confesse, je n'ai pas regardé en détails) et deux petites choses me gênent...

Tout d'abord le fait que ta classe génère du code HTML. Certes, tu as des méthodes qui permettent de personnaliser un peu l'affichage en définissant des CSS.
J'ai tendance à penser, lors de mes développements, MVC : Modèle-Vue-Contrôleur. Une classe, selon moi, fait partie du Modèle. Le HTML et les CSS, ça fait partie de la vue. Je ne dis pas que ta classe est mauvaise, juste que ça me "semble" aller à l'encontre du modèle MVC (mais il se peut que je me trompe, je ne fais qu'émettre mon avis).
J'aurais plutôt vu un template pour le sitemap, avec des variables (ou équivalent) que le contrôleur se chargerait de remplacer par le contenu de la sitemap.
Ca permet une plus grande facilité d'intégration dans un site préexistant, puisque pour modifier l'affichage, on modifie la Vue, et pas le contrôleur comme c'est le cas dans ta source, grâce aux setters.
Ou alors, la classe pourrait générer du xhtml très basique (des simples listes non ordonnées), et le css étant à la charge de l'intégrateur.

Deuxièmement, la manière dont tu gères les exceptions... Ca me parait un peu inutile de mettre des exceptions si c'est pour les gérer au sein même de la classe, et même, dans la méthode qui lance l'exception.
L'inconvéinent que ça pose, c'est que l'utilisateur qui intègre ta classe dans son site ne peut absolument pas gérer les exceptions comme il l'entend, alors que c'est justement une fonctionnalité que les Exceptions PHP5 apportent.
A mon sens, les blocs try{} catch{} devraient se trouver dans le contrôleur, pas dans le modèle. Donc, pas dans la classe, mais plutôt dans les scripts appelés directement (qui sont, selon moi, le Contrôleur). A chacun d'utiliser (ou non) son gestionnaire d'exceptions. Dans l'état actuel, autant simplement afficher un message d'erreur, l'exception en elle-même n'apporte rien.

Sinon, ça m'a l'air propre, bien documenté (c'est constant chez toi) ce qui est bien. J'ai pas poussé dans le détail, notamment le fichier XML : est-ce qu'il ressemble au format des sitemaps pour Google ou est-ce que ça n'a rien à voir ?
Rejoignez-nous