Drupal Dev 我想知道:什么时候、什么变化
Path--Content--Theme *很简单 *很灵活 *你了解了吗
/index.php?q=user/1 *user/% (% wildcard) *$_GET[‘q’] *arg() *url_alias (多语言解决方案) *$_GET[‘q’] 不识庐山真面目
Menu System *input: path(user/%) *output: $content *a path, a menu item, a content 必须的 True(200 OK) Path -> Access_Callback -> Page_Callback -> $content False(403 Forbidden) Path -> Access_Callback -> $content False(404 Page Not Found) Path -> $content
Menu System *官方文档 node/102338 *hook_menu title、title callback、page callback、access callback、file *menu_router path、load functions、access_callback、page_callback、file、title、fit *menu_set_active_item() *menu_execute_active_handler()
q=user/% => page_callback *$_GET[‘q’] 用户请求、表达用户意愿 *一个path有且只有一个menu item *由load_functions将%转成对象 *由access_callback决定访问权限 *由page_callback返回$content *由theme($hook = ‘page’)输出页面内容 $content $blocks $menu $link … *好吧theme()复杂,苦涩,强大
q=user/% => page_callback 3 4 user_view() 5 一般arg(0)是module名称 找到page_callback (user_view) 就知道$content
theme() 1 theme() 一切输出尽出于此 2 hook_theme 3 _theme_process_registry() 4 #module#_theme *$hook_theme[$hook][‘template’] *$hook_theme[$hook][‘function’] 5 render_function、preprocess_function、$suggesionts、
hook_theme 1 function 2.template 'user_signature' => array( 'arguments' => array('signature' => NULL), ) *总能在user.module.php或者user.pages.inc找到函数theme_user_signature($signature = NULL) *函数theme_user_signature($signature)返回值,就是theme(‘user_signature’)要返回的值 2.template 'user_profile' => array( 'arguments' => array('account' => NULL), 'template' => 'user-profile', 'file' => 'user.pages.inc', *user_theme() *arguments 会被合入到$variables *template: 在user模块目录,总能找到文件user-profile.tpl.php文件,文件内容就是theme(‘user_profile’)要输出的内容 *file指定了需要include的文件.
theme (template) 1 hook_theme_info 2 有一个与之对应的*.tpl.php 3 *.tpl.php可用到的变量存放在$variables 4 $variables变量由preprocess functions推送 5 默认的render函数theme_render_template 6 $hook_theme_info[‘template’]指定模板文件
Preprocess function order *node/223430 已指出 *template_preprocess *template_preprocess_hook Template > Module Name > Theme Engine Name(phptemplate) > Theme Name(garland)
theme(‘page’, $pc_rtn) * index.php * hook是page * $pc_rtn 是page_callback函数返回值 * hook_theme_info ($hook = ‘page’) template:page path:themes/garland include files: type:theme_engine theme path:themes/garland arguments:,1,1 theme paths:modules/system,themes/garland Preprocess functions: template_preprocess template_preprocess_page phptemplate_preprocess_page
theme (‘page’) * 一个页面调用theme()次数
跟踪theme()调用 *page_callback() 有可能调用 *index.php 有且只调用一次theme(‘page’) *template_preprocess() 没有调用 *template_preprocess_page() 调用多次 *phptemplate_preprocess_page() 调用多次
$variables * theme_render_template() * var_dump($variables) * 更好的办法
Edit Theme *条件 * page.tpl.php * page.tpl.php会调用哪些theme() * theme()通过function还是template输出 * template对应的*.tpl.php文件 * *.tpl.php中使用了哪些变量 *方法 * #theme_name#_#hook_name# * css & js * *.tpl.php * 重写 theme() function & template
Q & A MSN:liaowq.box@gmail.com QQ:913185402 http://www.perfgeeks.com