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

Hailin 发表于 2016-05-16 01:40:51 来源于CMS插件网 评论 0 点击 3049
摘要:小编今天就来教大家,如何修复DTcms4.0栏目类别调用别名虚设这一问题;针对于这个问题,小编会用两篇文章来给大家讲解,第一篇主要是简单的修复调用名无效问题;第二篇小编教大家如果在模板添加地址自动判别解析,过程会从简单到复杂,所以先看看您用不用得到;

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

1.jpg

可能大家在使用的时候用的比较少,小编在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行添加如下代码;

3.jpg

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;

4.jpg

这里需要注意的是如果ID和调用名要同用的情况下,一定要保证ID的配置在前,不然解析会出错!

5.jpg

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

6.jpg

最后做一下提醒,很多人会在修改后,可以正常用调用名访问类别页,但是类别分页的时候,又会跳转到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-->

下一篇文章我们在来继续讲这个问题;这个问题还可以更加完善!

热门资讯