新闻系统之模板机制
我们在做cms,bbs,或者多用户商城的时候,都会遇到模板机制。现在大多系统采用的都是老办法,做一个html文件,里面加上变量,再用一支程序读出这个html,替换里面的变量,输出要显示的内容。这个办法当然不错,因为很多人都在用嘛。
但是,在asp.net下,更好的实现却不是这样做。iwms新闻系统虽然没有开源,但是根据其模板的置放方式就能看出,iwms采用的绝对不是这样一个办法。在asp.net中,代码也页面本来就是分开的,简单来讲,aspx文件也就是一个模板,cs文件负责程序逻辑。经过多年的发展,我们可以看到,asp.net这种模板机制是很有效果的。代码的分离使得代码更清晰,程序员和美工的工作更容易配合。那么我们怎么利用asp,net的这种模板机制建立我们的多模板效果呢。
简单来讲,一个aspx文件是通过其顶部的配置文件链接到相应的程序文件的。
比如news_list_main.aspx文件的链接。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="news_list_main.aspx.cs" Inherits="news_list_main" %>
其实我们还可以在另外一个aspx文件中也使用这个连接
比如在news_list_001.aspx中也使用这样的链接。
那么两个页面的内部程序是一样的,根据自己的不同需求调整版面就可以实现不同的显示效果了。
到这里工作并没有完成。因为虽然显示效果不一样,但是却不是在同一个页面上显示的。我们可以做一个跳转中心。
news_list.aspx--news_list.aspx.cs
在news_list.aspx中只有一行代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="news_list.aspx.cs" Inherits="news_list" Title="Untitled Page" %>
我以上是新闻列表的页面。我们事先在新闻分类的数据库中增加了一个templets_List字段,用于保存该分类的模板文件。
识别判断的程序如下:
public partial class news_list : Sper.baseuser
{
public string cid = "0";
protected override void Page_Load(object sender, EventArgs e)
{
base.Page_Load(sender, e);
if (!IsPostBack)
{
if (PageValidate.IsNumber(Request.QueryString["cid"]))
{
cid = Request.QueryString["cid"];
string templets_List = navdt.Select("id=" + cid)[0]["templets_List"].ToString();
bool hast = templets_List != "";
if (hast)
{
string tourl = templets_List + "?cid=" + cid;
if (Request.QueryString["page"] != null)
{
tourl += "&page=" + Request.QueryString["page"];
}
//Response.Write(tourl);
//Server.
//Thread.Sleep(3000);
//Server.
Server.Transfer(tourl, false);
}
else
{
string tourl = "news_list_main.aspx?cid=" + cid;
if (Request.QueryString["page"] != null)
{
tourl += "&page=" + Request.QueryString["page"];
}
Server.Transfer(tourl, false);
}
}
}
}
}
到此,我们的模板机制就完成了。你要新添加模板的时候。只需要复制一个news_list_main.aspx文件,重命名后,修改里面的呈现效果就行了,在里面你可以任意调整布局,控件选择,新增加控件等。
效果演示
http://www.21nm.net/html/c34/page1.html
http://www.21nm.net/html/c23/page1.html
http://www.21nm.net/html/c17/page1.html
以上三个链接你可以看到,格式是一样的。只是分类不一样。列表的效果却不一样。
在园子的处女技术文章,欢迎大家拍砖。