Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

Catégorie :Xml Classé sous : plan site, site map, xml, navigation Niveau : Débutant Date de création : 11/07/2008 Vu / téléchargé: 3 454 / 218

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • <?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();
  • ?>
<?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.

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de neigedhiver le 11/07/2008 17:22:02 8/10

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 ?

signaler à un administrateur
Commentaire de waterw72 le 11/07/2008 20:53:23

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. :'-(

signaler à un administrateur
Commentaire de nico1610 le 14/07/2008 11:27:56

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 -->
<img src="{img.src}" alt="{img.alt}" />
<!-- 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 :

<img src="mon_image.png" alt="" />
<img src="mon_image2.png" alt="" />

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

signaler à un administrateur
Commentaire de neigedhiver le 15/07/2008 16:51:10

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

signaler à un administrateur
Commentaire de nico1610 le 15/07/2008 17:21:42

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.

signaler à un administrateur
Commentaire de waterw72 le 18/07/2008 09:25:36

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.

signaler à un administrateur
Commentaire de waterw72 le 18/07/2008 09:41:17

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 ...

signaler à un administrateur
Commentaire de neigedhiver le 18/07/2008 10:06:47

Salut,

Je suis pas certain d'avoir bien compris ta question... Alors je ne me risquerai pas à y répondre... ^^

signaler à un administrateur
Commentaire de waterw72 le 18/07/2008 10:21:16

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();

signaler à un administrateur
Commentaire de neigedhiver le 18/07/2008 11:33:30

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 ?

signaler à un administrateur
Commentaire de waterw72 le 18/07/2008 12:37:08

Oui, juste une petite question la Vue, c'est l'interface donc du HTML CSS, ect mais une classe? si?

signaler à un administrateur
Commentaire de neigedhiver le 18/07/2008 14:22:29

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.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Faire un suivi de navigation [ par gby ] Salut à tous,j'aimerais que les divers pages de mon site réparties dans plusieurs réperoires puissent être suivi par le navigateur.Ex bien connu : Acc Suivi de navigation suite [ par gby ] Salut à tous,le bout de code qui me permet de récupérer le nom du fichier donc de la page en cours : &lt;?php $nb = count(explode ("/", $REQUEST_URI)) Php et excel ???? [ par Adagyo ] Salut @ tous,Je cherche un moyen de faire communiquer le contenu d'une base MySQL avec un tableau Excel.J'ai pensé à passer par du XML (je fait une re navigation dynamique [ par CouB ] voila je voudrais pouvoir générer un barre de nav (prec. / suivant /fin) par rapport à une variable .($BBA_IDL)Pour l'instant j'arrive à ca : &lt;?php livre d'or avec flash et xml [ par bryc2 ] J'ai à faire un livre d'or avec flash et xml,y'a t'il quelqu'un qui pourrait me donner des informations à ce sujet?merci d'avance!!! Comment modifier des XML avec PHP??? [ par guiout ] Salut à tous,voilà mon pb, je voudrais traiter des XML existantes.Par traiter j'entends modifier le contenu textuel entre certaines balises.J'utilise PHP XML .... ? [ par Joez ] Voila comment faire pour mettre ce fichier www.cfp29.org/CDI2.XML dans une base de données Mysql ?je ne sais pas faire .... XML et PHP [ par tom ] Bonjour tout le monde!Est ce que quelqu'un sait comment récupérer des données XML dans une page PHP? $HTTP_POST_VARS ne marche pas...Merci pour votre xml et mysql [ par boin ] salut,je voudrais savoir s'il est possible d'importer un fichier xml vers une base mysql?merci d'avance.B2 Parser xml en php [ par tahbre ] Bonjour à tous, Je dois accéder à un fichier xml qui est sur un autre site ftp que le mien, et je veux réaliser un parser en php de façon à stocker l


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.