别让DTcms栏目类别调用名称形同虚设

  • A+
所属分类:DTCMS相关知识

大家在使用DTcms4.0的时候,在给栏目类别设置别名的时候,是不是无效呢,小编今天就来教大家,如何修复这一问题;针对于这个问题,小编会用两篇文章来给大家讲解,第一篇主要是简单的修复调用名无效问题;第二篇小编教大家如果在模板添加地址自动判别解析(因为DTcms系统自带的是要么用ID、要么用调用名,没办法做自动判断,当然有部分开发人员在模板中直接使用if语句);首先我们还是通过图片看问题:

别让DTcms栏目类别调用名称形同虚设

可能大家在使用的时候用的比较少,小编在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”文件如下图:

别让DTcms栏目类别调用名称形同虚设

注意:因为我是直接调用别名,也只调用别名,所以如果检测到该别名不存在就返回404.

别让DTcms栏目类别调用名称形同虚设

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;

 

 

别让DTcms栏目类别调用名称形同虚设

 

好了,改造工程完成了,大家测试一下;下图是小编测试的,供大家参考;

 

别让DTcms栏目类别调用名称形同虚设

亦灵一梦

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: