动态菜单(三)

      同学们看了菜单一菜单二有没有什么特殊的感觉。是不是太简单了。

      现在我们结合第一篇文章来做个练习。

      没事的时候会经常找一些好看的UI,留着自己以后做私单的时候用。 比如easyui、EXT JS啊这些。无意中发现了一个国产的框架。那么今天咱也支持国产一把。

      传送门 DWZ框架。感觉还不错 上个图大家看看。

      动态菜单(三)_第1张图片

 

 动态菜单(三)_第2张图片

      效果还不错吧?呵呵 这节课我们就抄袭了。。

      先去官方网站下载源代码。 传送门

      解压源码打开index.html 页面。HTML的。果断查看源文件。

      这里就不贴代码了。上面是一堆JS根据第一节的“功力”我们可以观察以下代码是菜单

< div  id ="leftside" >
            
< div  id ="sidebar_s" >
                
< div  class ="collapse" >
                    
< div  class ="toggleCollapse" >< div ></ div ></ div >
                
</ div >
            
</ div >
            
< div  id ="sidebar" >

                
< div  class ="toggleCollapse" >< h2 > 主菜单 </ h2 >< div > 收缩 </ div ></ div >

                
< div  class ="accordion"  fillSpace ="sidebar" >
                    
< div  class ="accordionHeader" >
                        
< h2 >< span > Folder </ span > 界面组件 </ h2 >
                    
</ div >
                    
< div  class ="accordionContent" >

                        
< ul  class ="tree treeFolder" >
                            
< li >< href ="tabsPage.html"  target ="navTab" > 主框架面板 </ a >
                                
< ul >
                                    
< li >< href ="main.html"  target ="navTab"  rel ="main" > 我的主页 </ a ></ li >
                                    
< li >< href ="http://www.baidu.com"  target ="navTab"  rel ="page1" > 页面一(外部页面) </ a ></ li >
                                    
< li >< href ="demo_page1.html"  target ="navTab"  rel ="page1"  fresh ="false" > 替换页面一 </ a ></ li >
                                    
< li >< href ="demo_page2.html"  target ="navTab"  rel ="page2" > 页面二 </ a ></ li >

                                    
< li >< href ="demo_page4.html"  target ="navTab"  rel ="page3"  title ="页面三(自定义标签名)" > 页面三 </ a ></ li >
                                    
< li >< href ="demo_page4.html"  target ="navTab"  rel ="page4"  fresh ="false" > 测试页面(fresh="false") </ a ></ li >
                                
</ ul >
                            
</ li >
                            
                            
< li >< a > 常用组件 </ a >
                                
< ul >
                                    
< li >< href ="w_panel.html"  target ="navTab"  rel ="w_panel" > 面板 </ a ></ li >

                                    
< li >< href ="w_tabs.html"  target ="navTab"  rel ="w_tabs" > 选项卡面板 </ a ></ li >
                                    
< li >< href ="w_dialog.html"  target ="navTab"  rel ="w_dialog" > 弹出窗口 </ a ></ li >
                                    
< li >< href ="w_alert.html"  target ="navTab"  rel ="w_alert" > 提示窗口 </ a ></ li >
                                    
< li >< href ="w_list.html"  target ="navTab"  rel ="w_list" > CSS表格容器 </ a ></ li >
                                    
< li >< href ="demo_page1.html"  target ="navTab"  rel ="w_table" > 表格容器 </ a ></ li >
                                    
< li >< href ="w_removeSelected.html"  target ="navTab"  rel ="w_table" > 表格数据库排序+批量删除 </ a ></ li >

                                    
< li >< href ="w_tree.html"  target ="navTab"  rel ="w_tree" > 树形菜单 </ a ></ li >
                                    
< li >< href ="w_accordion.html"  target ="navTab"  rel ="w_accordion" > 滑动菜单 </ a ></ li >
                                    
< li >< href ="w_editor.html"  target ="navTab"  rel ="w_editor" > 编辑器 </ a ></ li >
                                    
< li >< href ="w_datepicker.html"  target ="navTab"  rel ="w_datepicker" > 日期控件 </ a ></ li >
                                
</ ul >
                            
