16.4 使用drupal_render呈现页面数组

admin 的头像
Submitted by admin on 星期一, 2015-08-03 10:04

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com​
现在,整个$page数组已经构建完成了,Drupal是怎么把它转为HTML页面的呢?注意这里的这个数组的类型是page,这个和表单元素数组,是一样的。Drupal6里面的表单数组,在Drupal7下,概念上做了进一步的扩充,除了表单元素以外,区块、节点、页面都是以呈现数组的形式出现。所有的呈现数组,经过drupal_render函数处理,就会转换成对应HTML形式。我们来看一下drupal_render的定义。
function drupal_render(&$elements) {
// Early-return nothing if user does not have access.
if (empty($elements) || (isset($elements['#access']) && !$elements['#access'])) {

Drupal版本:

16.2 页面数组的合成

admin 的头像
Submitted by admin on 星期四, 2015-07-30 09:27

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
这是我们这里实际执行的语句。用来合成页面的是drupal_render_page函数。这个时候,传递过来的$page_callback_result,只是一个包含节点对象的呈现数组,节点外面的区域、区块是怎么加进来的呢?这是很多初学者的疑问。让我们来看这个函数的定义:

Drupal版本:

16.1 drupal_deliver_html_page

admin 的头像
Submitted by admin on 星期四, 2015-07-30 09:26

​作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
我们在node_menu里面,并没有定义'delivery callback',所以这里的$default_delivery_callback将会使用Drupal的默认值。$page_callback_result就是刚才返回的包含节点对象的呈现数组。现在,让我们来看一下drupal_deliver_page,是怎么将这个数组转换成整个页面,并返回给浏览器的。

Drupal版本:

16 页面内容组装

admin 的头像
Submitted by admin on 星期四, 2015-07-30 09:24

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
现在,包含节点对象的可呈现数组,已经返回来了。这个页面是怎么构件出来的呢?让我们回到函数menu_execute_active_handler上面来。

Drupal版本:

15 SQL语句的调用

admin 的头像
Submitted by admin on 星期四, 2015-07-30 09:22

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
曾经有人在这里,问过我一个这样的问题,我怎么没有看到SQL语句啊?我们前面讲了,在向node_page_view传递参数之前,调用了node_load函数,将节点ID转为了节点对象。我们来看一下node_load函数的定义。
/**
* Loads a node object from the database.

Drupal版本:

13 主内容的生成

admin 的头像
Submitted by admin on 星期五, 2015-07-24 09:58

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
下面来看这句抽象的代码:
$page_callback_result = call_user_func_array($router_item['page_callback'], $router_item['page_arguments']);

Drupal版本:

页面

Subscribe to Think in Drupal RSS