DTcms导航菜单插件开发教程

Hailin 发表于 2016-05-06 10:02:27 来源于CMS插件网 评论 0 点击 4285
摘要:今天小编来教大家如何利用“websp for DTcms”开发一个DTcms导航菜单插件,开发用时预计15分钟,所以需要有定耐心。先通过图片来了解一下什么是导航菜单?

今天小编来教大家如何利用“websp for DTcms”开发一个DTcms导航菜单插件,开发用时预计15分钟,所以需要有一定耐心。先通过图片来了解一下什么是导航菜单?

2.jpg

程序非常简单,相信有比小编做的更好的,小编在这里只是起一个引导作用,好了,我们来看看做这个一个插件大概的步骤:首先搭建数据库、其实编写操作方法、最后编写操作界面。

那我们来做第一步,搭建数据库:

create table {databaseprefix}menu(
    id int identity(1,1) not null primary key,
    title nvarchar(255) ,
    link_url nvarchar(255),
    parent_id int default 0,
    class_list nvarchar(500),
    class_layer int default 1,
    open_mode nvarchar(20) ,
    sort_id int default 0,
    css_txt nvarchar(50),
    img_url nvarchar(200),
    is_lock	tinyint default 0,
    add_time datetime
);

第二步编写方法,这一步我们直接使用“websp for DTcms”工具来完成,打开工具,输入连接数据库参数,在操作界面选择生成代码保存目录,选择要生成的表,或默认生成所有表,点击一键生成全部。

3.jpg

点击一键生成全部持,工具会自动在目录下生成Model、BLL、DAL三层的代码文件,如下图:

4.jpg

DTcms.Model\menu.cs

using System;
namespace DTcms.Model
{
    /// <summary>
    /// 模型层
    /// <summary>
    [Serializable]
    public class menu
    {
        public menu() { }
        private int _id = 0;
        private string _title = string.Empty;
        private string _link_url = string.Empty;
        private int _parent_id = 0;
        //####省略部分代码###
        private int _is_lock = 0;
        private DateTime _add_time = DateTime.Now;
        #region Model
        /// <summary>
        /// ID号
        /// </summary>
        public int id
        {
           set { _id = value; }
           get { return _id; }
        }
        /// <summary>
        /// 标题
        /// </summary>
        public string title
        {
           set { _title = value; }
           get { return _title; }
        }
        //####省略部分代码###
        /// <summary>
        /// 添加时间
        /// </summary>
        public DateTime add_time
        {
           set { _add_time = value; }
           get { return _add_time; }
        }
        #endregion
    }
}

DTcms.BLL\menu.cs

using System;
using System.Collections.Generic;
using System.Data;
namespace DTcms.BLL
{
    /// <summary>
    /// 业务逻辑层
    /// </summary>
    public class menu
    {
        private readonly Model.siteconfig siteConfig = new BLL.siteconfig().loadConfig();
        private readonly DAL.menu dal;
        public menu()  
        {
              dal = new DAL.menu(siteConfig.sysdatabaseprefix);
        }
        #region 基本方法
        /// <summary>
        /// 按ID号查询是否存在记录
        /// </summary>
        /// <param name="id">ID号</param>
        /// <returns>True Or False</returns>
        public bool Exists(int id)
        {
              return dal.Exists(id);
        }
        
        //####省略部分代码###
        
        #region 修改一列数据
        /// <summary>
        /// 修改一列数据
        /// </summary>
        /// <param name="id">ID号</param>
        /// <param name="strValue"></param>
        public void UpdateField(int id, string strValue)
        {
              dal.UpdateField(id, strValue);
        }
        #endregion
        #region 删除一条数据
        /// <summary>
        /// 删除一条数据
        /// </summary>
        /// <param name="id">ID号</param>
        /// <returns>True Or False</returns>
        public bool Delete(int id)
        {
              return dal.Delete(id);
        }
        #endregion
        
        //####省略部分代码###
        
        #region 扩展方法
        /// <summary>
        /// 取得所有类别列表
        /// </summary>
        /// <param name="Top">数量</param>
        /// <param name="parent_id">父类ID</param>
        /// <param name="strWhere">条件</param>
        /// <param name="filedOrder">排序</param>
        /// <returns>DataTable</returns>
        public DataTable GetList(int Top, int parent_id, string strWhere, string filedOrder)
        {
              return dal.GetList(Top, parent_id, strWhere, filedOrder);
        }
        #endregion
    }
}

DTcms.DAL\menu.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using DTcms.DBUtility;
using DTcms.Common;
namespace DTcms.DAL
{
    /// <summary>
    /// 数据库访问层
    /// </summary>
    public partial class menu
    {
        private string column;
        private string databaseprefix; 
        public menu(string _databaseprefix)
        {
            databaseprefix = _databaseprefix;
            this.column = "id,title,link_url,parent_id,class_list,class_layer,open_mode,sort_id,css_txt,img_url,is_lock,add_time";
        }
        
        //####省略部分代码####
    }
}

工具自动识别“class_list”、“class_layer”这两个字段,然后生成带事件的添加方法:

5.jpg

以及自动生成层级调整方法

6.jpg

在来看最后一步,把方法引入到项目中添加前台操作界面

7.jpg

到此我们的插件就开发完成了,小编是有意不把具体细节说清楚,就是希望大家能自己先动手,然后在下载小编曲的插件对比学习;这样才能从中学到知识,而不是一味着摘抄他人的,小编认为,结构和方法可以参考,过程必须要自己思考。小编已经将插件上传到附件了。供大家参考使用。

最后小编在补冲一下,导航菜单插件的使用方法,其实稍微知道一点插件开发的人一看就知道了,小编的引用方法写在menu.cs文件中,call_menu_content和get_menu_content;根据实际情况使用

只有一级菜单引用方法;第1行最后的10代表显示前10条记录,1为父类ID

<%set DataTable MainMenu=get_plugin_method("DTcms.Web.Plugin.Menu", "menu", "get_menu_content", 10, 1)%>
<%if(MainMenu.Rows.Count>0)%>
    <ul class="nav" id="mainnav">
        <%foreach(DataRow dr in MainMenu.Rows)%>
        <li<%if(""!={dr[css_txt]})%> class="{dr[css_txt]}"<%/if%>><a href="{dr[link_url]}" target="{dr[open_mode]}">{dr[title]}<i></i></a></li>
        <%/foreach%>
    </ul>
<%/if%>

多级菜单引用方法;第1行最后的10代表显示前10条记录,1为父类ID

<%set DataTable MainMenu=get_plugin_method("DTcms.Web.Plugin.Menu", "menu", "get_menu_content", 10, 1)%>
<%if(MainMenu.Rows.Count>0)%>
<ul>
    <%foreach(DataRow dr in MainMenu.Rows)%>
    <li class="one">
    	<span><a href="{dr[link_url]}" target="{dr[open_mode]}">{dr[title]}</a></span>
        <%set DataTable SubMenu=get_plugin_method("DTcms.Web.Plugin.Menu", "menu", "get_menu_content", 0, {dr[id]})%>
        <%if(SubMenu.Rows.Count>0)%>
            <ul class="sub">
                <%foreach(DataRow dr2 in SubMenu.Rows)%>
                    <li><a href="{dr2[link_url]}" target="{dr2[open_mode]}">{dr2[title]}</a></li>
                <%/foreach%>
            </ul>
        <%/if%>
    </li>
    <%/foreach%>
</ul>
<%/if%>


附件列表

  • 点击下载附件:menu.rar 大小48KB 所需积分:0分 下载次数:522次

热门资讯