</ li >
                                    
                            
< li >< a > 表单组件 </ a >

                                
< ul >
                                    
< li >< href ="w_validation.html"  target ="navTab"  rel ="w_validation" > 表单验证 </ a ></ li >
                                    
< li >< href ="w_button.html"  target ="navTab"  rel ="w_button" > 按钮 </ a ></ li >
                                    
< li >< href ="w_textInput.html"  target ="navTab"  rel ="w_textInput" > 文本框/文本域 </ a ></ li >
                                    
< li >< href ="w_combox.html"  target ="navTab"  rel ="w_combox" > 下拉菜单 </ a ></ li >
                                    
< li >< href ="w_checkbox.html"  target ="navTab"  rel ="w_checkbox" > 多选框/单选框 </ a ></ li >

                                    
< li >< href ="demo_upload.html"  target ="navTab"  rel ="demo_upload" > iframeCallback表单提交 </ a ></ li >
                                    
< li >< href ="w_uploadify.html"  target ="navTab"  rel ="w_uploadify" > uploadify多文件上传 </ a ></ li >
                                
</ ul >
                            
</ li >
                            
< li >< href ="dwz.frag.xml"  target ="_blank" > dwz.frag.xml </ a ></ li >
                        
</ ul >
                    
</ div >

                    
< div  class ="accordionHeader" >
                        
< h2 >< span > Folder </ span > 典型页面 </ h2 >
                    
</ div >
                    
< div  class ="accordionContent" >
                        
< ul  class ="tree treeFolder treeCheck" >
                            
< li >< href ="demo_page1.html"  target ="navTab"  rel ="demo_page1" > 查询我的客户 </ a ></ li >
                            
< li >< href ="demo_page1.html"  target ="navTab"  rel ="demo_page2" > 表单查询页面 </ a ></ li >

                            
< li >< href ="demo_page4.html"  target ="navTab"  rel ="demo_page4" > 表单录入页面 </ a ></ li >
                            
< li >< href ="demo_page5.html"  target ="navTab"  rel ="demo_page5" > 有文本输入的表单 </ a ></ li >
                            
< li >< href ="javascript:void(0)" > 有提示的表单输入页面 </ a >
                                
< ul >
                                    
< li >< href ="javascript:void(0)" > 页面一 </ a ></ li >
                                    
< li >< href ="javascript:void(0)" > 页面二 </ a ></ li >

                                
</ ul >
                            
</ li >
                            
< li >< href ="javascript:void(0)" > 选项卡和图形的页面 </ a >
                                
< ul >
                                    
< li >< href ="javascript:void(0)" > 页面一 </ a ></ li >
                                    
< li >< href ="javascript:void(0)" > 页面二 </ a ></ li >
                                
</ ul >

                            
</ li >
                            
< li >< href ="javascript:void(0)" > 选项卡和图形切换的页面 </ a ></ li >
                            
< li >< href ="javascript:void(0)" > 左右两个互动的页面 </ a ></ li >
                            
< li >< href ="javascript:void(0)" > 列表输入的页面 </ a ></ li >
                            
< li >< href ="javascript:void(0)" > 双层栏目列表的页面 </ a ></ li >
                        
</ ul >
                    
</ div >

                    
< div  class ="accordionHeader" >
                        
< h2 >< span > Folder </ span > 流程演示 </ h2 >
                    
</ div >
                    
< div  class ="accordionContent" >
                        
< ul  class ="tree" >
                            
< li >< href ="newPage1.html"  target ="dialog"  rel ="dlg_page" > 列表 </ a ></ li >
                            
< li >< href ="newPage1.html"  target ="dialog"  rel ="dlg_page" > 列表 </ a ></ li >

                            
< li >< href ="newPage1.html"  target ="dialog"  rel ="dlg_page2" > 列表 </ a ></ li >
                            
< li >< href ="newPage1.html"  target ="dialog"  rel ="dlg_page2" > 列表 </ a ></ li >
                            
< li >< href ="newPage1.html"  target ="dialog"  rel ="dlg_page2" > 列表 </ a ></ li >
                        
</ ul >
                    
</ div >
                
