现在的位置: 首页 > 综合 > 正文

第二天的工作内容 系统架构分析

2012年01月21日 ⁄ 综合 ⁄ 共 3650字 ⁄ 字号 评论关闭

10月13号

上午:
申请skype账号

发送邮件给大家

申请gmail和使用gtalk

再次发送邮件给大家,通知gmail邮箱地址

下午:
继续分析aupair:侧重点YzLib架构分析及使用
1、
 .htaccess是地址伪静态化 rewrite
 rewriteengine on
 RewriteRule ^(/w+)/.html$ index.php?m=$1&%{QUERY_STRING} [L]

 index.html -> index.php?m=index
 Register.html?i=1 -> index.php?m=Register?i=1
 Statics.html?act=membership -> index.php?m=Statics?act=membership
2、
 Templates/Login.tpl文件中的 res 是通过ajax 在Index.class.php中读取的,
 作用是根据用户的identity和UserId来确定res的值的,进而判断用户应该跳转到相应的页面
 比如管理员1、
 已经申请并通过审批的互惠生0、
 第一步已经注册完毕的家庭21、
 第一步注册已经完成的互惠生22、
 第二步已经注册完毕的家庭31、
 第二步注册已经完成的互惠生32、
 被禁用的用户4。

3、BasePage.class.php好比.net中的*.Master模版文件,那么又是如何实现的呢,Template.class.php起到什么作用呢?

Template.class.php就是smarty的配置、初始化类,或者说是smarty帮助类、smarty封装类,为Page基类服务。

构造方法的灵活运用,好像.net中的PageLoad()一样这里最终也是返回一个Page对象,就好像是一个aspx是一个page类一样。

BasePage继承Page,初始化的时候也会执行Page类中的所有方法,并最终先根据条件判断后调用父类Page类中的displayTemplate方法显示内容。

那么Page类的构造方法做了什么呢?分析如下:
a.)判断Template对象是否存在,无则创建,利用单例模式
b.)判断提交方式是否为post,是则获得___eventTarget的值并执行$e=$this->eventMap[$evtTarget];其中$e未知。
c.)初始化$ret,$ret的值决定于onLoad()方法的返回值和$e的取值
d.)根据$ret的值进行显示页面内容。

那么BasePage类的构造方法做了什么呢?分析如下:
a.)设置head、left、under、foot等区域的模版
b.)根据session中的Logined Review进行判断,然后重定向并结束构造方法,如果没有一个if成立或者Activate==1成立那么继续执行,并显示相应内容。

其他:
BasePage.class.php 中:
 $this->setHeadTemplate("Head.tpl");
 $this->setLeftTemplate("Left.tpl");
 $this->setUnderTemplate("Under.tpl");
 $this->setFootTemplate("Foot.tpl");
设置好了页眉、页脚、bottom region、Left region,显示的时候是调用的父类Page中的displayTemplate;
displayTemplate调用的是Template类中的display,
display是对smarty的display的一次封装(本质是调用)。

其中Page类中有if(empty($this->bodyTemplate)) $this->bodyTemplate=get_class($this).".tpl";的判断,
这是center region,也就是工作区的现实内容,在这里完成配置,这里要有命名规则的规范。

最终显示,调用Page类的displayTemplate方法。

4、略

5、略

6、略

7、Context.class.php起什么作用呢?分析如下:
index.php 类似于Java中的servlet,结合.htaccess文件的rewrite实现伪静态技术模仿监听,
那么Context.class.php就是controller的一部分,不同的url产生不同的$_GET["m"]值。
调用不同的Page目录下面的以$_GET["m"].'class.php'命名的类,
它们每个类都继承BasePage类,BasePage类又继承Page类,重点在各自的构造方法中,
Page类可以调用Template类中的方法,Template类就是smarty的封装类,
所以每个$_GET["m"].'class.php'都有smarty的特性,而且这些都不用去管,
因为在构造函数中所有的工作都随着类的实例化自动的完成了。

总结:
如果进行二次开发,
那么关注的只是Page目录下面的****.class.php类,
和Template目录下面的****.tpl 模版文件,
和注意工作流程和流程每个阶段标示的设置。

添加一个小小的功能,如用户访问量统计报表,暂时不做任何权限设置。
实现步骤:
1、修改Nav.tpl,添加一个连接,

修改内容:
|&nbsp;&nbsp;&nbsp;&nbsp;<a href="Stat_chart.html">{$left_Stat_chart}</a>&nbsp;&nbsp;&nbsp;&nbsp;

2、添加各一Stat_chart.class.php文件到Page目录下,编写Stat_chart类并继承BasePage类,前提是import("Pages.BasePage");
如果有需要的话:
import("LAN.LeftLan");
import("LAN.RightLan");

同时:
protected function onDisplay()
{
 $lan=new LeftLan();
 $right=new RightLan();
 $this->setTemplateArr('left',$lan->Lan());
 $this->setTemplateArr('right',$right->Lan());
}

3、添加一个Stat_chart.tpl文件到Template目录下,并进行简单布局。
添加一些html标签和文字,暂时不用php的变量

问题:
smarty的变量是如何assign的?

在每一个Page目录下的类中都有如下方法:
$this->setTemplateArr('right',$right->Lan());

protected function setTemplateArr($cla,$arr)方法定义在Page类中

具体实现如下:
protected function setTemplateArr($cla,$arr)
{
 foreach($arr as $key=>$val)
 {
  $this->setTemplateVar($cla.'_'.$key,$val);
 }
}

其中protected function setTemplateVar($var,$val)方法也定义在Page类中,

具体实现如下:
protected function setTemplateVar($var,$val)
{
 $this->template->set($var,$val);
}

而$this->template是Template类,这充当Page类的一个属性。
这里的public function set($var,$value)方法是对smarty的一个封装。

具体实现如下:
public function set($var,$value)
{
 $this->smarty->assign($var,$value);
}

其中$this->smarty这是一个smarty对象,在Template类的构造函数中初始化了这个成员变量。

其中的很多值是由BasePage类的displayTemplate();方法来赋值的。

总结:
 如果要tpl文件中获得相应的php变量,
 1、批量传递数据
  可以再相应的Page下面的类中执行类似$this->setTemplateArr('right',$right->Lan());的方法。
 2、单条传递数据
  可以再相应的Page下面的类中执行类似$this->setTemplateVar("Stat_chart_msg",$Stat_chart_msg);的方法。

如何改变导航栏的内容,难点在于,在点击任何链接的时候都要保证导航树的提示内容不变,
那么这里的nav.tpl的php变量就应该是在Page或者BasePage中初始化的

 

晚上,提到的:
aupair
 swfupload作用,可能会用到那个工程。
 葛鹏是否讲动态页面
 五个页面的功能
 注册未完成和修改跳转到的相应页面

抱歉!评论已关闭.