Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Drupal7如何呈现页面?_Php_Drupal_Drupal Themes - Fatal编程技术网

Php Drupal7如何呈现页面?

Php Drupal7如何呈现页面?,php,drupal,drupal-themes,Php,Drupal,Drupal Themes,Drupal7如何呈现页面?它相当于MVC的视图系统 在渲染请求的最终HTML页面时,我使用过的大多数PHP框架(基于MVC)都采用一种方法,即顶层布局/页面PHP文件设置基本文档结构,然后通过include或view呈现方法呈现各种子视图 //Simplified version Page.phtml Head.phtml Body.phtml Banner.phtml Topnav.phtml Left.phtml

Drupal7如何呈现页面?它相当于MVC的视图系统

在渲染请求的最终HTML页面时,我使用过的大多数PHP框架(基于MVC)都采用一种方法,即顶层布局/页面PHP文件设置基本文档结构,然后通过include或view呈现方法呈现各种子视图

//Simplified version
Page.phtml
    Head.phtml
    Body.phtml
        Banner.phtml
        Topnav.phtml
        Left.phtml
        Content.phtml
        Footer.phtml
对于Drupal对此的看法,我有点困惑。我正在阅读Pro Drupal开发,它从类似的领域开始,即
page.tpl.php
。然而,它掩盖了主题引擎(这是正确的术语吗?)是如何将PHP的各个部分引入到这个页面的(不是批评,这本书采用的方法与我所走的道路不同)

此外,Drupal7主题似乎没有
page.tpl.php
文件,因此(对我来说)不清楚页面框架的来源。此外,从我所读到的内容来看,似乎涉及到了“块”,但我不清楚是“块”构成了整个页面,还是块是主题有选择性地使用的东西

那么,从高层次的概念出发(或者根据您的喜好详细介绍),Drupal7是如何呈现页面的呢


我意识到你可以,也可能应该,从Drupal开始,而不了解一切是如何联系在一起的。我特别想学习各种Drupal系统是如何结合在一起的。向厌倦阅读此免责声明的人道歉

当我试图理解这些模板是如何组合在一起的时,我发现最好的工具是。它的工作原理有点像Firebug,允许您单击页面的区域以查看用于页面各个部分的主题函数或模板文件,以及可用于它们的“”

模板可以以多种方式组合在一起。Drupal确实对如何嵌套它们做了一些假设,这些假设反映在模板文件中可用的默认变量中。但是,和都可以修改

据我所知,已被Drupal 7中的替换


我听过的关于“块”的最好描述是,它们是用来显示内容的,这些内容将在网站的各个区域重复使用。最常用的是侧边栏,如“最近更新的页面”列表或“现在在线的用户”列表。

请尝试查看drupalcon在5分钟后(05:10)在Drupal7上构建页面的演示。对不起,我不能在这里详细说明,因为我还是自己看的。并且试着去理解它

[更新]

在观看演示后,这里是我关于drupal 7如何呈现页面的快速结论:

而不是你在问题中提到的普通方法

其中一个顶级布局/页面PHP文件 列出基本文档结构, 然后呈现我们的各种子视图 via包含或查看渲染方法

Drupal通过如下呈现流方法呈现页面

  • 引导
  • 菜单\u执行\u活动\u处理程序
  • 回拨
  • 投递回电
  • hook_page_alter()
  • drupal_渲染($page)
  • 然而,它掩盖了主题是如何实现的 引擎(这是正确的术语吗?) 将PHP的各个部分集成到 佩奇(不是批评,这本书的 采取不同于 我所走的道路)


    从呈现流3(page_callback)到流6(drupal_render($page))的各个部分都被提供,其中它开始返回一个drupal可呈现数组的数组,然后在主题中使用$page变量(从drupal_render($page)提供)呈现drupal内容。

    我认为这里有两个问题。首先,单个主题/模板是如何呈现/使用/显示的;其次,整个网站是如何组合在一起的。我想上面已经回答了第二个问题,所以我将试着对第一个问题做更多的解释

    首先,模块(这就是为什么system.module存在的原因,对于所有这些只有模块才能实现的功能,比如实现hook_menu())需要通过在

    说到这里,有两种不同的东西可以使用。一个主题函数,它是一个以主题为前缀的函数。通常用于页面中具有更复杂逻辑的较小元素/PHP类。还有一个模板,它是一个类似tpl.php的文件

    要使用主题函数/模板,您可以这样调用:

    $output = theme('table', array('rows' => $rows, 'header' => $header));
    
    html.php.tpl
      head.php.tpl
      page.php.tpl
        multiple regions
          multiple blocks
    
    或者你可以使用新的,所谓的可渲染数组。这基本上是要使用的数据+信息的数组:

    $output = array(
      '#theme' => 'table',
      '#rows' => $rows,
      '#header' => $header,
    );
    
    第二个是首选的,因为这意味着它将尽可能晚地主题化,其他模块可以在钩子中更改它。结果将完全相同,drupal_render()将在最终渲染期间调用theme()本身

    调用theme()时,它会查找要使用的函数/文件,查看它是否已被使用的主题覆盖,是否存在所谓的模板建议,然后使用它们

    要覆盖主题中的主题函数,请将其复制到template.php文件中,并将“theme_u”替换为“yourthemename_u”。如果是tpl.php文件,请将其复制到目录中

    现在,最终渲染过程所做的基本上是构建一个大的$page数组,这是一个可渲染数组(一些文档在中,然后调用它)

    页面/模板层次结构的全局结构(不是硬编码的,而是通过$page中的任何内容提供的)如下所示:

    $output = theme('table', array('rows' => $rows, 'header' => $header));
    
    html.php.tpl
      head.php.tpl
      page.php.tpl
        multiple regions
          multiple blocks
    

    在Drupal 7中,几乎所有内容都是一个块,包括实际内容(通常是一个节点)。主题定义了它拥有的区域,然后您可以在UI中为它分配块。

    知道Drupal 7为什么在系统模块中存储html.tpl.php吗?主题可以有自己的自定义html.tpl.php吗?是的,任何核心/