PeTeRsLaStAr
Messages postés158Date d'inscriptionsamedi 22 juin 2002StatutMembreDernière intervention27 juin 2015
-
18 févr. 2008 à 16:21
lassaad83
Messages postés148Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 1 décembre 2009
-
19 févr. 2008 à 16:52
Bonjour.
Je souhaiterais savoir s'il est possible de dériver un fichier de type web.sitemap
Je m'explique, je souhaiterais rajouter un autre attribut qui soit autre que url, description ou title, afin de pouvoir stocker des informations pour chaque lien stocké...
Est ce que quelqu'un saurait m'indiquer comment faire ?
(sachant que peut être la dérivation n'est pas la meilleure solution hein...)
****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
lassaad83
Messages postés148Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 1 décembre 2009 19 févr. 2008 à 15:36
En fait dans le web.sitemap tu peut ajouter n'importe qu'elle l'attribut.
Pour reprendre ton besoin, tu peut rajouter par exemple un attribut ImageURL au niveau des noeuds de ton web.sitemap que tu pourra recupèrer lors du chargement de ton Menu.
Ton web.sitemap aura l'air de ça ;
<?xmlversion="1.0"encoding="utf-8"?>
<siteMapxmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNodetitle="Home"url="Default.aspx"ImageUrl="~/folder.gif"estActiver ="false">
<siteMapNodetitle="Curriculum vitae"url="Resume.aspx"ImageUrl="~/folder.gif"estActiver ="false"/>
....
et lors du chargement tu doit ajouter ce petit bout de code sur l'évènement MenuItemDataBoud du Menu :
lassaad83
Messages postés148Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 1 décembre 2009 18 févr. 2008 à 16:35
Essaye de lui définir un nouveau shéma XSD pour ajouter les attributs que tu souhaiterais rajouter.
Commence à partir du shéma XSD par défaut d'un fichier Web.SiteMap qui se trouve a ce niveau C:\Program Files\Microsoft Visual Studio 8\xml\Schemas\SiteMapSchema.xsd.
PeTeRsLaStAr
Messages postés158Date d'inscriptionsamedi 22 juin 2002StatutMembreDernière intervention27 juin 20151 18 févr. 2008 à 17:04
Merci, cela fonctionne, je peux maintenant modifier mes paramètres au niveau de mon fichier XML :)
Juste une drnière précision, avant que je valide ta réponse,
Si je parviens bien à rajouter des éléments dans mon fichier sitemap, (ex : toto="test")
Je ne parviens pas à y accéder au niveau de mon code...
SiteMap MySiteMap;
MySiteMap.ChildNodes[0].toto n'existe pas...
Je ne vois pas comment le rajouter... ??
****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
Sinon après je te conseil d'effectuer une boucle qui poura parser de fond en comble ton fichier et ainsi recuperer toute les info, un truc de ce genre quoi :
XmlDocument
xmlLink =
new
XmlDocument();
xmlLink.Load(
"MonWeb.sitemap");
PeTeRsLaStAr
Messages postés158Date d'inscriptionsamedi 22 juin 2002StatutMembreDernière intervention27 juin 20151 19 févr. 2008 à 10:45
Ce n'est pas possible de passer par SiteMapNode plutot ?
Tu vas me dire que SiteMapNode n'est pas assez générique pour ce que je veux faire j'imagine...
****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
PeTeRsLaStAr
Messages postés158Date d'inscriptionsamedi 22 juin 2002StatutMembreDernière intervention27 juin 20151 19 févr. 2008 à 10:50
En fait pourquoi je souhaite passer par SiteMapNode plutot, c'est que je gère les "levels" de mon arborescence, d'une part et que d'autre part, je gère les "roles"...
Donc deux cas de figure, soit je passe tout en XMLNode, et je perds l'intérêt de passer par les SiteMapNode,
soit je garde mes XMLNode, et mes SiteMapNode, mais j'ai deux "navigations" sur un même fichier XML en même temps...
pas top, niveau propreté de codage...
En fait, le gros hic, c'est que la propriété "Attributes" n'est malheureusement pas accessible dans SiteMapNode... si c'était le cas, ça résoudrait bien mes problèmes...
****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
PeTeRsLaStAr
Messages postés158Date d'inscriptionsamedi 22 juin 2002StatutMembreDernière intervention27 juin 20151 19 févr. 2008 à 11:46
Une adresse URL, une description un title, et surtout des roles...
L'idée étant de créer un menu "dynamique" en fonction de mes rôles.
Sachant aussi que l'on gère les autorisations des différentes pages en fonction d'un SiteMapProvider, se basant donc sur les roles de ce siteMap...
Et donc, on souhaite rajouter un attribut, pour avoir en fait une image pour chaque Menu ou URL (afin de préciser, les URL fonctionnelles, en travaux, etc... ce qui ne peut aps être fait de manière statique..)
****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
lassaad83
Messages postés148Date d'inscriptionvendredi 28 avril 2006StatutMembreDernière intervention 1 décembre 2009 19 févr. 2008 à 12:23
Dans ton cas tu doit faire une class qui dérive de la class XmlSiteProvider pour aboutir à tes besoins.
Mais avant je te conseil de jeter un coup d'oeil sur ça : ça devrait beaucoup t'intéresser ...
PeTeRsLaStAr
Messages postés158Date d'inscriptionsamedi 22 juin 2002StatutMembreDernière intervention27 juin 20151 19 févr. 2008 à 12:44
Article intéressant en effet :)
J'en avais entendu parler, mais le voir d'une manière plus approfondie est un bon point...
Cependant, mon supérieur n'est pas chaud pour qu'on le mettre en place... Je vais donc devoir rester sur la première solution...
Tu parles de dériver la class XMLSiteProvider, peux tu m'en dire plus ? J'avais plus penser à dériver la classe SiteMapNode mais je ne vois pas comment m'y prendre...
Car au final, on utilise le SiteMap.Provider à un seul moment : (sauf si je me trompe)
foreach (SiteMapNode MyItem in MyCollection)
{
if (MyItem.ChildNodes.Count > 0)
{
// On prépare le nb de Childs
liNbChild = MyItem.ChildNodes.Count;
for(liNbChildCompteur=0;liNbChildCompteur<liNbChild;liNbChildCompteur++)
{
// vérification qu'on est bien dans une page ou seul le role "toto" est affiché
if (!MyItem.ChildNodes[liNbChildCompteur].Roles.Contains("toto"))
{
// Récupération de l'url
HyperLink MyHL = new HyperLink();
MyHL.PostBackUrl = MyItem.ChildNodes[liNbChildCompteur].Url;
// Récupération de l'attribut que j'ai rajouté dans mon XSD (??? c'est pour cette ligne qu'il faudrait dériver // le SiteMapNode je pense... mais comment s'y prendre ?
MyHL.SkinID = MyItem.ChildNodes[liNbChildCompteur].MySkinID;// (cette ligne ne marche pas hein...)
}
// ...
}
//...
}
****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
PeTeRsLaStAr
Messages postés158Date d'inscriptionsamedi 22 juin 2002StatutMembreDernière intervention27 juin 20151 19 févr. 2008 à 16:13
Merci pour le temps consacré à ces réponses :))
C'est (e.Item.DataItem
asSiteMapNode)[
"ImageUrl"]; qui m'intéressait.
Je l'ai modulé un peu vu que je passe par un menu Krosoft...
En fait, je me cassais à chercher un truc "caseSensitive" alors qu'en fait, c'était simple...
Un grand merci donc pour ton aide lasaad83 ^^
****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher