文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>根据URL参数显示网站地图

根据URL参数显示网站地图

时间:2011-05-27  来源:小马的酒吧

一 写法一: 

1. 网站地图文件Web.sitemap

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="~/Default.aspx" title="首页"  description="首页" resourceKey="root">
      <siteMapNode url="~/Category.aspx" title="分类页" description="分类页" resourceKey="category">
        <siteMapNode url="~/Item.aspx" title="单品页" description="单品页" resourceKey="item" />
      </siteMapNode>
    </siteMapNode>
</siteMap>

2. 页面上增加站点地图控件

<asp:SiteMapPath ID="SiteMapPath1" runat="server">
 </asp:SiteMapPath>

    页面就会显示出相应的页面站点地图名:

    首页、分类页、单品页 等

3. 覆写方法,使得面包屑显示的名称更为人性化

    比如女装分类页面,地图上不只是显示:首页->分类页,而是显示为:首页->女装分类。

    这样就要在 分类页Category.aspx ,Page_Load里增加事件:

    if (!IsPostBack && !string.IsNullOrEmpty(Request.QueryString["name"]))
   {
       SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);
    }

    SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);

    事件说明:

    SiteMapResolve事件处理动态地改变目前的SiteMapNode。

    本页面覆写事件方法thisPage_SiteMap_SiteMapResolve:

        SiteMapNode thisPage_SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
        {
            // 只需要在一个执行一个请求。

            SiteMap.SiteMapResolve -= new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);

            if (SiteMap.CurrentNode != null)
            {
                // SiteMap.CurrentNode是只读的,所以我们需要一个克隆操作。

                SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);

                currentNode.Title = Request.QueryString["name"];

                // Use the changed one in the breadcrumb.
                return currentNode;
            }
            return null;
        }

     这样URL :/Category.aspx?name=女装分类 ,显示为 : 首页 > 女装分类

 4. 覆写 单品页 站点地图面包屑。

     在覆写前,显示如下 首页 > 分类页 > 单品页

     要显示如下: 首页 > 女装分类 > 时尚外套

     同上面增加页面 

     if (!IsPostBack && !string.IsNullOrEmpty(Request.QueryString["name"]))
   {
       SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);
    }

    覆写方法:

   

SiteMapNode thisPage_SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
        {
            // 只能请求一次
            SiteMap.SiteMapResolve -= new SiteMapResolveEventHandler(thisPage_SiteMap_SiteMapResolve);

            if (SiteMap.CurrentNode != null)
            {
                // SiteMap.CurrentNode是只读的,所以我们需要一个克隆操作。
                SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);

                currentNode.Title = Request.QueryString["name"];
  
  //从数据库取出当前单品的分类名
                currentNode.ParentNode.Title = Database.GetCategoryByItem(Request.QueryString["name"]);
                currentNode.ParentNode.Url = "/Category.aspx?name=" + Database.GetCategoryByItem(Request.QueryString["name"]);

                // 返回改变后的面包屑
                return currentNode;
            }
            return null;
        }


 

二、另外种写法:同样也是针对相同页面有不同参数传递

 protected void Page_Load(object sender, EventArgs e)         {                      if (!Page.IsPostBack)             {

                //文章类型ID

                SiteMapID = Request.QueryString.Get("SiteMapID");                 requestURL = Request.Url.ToString().Replace("/", "");                 SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);             }         }

 

 

SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)         {             // 只需要在一个执行一个请求。             //SiteMap.SiteMapResolve -= new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);             SiteMapNode currentNode = null;             //如果当前被请求页的SiteMapNode不为空,就把当前页的SiteMapNode赋值个新副本             if (SiteMap.CurrentNode != null)             {                 currentNode = SiteMap.CurrentNode.Clone(true);             }             else             {                 //如果为空,根据URL找到对应节点赋值给currentNode                                 if (SiteMapID != "" && requestURL.Contains(SiteMapID))                 {                     SiteMapNode smn = SiteMap.Provider.FindSiteMapNode("~/CommonPage/ShowList.aspx?SiteMapID=" + SiteMapID);                     currentNode = smn;                 }                            }             return currentNode;         }

部分Web.sitemap

  <?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >   <siteMapNode url="CommonPage/index.aspx" title="首页"  description="首页">     <siteMapNode url="" title="组织机构"  description="" >       <siteMapNode  url="CommonPage/ShowContent.aspx?ContentID=42504711-4BE0-4C04-BC22-9D071FC7D3B2"                     title="AOC"  description="AOC" />     </siteMapNode>     <siteMapNode url="" title="追溯指南"  description="" >       <siteMapNode  url="CommonPage/ShowList.aspx?CategoryID=3A33D061-97D7-40B0-8618-231570317DCF"                     title="解决方案"  description="解决方案" >         <siteMapNode   url="CommonPage/ShowList.aspx?SiteMapID=3A33D061-97D7-40B0-8618-231570317DCF"                        title="正文"  description="正文" />       </siteMapNode>       <siteMapNode  url="CommonPage/ShowList.aspx?CategoryID=6669190F-F5DB-4A1A-BB54-A2EC66C58FD4"                     title="应用案例"  description="应用案例" >         <siteMapNode   url="CommonPage/ShowList.aspx?SiteMapID=6669190F-F5DB-4A1A-BB54-A2EC66C58FD4"                       title="正文"  description="正文" />       </siteMapNode>     </siteMapNode>

 

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载