别让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
来源:开心博客
文章版权归作者所有,未经允许请勿转载。