淘特Asp.NetCms 二次开发说明

来自站长百科
跳转至: 导航、​ 搜索

导航: 上一页

CMS框架说明及特色:

  • 基于MVC三层架构,业务、控制、显示层层分离,面向对象的编程思想,扩展开发容易。
  • 数据库模块统一放置于DAO中,所有业务逻辑相关操作,由统一的ObjectFactory获取并实例化,便于系统的统一管理。
  • 统一的数据库BEAN工厂(DataField),通过引用(import)系统中的DataField类,即可完成数据库中字段的复值、取值。省去了为每个表写单独的实例化信息类了的繁锁。
  • 系统集成Lucene.net高效索引、搜索引擎,该模块是先将数据库内容采用一定的分词技术生成索引,前台模糊查询时读取的索引文件,因而速度非常快,同时检索的同时不在查询数据库,从而节省了大量资源。
  • 大量采用了Ajax技术,后台无限级分类、WEB采集等模块均加入了Ajax技术异步调用,极大优化了程序代码,真正意义的实现了“无限”级数量级业务。

TotNetCms提供了完整的数据库访问框架,所以在CMS中二次开发只需要引用DB工具类就可以了,它存在TotCms.FrameWork.Db中。下面以TotNetCms中的广告管理类做为说明。

事例:广告管理类的设计

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using TotCms.FrameWork.Db;
using TotCms.Web.Admin.UI;
using TotCms.FrameWork.Util;
 

namespace TotCms.FrameWork.Dao
{
  public class AdDao
  {
    public int GetLastId()
    {
      object id;
      SqlCommand cmd = DbUtil.GetCommand("select top 1 id from t_ad order by id desc", true);
      id = DbUtil.Instance.ExecuteScalar(cmd);
      return Convert.ToInt32(id);
    }


