SiteMap Chování

hlasů
0

Měl jsem dobrý výhled přes zatížení MS dokumentace jen najít stromovou strukturu pro používání Sitemap. Nepředpokládám, že někdo je vědom toho, jak je to možné mít adresářovou strukturu podobnou pro sitemap navigaci? Vezměme si například strukturu takto

Home
   About
      Me.aspx
      MyFamily.aspx
      MyPets.aspx
   Contact
      Telephone.aspx
      Email.aspx
 Disclaimer.aspx

„About“ a „Kontakt“ by složky, ale sitemap není nikdy hierarchický na jedné stránce. Takže bych mít svou kořenovou stránku se dvěma položkami menu, kdo by „Home“, který působí jako složky vrtat dolů do asi a kontaktní menu, a druhý je odkaz na stránku pro upozornění. Chci, aby bylo možné kliknout na domovské stránce, která bude znovu menu s odkazy na „O“ a „Kontakt“ a skrýt „Home“ a „Prohlášení“ úplně.

Home >
Disclaimer

Poté klikněte na tlačítko domů a vy byste dostat

About >
Contact >

Pak, když kliknete na asi byste dostat

Me
My Family
My Pets

Každý Nabídka by mít „nahoru“ nabídku vrátit se do složky.

Nevidím tam je jednoduché řešení, ale v současné době používáme statické HTML stránky, které jsou v různých složkách v celé naší webové aplikace. To je něco, co je třeba změnit, jak si lze dobře představit.

Nějaké nápady?

UPRAVIT

Musel jsem přijít s řešením VB.NET

<script runat=server>
  Private Function GetSecondaryNavItems() As String
    Dim sRet As String = 

    Dim oCurrNode As System.Web.SiteMapNode = Nothing
    Dim oCurrParentNode As System.Web.SiteMapNode = Nothing

    'Dim sCurrPage As String = GetURL(Request.ServerVariables(SCRIPT_NAME).ToLower())
    Dim sCurrPage As String = GetURL(HttpContext.Current.Request.ServerVariables(SCRIPT_NAME).ToLower())
    oCurrNode = GetCurrentNode(sCurrPage, SiteMap.RootNode)

    If Not oCurrNode Is Nothing Then
      oCurrParentNode = oCurrNode.ParentNode
    End If

    If Not oCurrParentNode Is Nothing Then
      If Not oCurrParentNode Is SiteMap.RootNode Then
        sRet += Parent Folder Link

        If Not oCurrNode Is Nothing Then
          For Each oChild As SiteMapNode In oCurrParentNode.ChildNodes
            sRet += Link for child
          Next
        End If
      End If
    End If

    Return sRet
  End Function

  Private Function GetURL(ByVal fullURL As String) As String
    Return fullURL.Substring(fullURL.LastIndexOf(/))
  End Function

  Private Function GetCurrentNode(ByVal _sCurrentPageURL As String, ByVal _oNode As SiteMapNode) As SiteMapNode
    Dim oNodeRet As SiteMapNode = Nothing

    For Each oNodeCheck As SiteMapNode In _oNode.ChildNodes
      If oNodeCheck.HasChildNodes = True Then
        oNodeRet = GetCurrentNode(_sCurrentPageURL, oNodeCheck)
      End If

      If oNodeRet Is Nothing Then
        Exit For
      End If

      Dim sURL As String = oNodeCheck.Url.ToLower()
      Dim iPos As Integer = sURL.IndexOf(?)

      If iPos > 0 Then
        sURL = sURL.Substring(0, iPos)
      End If

      iPos = sURL.LastIndexOf(/)

      If iPos > 0 Then
        sURL = sURL.Substring(iPos)
      End If

      If sURL = _sCurrentPageURL Then
        oNodeRet = oNodeCheck
        Exit For
      End If
    Next

    Return oNodeRet
  End Function
</script>

To je v souboru vzorové stránky přímo (dočasná, budu vložte jej do kódu za modelu později).

Já jsem pak dostal to v těle

<div id=sidebar>
  <%= GetSecondaryNavItems() %>
</div>

Opět platí, že dočasně jen pro testování. To není ve skutečnosti nic jiného, ​​než výstup pak Přemýšlím svou definici getURL je nesprávná. Byl jsem za předpokladu, že to bylo jen na to skutečný soubor? Mohl bych být velmi špatně ačkoli :)

EDIT EDIT : Z nějakého důvodu jsem nedostal žádný výstup, a tak jsem si myslel, že to byla moje sitemap. Budu muset ladit, ale já vzdálené komunikace v okamžikem, takže je to docela pomalé)

<?xml version=1.0 encoding=utf-8 ?>
<siteMap xmlns=http://schemas.microsoft.com/AspNet/SiteMap-File-1.0 >
  <siteMapNode url=Accounts/Default.aspx title=Accounts  description=Accounts>
    <siteMapNode url=Accounts/Test.aspx title=Client Balances description=Client Balances>
      <siteMapNode url=Hello.aspx title=Hello  description=rarar />
      <siteMapNode url=Hiya.aspx title=Hiya  description=rarar />
    </siteMapNode>
    <siteMapNode url=Test.aspx title=Test  description=rarar />
  </siteMapNode>
