首先,说一点个人经验,再谈谈其它的对代码的理解或是其他什么:
-
这套系统是一套功能齐全、非常好用的便于快捷开发的系统,因为非常值得学习(一位大神推荐的,其他几位大神也有同感,我是菜鸟),先说说我们应该怎么理解这套系统吧:a.首先,看系统后台管理使用文档(附链接:);b.其次,看架构分析文档(附链接:);如果你觉得以上的差不多了,看到这里,我相信你对系统的运行机制等等也开始有一定的了解;c.然后,看软件文档;(附加链接:),看如何实现模板、模型的添加;至此,你对全台的一次操作应该都有些了解了;d,最后,如果你想了几后台代码的话:看看“软件文档的基本语法()和标签说明()”,至此;你可以开始看 后台代码了(小小建议:了解过程的话最好多大“断点”,逐过程或逐语句运行。)
-
研究这套cms很重要的一个文件是:urls.config;它直接规定了页面的模板页、后台管理页(要继承页面),页面类型和url重写(url重写,看的真蛋疼,欺骗了我多少回,使代码难度大大加大了);
-
有大神说,只有站在巨人的肩膀上才看的更加高远;当我开始研究DTcms的源码时,我才对这句话有了深刻的理解,首先看看下面的我觉得很牛B的代码,我费了好久好久才弄懂的!:
方法:
protected string linkurl(string _key, params object[] _params)
{ Hashtable ht = new BLL.url_rewrite().GetList(); Model.url_rewrite model = ht[_key] as Model.url_rewrite; if (model == null) { return ""; } try { string _result = string.Empty; string _rewriteurl = string.Format(model.path, _params); switch (config.staticstatus) { case 1: //URL重写 _result = config.webpath + _rewriteurl; break; case 2: //全静态 _rewriteurl = _rewriteurl.Substring(0, _rewriteurl.LastIndexOf(".") + 1); _result = config.webpath + DTKeys.DIRECTORY_REWRITE_HTML + "/" + _rewriteurl + config.staticextension; break; default: //不开启 string _originalurl = model.page; if (!string.IsNullOrEmpty(model.querystring)) { _originalurl = model.page + "?" + Regex.Replace(_rewriteurl, model.pattern, model.querystring, RegexOptions.None | RegexOptions.IgnoreCase); } _result = config.webpath + _originalurl; break; } return _result; } catch { return ""; } }
调用: <div class="nav">
<ul> <li><a href="<%linkurl("index","")%>">首 页</a></li> <li><a href="<%linkurl("article_list","")%>">新闻资讯</a></li> <li><a href="<%linkurl("goods_list","")%>">商品展示</a></li> <li><a href="<%linkurl("photo_list","")%>">图片分享</a></li> <li><a href="<%linkurl("down_list","")%>">资源下载</a></li> <li><a href="<%linkurl("feedback","")%>">在线留言</a></li> <li><a href="<%linkurl("content","about")%>">关于我们</a></li> <li><a href="<%linkurl("content","contact")%>">联系我们</a></li> </ul> </div>注释:这段牛B的代码就是(其实就是对应了url.config文件):首先以哈希表获取url.config配置文件中的所有信息,然后以Key(对应配置文件中的name属性)来筛选,获取某一条,并将它转化为一个url_rewrite实体(这个太TMD的牛B了!!!!!);如果获取为非空的话,使用format方法来拼写从定向路径,并返回。(我花了好久好久才懂的啊,这个代码真是太牛B了);
碰到的难点问题:
-
正则表达式不过关,很多涉及到这个的不理解;
-
url重写,还不熟;
以上两个方面让我很吃亏!!!!!
备注:这套系统的url重写很厉害,用的很多,不要轻易相信其他的跳转地址,对理解代码很不利。
最后发表一下感慨吧:研究这套系统的源代码,颠覆了我之前的所学!