</ div >

            
</ div >

        
</ div >

 

       至于它的点击效果 应该就是页面的JS起的作用。

 接下来新建工程

动态菜单(三)_第3张图片 

把下载的文件夹里的JS文件啊CSS文件啊 都抄到文件夹里包括主题。

看到JS中有这么一段代码

 1  < script  type ="text/javascript" >
 2  $( function (){
 3      DWZ.init( " dwz.frag.xml " , {
 4  //         loginUrl:"loginsub.html", loginTitle:"登录",    // 弹出登录对话框
 5          loginUrl: " login.html " ,     //  跳到登录页面
 6          statusCode:{ok: 200 , error: 300 , timeout: 301 },  // 【可选】
 7          pageInfo:{pageNum: " pageNum " , numPerPage: " numPerPage " , orderField: " orderField " , orderDirection: " orderDirection " },  // 【可选】
 8          debug: false ,     //  调试模式 【true|false】
 9          callback: function (){
10              initEnv();
11              $( " #themeList " ).theme({themeBase: " themes " });
12          }
13      });
14  });
15  </ script >

 init这个单词应该就是初始化的缩写。哈哈。。

 那我们就去下载的包里找到

dwz.frag.xml

 

拷贝到根目录下。

包括图片这些。然后在页面上把响应的JS和CSS文件引用上(注意路径)

 

接下来直接把源码copy到工程里。把那些没用的去掉。。。you know。。。(在这里感谢DWZ所有工作人员为我们提供了这么好的框架。支持国产!)

在把我们上面看出来的菜单抽取出来用来后台加载 输出html字符串的形式改写之后差不多就下面这样。。。

< body >
    
< form  id ="form1"  runat ="server" >
    
< body  scroll ="no" >
        
< div  id ="layout" >
            
< div  id ="header" >
                
< div  class ="headerNav" >
                    
< class ="logo"  href ="javascript:void(0)" > 标志 </ a >
                    
< ul  class ="nav" >
                        
< li >< href ="#"  target ="dialog" > 设置 </ a ></ li >
                        
<!-- <li><a href="javascript:void(0)">反馈</a></li> -->
                        
< li >< href ="#"  target ="_blank" > 论坛 </ a ></ li >
                        
< li >< href ="#" > 退出 </ a ></ li >
                    
</ ul >
                    
< ul  class ="themeList"  id ="themeList" >
                        
< li  theme ="default" >
                            
< div  class ="selected" >
                                蓝色
</ div >
                        
</ li >
                        
< li  theme ="green" >
                            
< div >
                                绿色
</ div >
                        
</ li >
                        
<!-- <li theme="red"><div>红色</div></li> -->
                        
< li  theme ="purple" >
                            
< div >
                                紫色
</ div >
                        
</ li >
                        
< li  theme ="silver" >
                            
< div >
                                银色
</ div >
                        
</ li >
                    
</ ul >
                
</ div >
            
</ div >
            
< div  id ="leftside" >
                
< div  id ="sidebar_s"  style ="display: none;" >
                    
< div  class ="collapse" >
                        
< div  class ="toggleCollapse" >
                            
< div >
                            
</ div >
                        
</ div >
                    
</ div >
                
</ div >
                
< div  id ="sidebar" >
                    
< div  class ="toggleCollapse" >
                        
< h2 >
                            主菜单
</ h2 >
                        
< div >
                            收缩
</ div >
                    
</ div >
                    
< div  class ="accordion"  fillSpace ="sidebar" >
                        
<% = GetLeftMenu() %>
                    
</ div >
                
</ div >
            
</ div >
            
< div  id ="container" >
                
< div  id ="navTab"  class ="tabsPage" >
                    
< div  class ="tabsPageHeader" >
                        
< div  class ="tabsPageHeaderContent" >
                            
<!--  显示左右控制时添加 class="tabsPageHeaderMargin"  -->
                            
< ul  class ="navTab-tab" >
                                
< li  tabid ="main"  class ="main" >< href ="javascript:void(0)" >< span >< span  class ="home_icon" >
                                    我的主页
</ span ></ span ></ a ></ li >
                            
</ ul >
                        
</ div >
                        
< div  class ="tabsLeft" >
                            left
