我受不了了!本来打算可以根据程序流程来分析一个东西的源码.但是那是不可能的.对一个类的讲解势必要把另外一个类说清楚-原来以为只要说清相关的就可以了(心中的一个声音:这就和人一样….心中的另一个声音:打住!能不能先别感慨!心中的一个声音小声说:哦….#@%#@#).而如此下去网会越来越大,所以还是趁早停止为妙.还是只是以类为单位来分析比较好.尽管经验不多的人会不得要领.
写了这么点,就让他去吧.这也算一个失败的教训.
上面说了,进入主页时,$m被赋值为’home’,新建对象$p.这次我们就来研究下Page()类,所以先研究下Page()的构造函数是比较需要的.
首先判断BABEL_DEBUG是否为true(在\htdocs\core\Settings.php可以看到情况,我就不啰嗦了).不是的话关闭所有报告,否则实例化了一个Benchmark_Timer对象,接着设置开始点,在然后新建一个数组,保存调试信息.Benchmark_Timer类是Pear中的一个类,用来统计函数运行速度,具体可以参考pear手册.下面导入语言文件,新建lang()对象.连接数据库,选择数据库,设置数据库的语言.然后依然根据BABEL_DEBUG是否为真,来决定是否保存数据库的调试记录.
(预留)
下面的缓存设置用到了PEAR中的Cache_Lite类.
通过User->vxIsLogin()判断用户是否登入,检查客户端,并保存至$_SESSION['babel_ua'].删除超出规定时间的用户从表babel_online
进入了一个对$m的选择循环,进入’home’.其中首先判断在\htdocs\core\Settings.php设置的BABEL_DNS_NAME的域名是否和当前服务器运行的($_SERVER['SERVER_NAME'])一致,如果不是的话重定向到设定的域名header(’Location: http://’ . BABEL_DNS_NAME . ‘/’).首先通过$_SESSION['babel_ua']['DEVICE_LEVEL']的值判断是否是移动设备,这里为真的情况按下不表.直接进入普通情况,判断$_GET['style']值,进入Page()对象的vxHomeBundle()方法,参数,否则取在\htdocs\core\Settings.php设定的BABEL_HOME_STYLE_DEFAULT的值.在$_GET['style']设置的情况下会取$_SESSION['babel_home_style']的值.在一番判断以后同样调用vxHomeBundle()函数.打开V2EXCore.php文件看一下vxHomeBundle()的细节:
通过函数名可以大致看得出作用.不过还是看一下细节
似乎也没什么好说,设定字符集,去除客户端的缓存,加入关键字.那个if语句的作用是3秒后去某个页面,以后会用到.接下来,vxTitle函数,它可不是处理<title />这么简单啦.~
首先判断$msgSiteTitle是否为空,如果为空,则直接显示网站标题(一般为首页),否则之前加上当前页的标题.time()生成当前时间待用,把当前页的URL赋值给$_this_page待用,把几个无效页赋值给数组$_disabled_pages待用.下面就要检查当前用户是否登陆了,这里涉及到一个USER类(位于\htdocs\core\UserCore.php,还是碰到讲哪哈),判断$_SESSION['hits']的数值,这个Session就是保存当前访问的页面数,不是说一次访问多少多少页面会加钱么,就在这里控制.