别让DTcms栏目类别调用名称形同虚设
大家在使用DTcms4.0的时候,在给栏目类别设置别名的时候,是不是无效呢,小编今天就来教大家,如何修复这一问题;针对于这个问题,小编会用两篇文章来给大家讲解,第一篇主要是简单的修复调用名无效问题;第二篇小编教大家如果在模板添加地址自动判别解析(因为DTcms系统自带的是要么用ID、要么用调用名,没办法做自动判断,当然有部分开发人员在模板中直接使用if语句);首先我们还是通过图片看问题:
可能大家在使用的时候用的比较少,小编在DT官网的论坛也没见人提起过这一问题,这可能还是小编喜欢折腾的原因吧;来看具体步骤:
1、打开首行打开“DTcms.Web.UI”项目下的page目录下的“article_list.cs”类文件,这个类是列表页所继承的类,我们在这里定义一个call_index的变量;
protected string call_index; //调用别名
2、为call_index变量添加接收地址值方法
call_index = DTRequest.GetQueryString("call_index");
3、因为DTcms栏目类别并不支持通过调用名获取实体对像,那么我们还需要在数据访问层“DTcms.DAL”项目下的article_category.cs文件中,添加一个通过调用名获取实体对像的方法;
DTcms.DAL => article_category.cs
/// <summary> /// 是否存在该记录 /// </summary> public bool Exists(string call_index) { if (string.IsNullOrEmpty(call_index)) { return false; } StringBuilder strSql = new StringBuilder(); strSql.Append("select count(1) from " + databaseprefix + "article_category"); strSql.Append(" where call_index=@call_index "); SqlParameter[] parameters = { new SqlParameter("@call_index", SqlDbType.NVarChar,50)}; parameters[0].Value = call_index; return DbHelperSQL.Exists(strSql.ToString(), parameters); } /// <summary> /// 得到一个对象实体 /// </summary> public Model.article_category GetModel(string call_index) { StringBuilder strSql = new StringBuilder(); strSql.Append("select id from " + databaseprefix + "article_category"); strSql.Append(" where call_index=@call_index"); SqlParameter[] parameters = { new SqlParameter("@call_index", SqlDbType.NVarChar,50)}; parameters[0].Value = call_index; object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters); if (obj != null) { return GetModel(Convert.ToInt32(obj)); } return null; }
4、在业务逻辑层“DTcms.BLL”项目下的“article_category.cs”文件中添加如下方法;
DTcms.BLL => article_category.cs
/// <summary> /// 是否存在该记录 /// </summary> public bool Exists(string call_index) { return dal.Exists(call_index); } /// <summary> /// 得到一个对象实体 /// </summary> public Model.article_category GetModel(string call_index) { return dal.GetModel(call_index); }
5、修改表现层“DTcms.Web.UI”项目下“page”目录下“article_list.cs”文件如下图:
注意:因为我是直接调用别名,也只调用别名,所以如果检测到该别名不存在就返回404.
DTcms.Web.UI => page => article_list.cs
using System; using System.Collections.Generic; using System.Text; using DTcms.Common; using System.Web; namespace DTcms.Web.UI.Page { public partial class article_list : Web.UI.BasePage { protected int page; //当前页码 protected int category_id; //类别ID protected int totalcount; //OUT数据总数 protected string pagelist; //分页页码 protected string call_index; //调用别名 protected Model.article_category model = new Model.article_category(); //分类的实体 /// <summary> /// 重写虚方法,此方法将在Init事件前执行 /// </summary> protected override void ShowPage() { page = DTRequest.GetQueryInt("page", 1); category_id = DTRequest.GetQueryInt("category_id"); call_index = DTRequest.GetQueryString("call_index"); BLL.article_category bll = new BLL.article_category(); model.title = "所有类别"; if (!bll.Exists(call_index)) { //如果页数错误就返回404页面 HttpContext.Current.Response.StatusCode = 404; HttpContext.Current.Response.End(); return; } if (category_id > 0) //如果ID获取到,将使用ID { if (bll.Exists(category_id)) model = bll.GetModel(category_id); } else if (!string.IsNullOrEmpty(call_index)) //否则检查设置的别名 { if (bll.Exists(call_index)) { model = bll.GetModel(call_index); //赋值类别ID category_id = model.id; return; } } } } }
基本上的程序我们已经修改完成了,那怎么引用呢,这个就得回到后台,我们去重新配置一下URL;
好了,改造工程完成了,大家测试一下;下图是小编测试的,供大家参考;
版权声明:
作者:亦灵一梦
链接:https://blog.haokaikai.cn/2018/houduan/dtcms/114.html
来源:开心博客
文章版权归作者所有,未经允许请勿转载。