Laden...

[gelöst] Webseite Menu dynamisch Links mit XML einfügen

Erstellt von Myar vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.191 Views
M
Myar Themenstarter:in
32 Beiträge seit 2008
vor 15 Jahren
[gelöst] Webseite Menu dynamisch Links mit XML einfügen

verwendetes Datenbanksystem: <XML/MySQL>

Hallöchen!

Ich versuche gerade in einer ASP.NET Seite ein dynamsiches Menu aufzubauen.
Und zwar gibt es ca. fünf verschiedene Varianten, wie das Menu aufgebaut sein kann.
Also dachte ich mir, ich baue diese Varianten in eine XML Datei (ich habe damit meine erste XML Datei überhaupt erstellt) und lasse das Menu erstellen, je nachdem wie der Status der Seite ist.

Nach Recherche im INternet konnte ich zum Beispiel leider nicht herausfinden, wie ich Hyperlinks im XML defieniere, oder am besten gleich ASP Hyperlinks.

Dann versuche ich die XML Datei einzulesen, doch es passiert gar nichts.
Ich glaube, meine Vorgehensweise ist wohl komplett falsch... hier mal Code:

Die XML Datei:
(noch unvollständig)

<?xml version="1.0" encoding="utf-8" ?>
<Menu>
  <loggedout>
       Hauptmenü
      <link name="Registrieren" url="login.aspx?showpage=login">Registrieren</link>
      <link name="Passwort vergessen" url="login.aspx?showpage=pwvergessen" />
      <link name="Anmelden" url="login.aspx?showpage=anmelden" />
    
    Support
    Neuigkeiten
    FAQ
    Forum
    Ticketsystem
  
  </loggedout>
<loggedinnochar>
  ~ Charakter ~
Charakter erschaffen
</loggedinnochar>
etc...
</Menu>

Dann die Stelle in der Master Page wo das rein soll:

<div id="navi"> <!--Navigation links-->
			    <div id="navi_content" class="clearfix">
                    <asp:Label ID="navi_cont" runat="server"></asp:Label>
                  </div>
		    </div>

Und der Code zum befüllen des Labels:

protected void menu()
    {
        XElement menu1 = XElement.Load("C:/inetpub/wwwroot/xml/menu.xml");
        foreach(XElement menu in menu1.Elements())
          navi_cont.Text = menu1.Element("loggedout").Value;
        
    }

Habe mir gedacht, durch if Abfragen, kann ich zwischen den Tags switchen und so das Menu halt ändern lassen...

Wird wohl schon allein daran scheitern, das in das Label keine Links können? I dont know...

Gruß
Myar

M
Myar Themenstarter:in
32 Beiträge seit 2008
vor 15 Jahren

Okay, ich habe es (zum Teil) hinbekommen (mit etwas Hilfe).

Gibt aber immer noch ein kleines Problem..

Der Code sieht nun so aus:

private void loadMenu()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(@"C:/inetpub/wwwroot/xml/menu.xml");

        XmlNodeList elemList = doc.GetElementsByTagName("loggedout");
        for (int i = 0; i < elemList.Count; i++)
        {
            foreach (XmlNode el2 in elemList[i].ChildNodes)
            {
                if (el2.Name == "siteMapNode")
                {
                    // ... Hauptmenütitelanzeigen
                    navi_cont.Text = "<p>" + el2.Attributes["title"].Value + "</p>";
                    loadLinks(el2.ChildNodes); //Links anzeigen
                    
                }
            }
        }
    }

    private void loadLinks(XmlNodeList mainMenus)
    {
        foreach (XmlNode el2 in mainMenus)
        {
            if (el2.Name == "link")
            {
                navi_cont.Text = "<p><a href='" + el2.Attributes["url"].Value + "'>" + el2.Attributes["title"].Value + "</a></p>";
            }
        }
    } 

Dazu die XML nochmal (leicht geändert):

<?xml version="1.0" encoding="utf-8" ?>
<Menu>
  <loggedout>
      <siteMapNode title="~Hauptmenü~" description="Hauptmenü">
          <link title="Registrieren" url="?showpage=registrieren" />
          <link title="Passwort vergessen" url="?showpage=pwvergessen" />
          <link title="Anmelden" url="?showpage=anmelden" />
      </siteMapNode>
      <siteMapNode title="Support" url="">
            <link title ="Neuigkeiten" url="" />
            <link title="FAQ" url="" />
            <link title="Forum" url="" />
            <link title="Ticketsystem" url="?showpage=ticket" />
      </siteMapNode>
  </loggedout>
  <loggedinnochar>
    <siteMapNode title="Support">
      <siteMapNode title ="Neuigkeiten" />
      <siteMapNode title="FAQ" />
      <siteMapNode title="Forum" />
      <siteMapNode title="Ticketsystem" />
    </siteMapNode>
  </loggedinnochar>
</Menu>

Nun ist es aber so, dass mir nur das letzte Element angezeigt wird. Also anscheinend die Zeile immerwieder überschrieben und somit das Label nur mit einer Zeile überschrieben.
Schöner wäre aber, wen alle Elemente innerhalb von z.B. <loggedout> angezeigt werden würden.

Weiß wer Rat?

Gruß
Myar

M
53 Beiträge seit 2006
vor 15 Jahren

Hi Myar,
so wie ich das sehe muss in loadLinks das "navi_cont.Text = " durch "navi_cont.Text += " ersetzt werden damit nicht nur das letzte Element angezeigt wird.
Gruss
Markus

M
Myar Themenstarter:in
32 Beiträge seit 2008
vor 15 Jahren

Hallöchen Markus!

Hat geklappt, vielen Dank für die Hilfe!

Gruß
Myar