Ala*_*orm 8 php drupal drupal-themes
Drupal 7如何渲染页面?它与MVC的视图系统相当.
当谈到呈现请求的最终HTML页面时,我使用的大多数PHP框架(基于MVC)采用了一种方法,其中顶级布局/页面PHP文件设置基本文档结构,然后呈现我们的各种子视图通过包含或查看渲染方法.
//Simplified version
Page.phtml
Head.phtml
Body.phtml
Banner.phtml
Topnav.phtml
Left.phtml
Content.phtml
Footer.phtml
Run Code Online (Sandbox Code Playgroud)
我对Drupal对此的看法感到有些困惑.我正在通过Pro Drupal Development阅读,它开始于类似的领域page.tpl.php.然而,它掩盖了主题引擎(正确的术语?)如何将PHP的各个部分带入此页面(不是批评,本书的方法与我所使用的路径不同).
此外,Drupal 7主题似乎没有该page.tpl.php文件,所以它(页面骨架)的来源不明确(对我而言).另外,从我所看到的内容看起来似乎涉及"块",但我不清楚"块"是否构成整个页面,或者块是否是主题选择性使用的东西.
因此,从高级概念开始工作(或者根据您的喜好获得详细信息),Drupal 7如何渲染页面?
我意识到你可以,而且可能应该从Drupal开始,而不了解一切是如何结合在一起的.我特意试着学习各种Drupal系统是如何组合在一起的.向厌倦阅读此免责声明的人致歉!
Ber*_*dir 10
我想这里有两个问题.首先,如何渲染/使用/显示单个主题/模板,其次,整个网站如何组合在一起.我认为第二个问题已在上面得到解答,所以我将尝试再解释一下.
首先,一个模块(这就是为什么system.module存在的原因,对于所有这些只有模块可以像实现hook_menu()那样的东西)需要通过在hook_theme()中声明它来定义特定的主题函数/模板.
说到这一点,可以使用两种不同的东西.一个主题函数,它是一个以theme_为前缀的函数.通常用于页面的较小元素,具有更复杂的逻辑/ PHP,如theme_table().还有一个模板,它是一个像tpl.php一样的文件,如page.tpl.php
要使用主题功能/模板,您可以像这样调用theme():
$output = theme('table', array('rows' => $rows, 'header' => $header));
Run Code Online (Sandbox Code Playgroud)
或者你可以使用新的,所谓的可渲染数组的东西.这基本上是一个数据+信息数组,使用的主题:
$output = array(
'#theme' => 'table',
'#rows' => $rows,
'#header' => $header,
);
Run Code Online (Sandbox Code Playgroud)
第二个是首选,因为它意味着它将以尽可能晚的方式主题化,而其他模块可以在钩子中更改它.结果将完全相同,drupal_render()将在最终渲染期间调用theme()本身.
当调用theme()时,它会查找要使用的函数/文件,查看它是否已覆盖使用的主题,是否存在所谓的模板建议然后使用它们.
要覆盖主题中的主题函数,请将其复制到template.php文件中,并将"theme_"替换为"yourthemename_",如果它是tpl.php文件,则将其复制到您的目录中.
现在,最终渲染过程正在做的是基本上构建一个大的$ page数组,这是一个可渲染的数组(有些文档在hook_page_alter()中,然后在其上调用drupal_render().
页面/模板层次结构的全局结构(不是硬编码,而是通过$ page中的任何内容给出)是这样的:
html.php.tpl
head.php.tpl
page.php.tpl
multiple regions
multiple blocks
Run Code Online (Sandbox Code Playgroud)
几乎所有内容都是Drupal 7中的一个块,包括实际内容,通常是一个节点.主题定义它具有哪些区域,然后您可以在UI中为其分配块.