</ div >
                        
<!--  禁用只需要添加一个样式 class="tabsLeft tabsLeftDisabled"  -->
                        
< div  class ="tabsRight" >
                            right
</ div >
                        
<!--  禁用只需要添加一个样式 class="tabsRight tabsRightDisabled"  -->
                        
< div  class ="tabsMore" >
                            more
</ div >
                    
</ div >
                    
< ul  class ="tabsMoreList" >
                        
< li >< href ="javascript:void(0)" > 我的主页 </ a ></ li >
                    
</ ul >
                    
< div  class ="navTab-panel tabsPageContent" >
                        
< div  class ="page" >
                            
< div  class ="accountInfo" >
                                
< div  class ="alertInfo" >
                                    
< h2 >
                                        
< href ="#"  target ="_blank" ></ a >
                                    
</ h2 >
                                    
< href ="#"  target ="_blank" ></ a >
                                
</ div >
                                
< p >
                                    
< span ></ span >
                                
</ p >
                                
< p >
                                    
< href ="http://hi.csdn.net/wxr0323"  target ="dialog" > 子夜抄袭DWZ </ a ></ p >
                            
</ div >
                            
< div  class ="pageFormContent"  layouth ="80" >
                            
</ div >
                        
</ div >
                    
</ div >
                
</ div >
            
</ div >
            
< div  id ="taskbar"  style ="left: 0px; display: none;" >
                
< div  class ="taskbarContent" >
                    
< ul >
                    
</ ul >
                
</ div >
                
< div  class ="taskbarLeft taskbarLeftDisabled"  style ="display: none;" >
                    taskbarLeft
</ div >
                
< div  class ="taskbarRight"  style ="display: none;" >
                    taskbarRight
</ div >
            
</ div >
            
< div  id ="splitBar" >
            
</ div >
            
< div  id ="splitBarProxy" >
            
</ div >
        
</ div >
        
< div  id ="footer" >
            Copyright 
&copy;  2010  < href ="demo_page2.html"  target ="dialog" > DWZ研发组 </ a ></ div >
        
<!-- 拖动效果 -->
        
< div  class ="resizable" >
        
</ div >
        
<!-- 阴影 -->
        
< div  class ="shadow"  style ="width: 508px; top: 148px; left: 296px;" >
            
< div  class ="shadow_h" >
                
< div  class ="shadow_h_l" >
                
</ div >
                
< div  class ="shadow_h_r" >
                
</ div >
                
< div  class ="shadow_h_c" >
                
</ div >
            
</ div >
            
< div  class ="shadow_c" >
                
< div  class ="shadow_c_l"  style ="height: 296px;" >
                
</ div >
                
< div  class ="shadow_c_r"  style ="height: 296px;" >
                
</ div >
                
< div  class ="shadow_c_c"  style ="height: 296px;" >
                
</ div >
            
</ div >
            
< div  class ="shadow_f" >
                
< div  class ="shadow_f_l" >
                
</ div >
                
< div  class ="shadow_f_r" >
                
</ div >
                
< div  class ="shadow_f_c" >
                
</ div >
            
</ div >
        
</ div >
        
<!-- 遮盖屏幕 -->
        
< div  id ="alertBackground"  class ="alertBackground" >
        
</ div >
        
< div  id ="dialogBackground"  class ="dialogBackground" >
        
</ div >
        
< div  id ='background'  class ='background' >
        
</ div >
        
< div  id ='progressBar'  class ='progressBar' >
            数据加载中,请稍等...
</ div >

        
< script  type ="text/javascript" >
            
