大家在使用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”文件,在文件第32行添加如下代码;
DTcms.Web.UI => page => article_list.cs
else if (!string.IsNullOrEmpty(call_index)) //否则检查设置的别名 { if (bll.Exists(call_index)) { model = bll.GetModel(call_index); //赋值类别ID category_id = model.id; } }
基本上的程序我们已经修改完成了,那怎么引用呢,这个就得回到后台,我们去重新配置一下URL;
这里需要注意的是如果ID和调用名要同用的情况下,一定要保证ID的配置在前,不然解析会出错!
好了,改造工程完成了,大家测试一下;下图是小编测试的,供大家参考;
最后做一下提醒,很多人会在修改后,可以正常用调用名访问类别页,但是类别分页的时候,又会跳转到ID的型式去,这里是因为您还没有修改模版中;
<%set DataTable newsList=get_article_list(channel, category_id, pagesize, page, "status=0", out totalcount, out pagelist, "news_list", category_id, "__id__")%><!--取得一个分页DataTable-->
修改为
<%set DataTable newsList=get_article_list(channel, category_id, pagesize, page, "status=0", out totalcount, out pagelist, "news_list", ""!=model.call_index?model.call_index:category_id.ToString(), "__id__")%><!--取得一个分页DataTable-->
下一篇文章我们在来继续讲这个问题;这个问题还可以更加完善!