Une class sitemap pour afficher l'arborescence de votre site.

Soyez le premier à donner votre avis sur cette source.

Vue 10 816 fois - Téléchargée 1 081 fois

Description

Cette source permet d'afficher l'arborescence de votre site sous forme de lien et d'afficher une barre de navigation du type :
"home -> page 1 -> page actuelle"

La source de donnée est un fichier XML que j'ai appelé web.sitemap (...).

Source / Exemple :


<?php 
	// instanciation
	$oSiteMap = new Sitemap();
	
	// personnalisation
	$oSiteMap->setSeparatorImg("./images/puce2.gif");
	$oSiteMap->setPageImg("./images/design/filesystem/file_other.gif");
	$oSiteMap->setSiteMapCss("border-left:dashed 1px #cecece;");
		
	// chargement du fichier
	$oSiteMap->loadXmlFile("Web.sitemap");
		
	// affichage du chemins
	echo "<div style=\"margin-top:10px;\">\n";
	$oSiteMap->print_path($_SERVER['PHP_SELF']);
	echo "</div>\n";
		
	// affichage de la structure du site
	$oSiteMap->print_sitemap();
?>

Conclusion :


Merci de me transmettre vos critiques.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 18
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 ?
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. :'-(
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
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 18
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
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.