var  _gaq  =  _gaq  ||  [];
            _gaq.push([
' _setAccount ' ' UA-16716654-1 ' ]);
            _gaq.push([
' _trackPageview ' ]);

            (
function () {
                
var  ga  =  document.createElement( ' script ' ); ga.type  =   ' text/javascript ' ; ga.async  =   true ;
                ga.src 
=  ( ' https: '   ==  document.location.protocol  ?   '  https://ssl '  :  '  http://www ' +   ' .google-analytics.com/ga.js ' ;
                
var  s  =  document.getElementsByTagName( ' script ' )[ 0 ]; s.parentNode.insertBefore(ga, s);
            })();
        
</ script >

    
</ body >

 只贴了body里面的

接下来我们就要实现绑定的那个方法了。。

数据库跟第一篇的数据库一样。

 

  ///   <summary>
        
///  获取左侧便拦组
        
///   </summary>
         protected   string  GetLeftMenu()
        {
            StringBuilder LeftList 
=   new  StringBuilder();
            
try
            {
                
// 获取菜单中的所有数据
                DataTable Dt_TotleMenu  =  SqlHelper.ReturnDataTable( " select * from Ziye_Menu " , CommandType.Text);
                
// 取出所有父节点 因为父节点的Menu_Fid=0
                DataRow[] drMenu  =  Dt_TotleMenu.Select( " Menu_Fid=0 and Menu_able=1 " );
                
// 构建父节点的table
                DataTable LeftMenuTable  =   new  DataTable();
                
// 克隆一下解构
                LeftMenuTable  =  drMenu[ 0 ].Table.Clone();
                
// 导入数据
                 foreach  (DataRow dr  in  drMenu)
                {
                    LeftMenuTable.ImportRow(dr);
                }
                
// 如果存在父节点
                 if  (LeftMenuTable.Rows.Count  !=   0 )
                {
                    
// 遍历拼接html 根据第一篇观察和抽取HTML的功夫
                     for  ( int  i  =   0 ; i  <  LeftMenuTable.Rows.Count; i ++ )
                    {
                        LeftList.Append(
" <div class=\"accordionHeader\"> " );
                        LeftList.Append(
" <h2><span>Folder</span> "   +  LeftMenuTable.Rows[i][ " Menu_Name " ].ToString()  +   " </h2> " );
                        LeftList.Append(
" </div> " );
                        LeftList.Append(
" <div class=\"accordionContent\" style=\"display:block;\"> " );

                        LeftList.Append(
" <ul class=\"tree treeFolder\"> " );

                        
// 获取当前父节点的所有子节点
                        DataRow[] drSencondMenu  =  Dt_TotleMenu.Select( " Menu_Fid=' "   +  LeftMenuTable.Rows[i][ " Menu_ID " +   " ' and Menu_able=1 " );
                        DataTable SecondTable 
=   new  DataTable();
                        SecondTable 
=  drSencondMenu[ 0 ].Table.Clone();
                        
foreach  (DataRow dr  in  drSencondMenu)
                        {
                            SecondTable.ImportRow(dr);
                        }

                        
// 如果子存在子节点
                         if  (SecondTable.Rows.Count  !=   0 )
                        {
                            
// 遍历拼接子节点的HTML
                             for  ( int  j  =   0 ; j  <  SecondTable.Rows.Count; j ++ )
                            {
                                LeftList.Append(
" <li><a href=\" "   +  SecondTable.Rows[j][ " Menu_Url " +   " \" target=\"navTab\" rel=\" "   +  SecondTable.Rows[j][ " Menu_Rel " +   " \"> "   +  SecondTable.Rows[j][ " Menu_Name " +   " </a></li> " );
                            }
                        }
                        
// 结束符
                        LeftList.Append( " </ul> " );
                        LeftList.Append(
" </div> " );
                    }

                }
                
return  LeftList.ToString();

            }
            
catch  (Exception err)
            {
                
return   " 没菜单 " ;
            }
        }

 这个代码应该比第一篇的简单一些。同学们也可以改成递归的形式。

其实原理跟第一篇的差不多。

OK F5。

动态菜单(三)_第4张图片
 

 最后的效果了。

 

其实这篇文章上周写的好详细。但是一不小心浏览器死了。

博客园没有自动保存功能。只能前功尽弃了。人还是有惰性。主要是感冒了。哎,明天还继续上班。上班悲剧啊!给不上力啊。

下次有机会在给大家介绍一种新型的菜单。这里的技术都是比较过时的了。大家可以用跟得上步伐的代码改造一下。

 

 

到这里菜单已经完成了,下次得去坛子抓一抓问菜单的。

洗洗睡了。

 

忘记贴源码了。

 源码请点击

洗洗睡了。

你可能感兴趣的:(动态)