Skip to content

Commit

Permalink
finish line 11
Browse files Browse the repository at this point in the history
  • Loading branch information
furtherLee committed Aug 28, 2012
1 parent 5ff7f4c commit d2830a1
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion volumn2/Moodle/Moodle.md
Expand Up @@ -269,13 +269,15 @@ Moodle所有的关键动作都会被日志记录下来。日志被写到数据

Line 8:全局变量$PAGE
--------------------
`$PAGE`存储着要被输出的页面信息。 这个信息在所有产生HTML的代码中都可以轻易获得。在这个脚本中,必须明确指明当前的上下文是什么。(在其他的情况下,它或许已经通过`require_login`被自动设置了)这个页面的URL也必须被明确。这看起来似乎很没必要,但是需要它的合理性在于你或许会使用不同的URL来获取同一个页面,但是传递给`set_url`的URL必须是一个这个页面的规范化URL —— 一个永久链接,如果你喜欢的话。页面的标题也要被设置。这样HTML的head元素就被写完了
`$PAGE`存储着要被输出的页面信息。 这个信息在所有产生HTML的代码中都可以轻易获得。在这个脚本中,必须明确指明当前的上下文是什么。(在其他的情况下,它或许已经通过`require_login`被自动设置了)这个页面的URL也必须被明确。这看起来似乎很没必要,但是需要它的合理性在于你或许会使用不同的URL来获取同一个页面,但是传递给`set_url`的URL必须是一个这个页面的规范化URL —— 一个永久链接,如果你喜欢的话。页面的标题也要被设置。这样HTML的head元素就被构建了

Line 9:Moodle URL
------------------
$PAGE->set_url(new moodle_url('/local/greet/index.php'),
array('name' => $name)); // 9

顺便说一句,上面用过的`add_to_log`并没有使用这个辅助类。确实,日志API不能够接受`moodle_url`对象。这种不一致性是一个像Moodle一样老的code-base①的典型特征。
> ① 译者注:code-base通常是指那些由人力产生的代码,许多自动生成的代码不算,比如由配置文件通过工具生成的代码就不是code-base。一般code-base的代码才有用版本控制的价值。
Line 10:国际化
--------------
Expand All @@ -299,7 +301,13 @@ Moodle使用自己的系统来支持多语言。或许现在有许多的PHP国

Line 11:开始输出
----------------
echo $OUTPUT->header(); // 11

这又是一个看似平淡无奇的一行,然而它所做的工作可比看起来多得多。这里最关键的一点在于,在任何的输出之前,页面所采用的主题(皮肤)必须被计算出来。这取决于页面上下文以及用户偏好的组合。然而,`$PAGE->context`只在第8行被设置,所以`$OUTPUT`全局变量不能在脚本的一开始就初始化。为了解决这个问题,一些PHP的小技巧根据`$PAGE`的信息,在第一次调用输出方法的时候才构造合适的`$OUTPUT`

另一件需要考虑的事情是,Moodle中的每一个界面都有可能包含块(blocks)。这些块是一部分可以额外配置的内容,通常被显示在主要内容的左侧或者右侧。(它们是一类插件)同时,到底哪些特定的块需要被显示出来,通过一种弹性的方式(管理员可控),由页面的上下文和其他页面的标识来决定。所以,输出的另一个准备工作就是调用`$PAGE->blocks->load_block()`

当所有必要的信息都被准备好了之后,主题插件(控制页面的整体外观)被调用以产生页面的整体布局,包括任何标准需要的头部和页脚。这个调用同时也负责在HTML中对应的位置填入块中的内容。在布局的中间,这里会有一个`div`,这个页面特定的内容会显示在这里。当HTML的布局产生之后,在主要内容的`div`上一切两半。在第一半完成后,其他的部分被存储起来,由`$OUTPUT->footer()`返回。

Line 12:输出页面Body
---------------------
Expand Down

0 comments on commit d2830a1

Please sign in to comment.