    public void Add(int categoryid, string title, string content,int adtype, DateTime expirestime, DateTime moditime)
    {
      int id = GetLastId()+1;
      SqlCommand cmd = DbUtil.GetCommand("insert into t_ad(id,CategoryId,Title,Content,AdType,ExpiresTime,ModiTime) 
                                        values(@id,@CategoryId,@Title,@Content,@AdType,@ExpiresTime,@ModiTime)", true);
      cmd.Parameters.Add(DataHelper.MakeInParam("@id", SqlDbType.Int, 0, id));
      cmd.Parameters.Add(DataHelper.MakeInParam("@CategoryId", SqlDbType.Int, 0, categoryid));
      cmd.Parameters.Add(DataHelper.MakeInParam("@Title", SqlDbType.VarChar, 0, title));     
      cmd.Parameters.Add(DataHelper.MakeInParam("@Content", SqlDbType.Text, 0, content));
      cmd.Parameters.Add(DataHelper.MakeInParam("@AdType", SqlDbType.Int, 0, adtype));
      cmd.Parameters.Add(DataHelper.MakeInParam("@ExpiresTime", SqlDbType.DateTime, 0, expirestime));
      cmd.Parameters.Add(DataHelper.MakeInParam("@ModiTime", SqlDbType.DateTime, 0, moditime));
      DbUtil.Instance.ExecuteNonQuery(cmd);
    }

     public void Mod(int id, int categoryid, string title, string content, int adtype, DateTime expirestime, DateTime moditime)
    {
      SqlCommand cmd = DbUtil.GetCommand("update t_ad set CategoryId=@CategoryId,Title=@Title,Content=@Content,
                                         AdType=@AdType,ExpiresTime=@ExpiresTime,
                                         ModiTime=@ModiTime where id=@id", true);
      cmd.Parameters.Add(DataHelper.MakeInParam("@CategoryId", SqlDbType.Int, 0, categoryid));
      cmd.Parameters.Add(DataHelper.MakeInParam("@Title", SqlDbType.VarChar, 0, title));
      cmd.Parameters.Add(DataHelper.MakeInParam("@Content", SqlDbType.Text, 0, content));
      cmd.Parameters.Add(DataHelper.MakeInParam("@AdType", SqlDbType.Int, 0, adtype));
      cmd.Parameters.Add(DataHelper.MakeInParam("@ExpiresTime", SqlDbType.DateTime, 0, expirestime));
      cmd.Parameters.Add(DataHelper.MakeInParam("@ModiTime", SqlDbType.DateTime, 0, moditime));
      cmd.Parameters.Add(DataHelper.MakeInParam("@id", SqlDbType.Int, 0, id));
      DbUtil.Instance.ExecuteNonQuery(cmd);
    }

     public void Delete(int id)
    {
      SqlCommand cmd = DbUtil.GetCommand("delete from t_ad where id=@id", true);
      cmd.Parameters.Add(DataHelper.MakeInParam("@id", SqlDbType.Int, 0, id));
      DbUtil.Instance.ExecuteNonQuery(cmd);
    }

    public DataField Get(int id)
    {
      SqlCommand cmd = DbUtil.GetCommand("select CategoryId,Title,Content,AdType,ExpiresTime,
                                          ModiTime from t_ad where id=@id", true);
      cmd.Parameters.Add(DataHelper.MakeInParam("@id", SqlDbType.Int, 0, id));
      return (DbUtil.Instance.GetFirstData(cmd, "CategoryId,Title,Content,AdType,ExpiresTime,ModiTime"));
    }

     public List<DataField> GetList(int categoryid)
    {
      string fields = "id,CategoryId,Title,Content,AdType,ExpiresTime,ModiTime";
      StringBuilder sql = new StringBuilder(512);
      sql.Append("select ");
      sql.Append(fields);
      sql.Append(" from t_ad where 1=1");

      if (categoryid > 0)
      {
        sql.Append(" and CategoryId=").Append(categoryid);
      }

      sql.Append(" order by id desc");
      SqlCommand cmd = DbUtil.GetCommand(sql.ToString(), true);
      return DbUtil.Instance.GetList(cmd, fields);
    }

     public DataTable GetDataTable(int categoryid, string keys, int currentpage, int pagesize)
    {
      string fields = "id,CategoryId,Title,Content,AdType,ExpiresTime,ModiTime";
      StringBuilder sql = new StringBuilder(512);
      sql.Append("select top ");
      sql.Append(pagesize + " ");
      sql.Append(fields);
      sql.Append(" from t_ad WHERE (id <=(SELECT MIN(id) FROM (SELECT TOP " + ((currentpage - 1) * pagesize + 1) 
                                    + " id  FROM t_ad where 1=1");
      if (categoryid > 0)
      {
        sql.Append(" and CategoryId=").Append(categoryid);
      }
      if (!string.IsNullOrEmpty(keys))
      {
        sql.Append(" and Title like '%").Append(keys).Append("%'");
      }
      sql.Append(" ORDER BY id DESC) AS t))");
      if (categoryid > 0)
      {
        sql.Append(" and CategoryId=").Append(categoryid);
      }
      if (!string.IsNullOrEmpty(keys))
      {
        sql.Append(" and Title like '%").Append(keys).Append("%'");
      }
      sql.Append(" ORDER BY id DESC");
      LogUtil.Debug(sql.ToString());
      SqlCommand cmd = DbUtil.GetCommand(sql.ToString(), true);
      return DbUtil.Instance.GetData(cmd);
    }

 
    public double GetCount(int categoryid, string keys)
    {
      double ret = 0D;
      StringBuilder sql = new StringBuilder(512);
      sql.Append("select count(*) from t_ad where 1=1");

      if (categoryid > 0)
      {
        sql.Append(" and CategoryId=").Append(categoryid);
      }
      if (!string.IsNullOrEmpty(keys))
      {
        sql.Append(" and Title like '%").Append(keys).Append("%'");
      }

      SqlCommand cmd = DbUtil.GetCommand(sql.ToString(), true);
      ret = Convert.ToDouble(DbUtil.Instance.ExecuteScalar(cmd));
      return ret;
    }

 
    public string GetContent(int id)
    {
      SqlCommand cmd = DbUtil.GetCommand("select Content from t_ad where id=@id", true);
      cmd.Parameters.Add(DataHelper.MakeInParam("@id", SqlDbType.Int, 0, id));
      string p = (string)DbUtil.Instance.GetField(cmd);
      return p;

    }

  }

}

以上是广告管理的全部代码,下面重要介绍两个函数:

  • GetList函数:此函数返回的是List<DataField>,DataField也就是我们CMS中提供一个数据库字段操作类,通过它可以访问返回的数据库每行的字段值。比如前台可以这么来取数据:
AdDao ad=new AdDao();
List<DataField> list=ad.GetList();
Foreach(DataField df in list){
  Response.Write(df.GetFieldValue(“id”));// GetFieldValue函数中参数即为表t_ad中的字段名称
Response.Write(df.GetFieldValue(“Title”));
}
  • GetDataTable函数:此函数返回DataTable对象,DataTable经常用到asp.net数据控件中(如Repeater,GridView),因此在asp.net页面中可以直接通过此函数将数据控制绑定数据。以下是广告管理页面中的绑定代码(为了演示方便,省略了一部分无关代码):

Admanage.aspx页面 Center

Admanage.aspx.cs页面

protected void Page_Load(object sender, EventArgs e)
{
AdDao ad=new AdDao();
this.RepeateList.DataSource = ad.GetDataTable(0, “”, 1, 10);
}

上面代码中,只需要调用AdDao中的GetDataTable就完成了RepeateList绑定。具体的业务逻辑交由实体数据Dao类来管理,从业务层次上比较分明,利于项目的扩展和管理。


相关条目[ ]

参考来源[ ]