今天小编来教大家如何利用“websp for DTcms”开发一个DTcms导航菜单插件,开发用时预计15分钟,所以需要有一定耐心。先通过图片来了解一下什么是导航菜单?
程序非常简单,相信有比小编做的更好的,小编在这里只是起一个引导作用,好了,我们来看看做这个一个插件大概的步骤:首先搭建数据库、其实编写操作方法、最后编写操作界面。
那我们来做第一步,搭建数据库:
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”工具来完成,打开工具,输入连接数据库参数,在操作界面选择生成代码保存目录,选择要生成的表,或默认生成所有表,点击一键生成全部。
点击一键生成全部持,工具会自动在目录下生成Model、BLL、DAL三层的代码文件,如下图:
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”这两个字段,然后生成带事件的添加方法:
以及自动生成层级调整方法
在来看最后一步,把方法引入到项目中添加前台操作界面
到此我们的插件就开发完成了,小编是有意不把具体细节说清楚,就是希望大家能自己先动手,然后在下载小编曲的插件对比学习;这样才能从中学到知识,而不是一味着摘抄他人的,小编认为,结构和方法可以参考,过程必须要自己思考。小编已经将插件上传到附件了。供大家参考使用。
最后小编在补冲一下,导航菜单插件的使用方法,其实稍微知道一点插件开发的人一看就知道了,小编的引用方法写在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%>