</siteMap>

Zde je příklad sitemap.

Položena 10/03/2009 v 15:42
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

I když jsem neměla reagovat bych vlastně zeptat na něco dalšího, aby to. Je možné dělat přesně to samé, ale s použitím stránku, která se skládá z jednoduše <ul>a <li>prvky? Důvod, proč se ptám, je proto, že naše „sitemap“ je ve skutečnosti o něco vyspělejší z hlediska bezpečnosti a funkčnosti. Nabídky provozujeme skutečně dynamický rozevírací seznam s vstupní pole, to je něco, co nemůže být reprodukovány v souboru Sitemap.

Takže jde o to, dělat přesně to samé s výjimkou

<ul>
   <li>
      <ul>
         <li></li>
      </ul>
   </li>
   <li></li>
   <li></li>
</ul>

strukturu místo. Kořen by musel mít runat = „server“ na to, že způsob, jak byste mohli přetínat všechny podřízené prvky, snad? Tento způsob, jak mohu umístit něco v mých <li>a </li>prvků.

Naše bezpečnost je velmi sporadická i něco Sitemap nemá takovou granulární kontrolu hledáte buď my.

Odpovězeno 16/03/2009 v 10:42
zdroj uživatelem

hlasů
1

Dalo by se i nadále používat Sitemap.sitemap soubor ovládat navigaci, ale ty by se použít některou z vestavěných ovládacích prvků v ASP.NET k dosažení tohoto cíle. Jen jsem dělal téměř právě tuto věc na místě, právě jsem dokončil.

Aby všechny vaše stránky dědí ze třídy base stránky (nebo použít vzorových stránek, ať tak či onak, budete mít pouze 1 kopii svého kódu.)

Vytvoření div nebo span na každé straně, pojmenovaný něco vhodného (divNav nebo spnNav nebo odjinud).

Ve své základně stránky, na načtení stránky, smyčka přes všechny uzly mapa stránek najít uzel aktuální stránky. To musí být rekurzivní volání.

    // Pass the current page url, all the way through the .aspx.  In other words, do NOT pass any kind of 
    // query string.
    private SiteMapNode GetCurrentNode(string _sCurrentPageURL, SiteMapNode _oNode)
    {
        SiteMapNode oNodeRet = null;

        foreach (SiteMapNode oNodeCheck in _oNode.ChildNodes)
        {
            if (oNodeCheck.HasChildNodes == true)
            {
                oNodeRet = GetCurrentNode(_sCurrentPageURL, oNodeCheck);
            }

            if (oNodeRet != null)
                break;

            string sUrl = oNodeCheck.Url.ToLower();
            int iPos = sUrl.IndexOf("?");
            if (iPos > 0)
                sUrl = sUrl.Substring(0, iPos);
            iPos = sUrl.LastIndexOf("/");
            if (iPos > 0)
                sUrl = sUrl.Substring(iPos);

            if (sUrl == _sCurrentPageURL)
            {
                oNodeRet = oNodeCheck;
                break;
            }
        }
        return oNodeRet;
    }

Jakmile budete mít aktuální uzel, dostat své rodiče.

Přidání odkazu (dále jen „menu se vrátit se do složky“, jak to nazval).

Potom proveďte foreach (SiteMapNode v parent.ChildNodes)

Přidat odkaz pro každé dítě.

Takže náš hlavní výzva, které jsme nazvali na každém načtení stránky, bylo takhle:

    public string GetSecondaryNavItems()
    {
        string sRet = "";

        // Get the node that matches most of this url...
        System.Web.SiteMapNode oCurrNode = null;
        System.Web.SiteMapNode oCurrParentNode = null;

        string sCurrPage = GetURL(Request.ServerVariables["SCRIPT_NAME"].ToLower());

        oCurrNode = GetCurrentNode(sCurrPage, SiteMap.RootNode);

        if(oCurrNode != null)
            oCurrParentNode = oCurrNode.ParentNode;

        if(oCurrParentNode != null)
              if(oCurrParentNode != SiteMap.RootNode)
                  sRet += "Parent Folder link";

            if(oCurrNode != null)
            {
            foreach (System.Web.SiteMapNode oChild in oCurrParentNode.ChildNodes)
            {
                    sRet += "Link for child";
              }
        }
    }

Musím vám říci, že výše uvedený kód je součástí zkopírovány a část štědrý mnou. Ale to by vám dobrý start, řekl bych.

EDIT: Je mi líto! Zde je getURL proc ...

    public string GetURL(string _sURL)
    {
        string sRet = _sURL;

        int iPos = sRet.IndexOf("?");
        if (iPos > 0)
            sRet = sRet.Substring(0, iPos);
        iPos = sRet.LastIndexOf("/");
        if (iPos > 0)
            sRet = sRet.Substring(iPos);

        return sRet;
    }
Odpovězeno 10/03/2009 v 17:36
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more