Drupal专业开发指南 第1章 Drupal工作原理(2)对请求提供服务 - g089h515r806的专栏 - CSDNBlog

来源:百度文库 编辑:神马文学网 时间:2024/05/01 12:23:12

文件布局(File Layout

                 译者:葛红儒        Eskalate科技公司

理解默认Drupal安装的目录结构,能够帮助你调试你的站点,并教你一些重要的最佳实践,比如下载的模块和主题的放置位置,如何拥有不同的Drupal轮廓(profile)。一个Drupal默认安装的目录结构如图1-4所示。

文件夹目录中的每一元素的详解如下:

files:Drupal默认不带有这个文件夹,但是如果你想使用一个定制的logo,启用用户头像,或者在你的站点上上传其它媒体文件时,你需要这个文件夹。运行Drupal的web服务器需要具有对这个子目录进行读和写的权限。

 

includes :包含了Drupal常用的函数库。

 

misc:用来存储JavaScript,和在Drupal安装中备用的各种图标和图片。

 

modules:包含所有的核心模块,其中每个模块位于它自己的文件夹下。最好不要乱动这个文件夹下面的任何东西(你添加的其他模块放到sites目录下)

 

profiles:包含一个站点的不同安装轮廓(profile)。如果在这个子目录下面,除了默认的轮廓(profile)以外,还有其它的轮廓(profiles),那么在你第一个安装Drupal站点时Drupal将向你询问想要安装哪一个轮廓(profile)。安装profile的主要目的是自动的启用核心的或者第3方的模块。比如一个电子商务轮廓(profile)的示例,它将自动把Drupal作为一个电子商务平台进行安装。

 

scripts:包含了许多脚本,这些脚本可用于检查语法,清洁代码,使用cron处理特定情况等等。在Drupal的请求生命周期中用不到它;里面有一些shell和Perl的有用脚本。

 

sites:包含了你对Drupal进行的修改,包括设置、模块、主题等形式(参看图1-5)。你从第3方模块库中下载的模块,或者你自己编写的模块,都放在sites/all/modules下面。这使得你对Drupal所进行的任何修改都保存在单个文件夹里。在目录sites下面有一个名为default的子目录用来放置你Drupal站点的默认配置文件--- settings.php。通常拷贝default目录并使用你站点的URL对其重命名,这样你的设置文件就位于sites/www.example.com/settings.php.

 

themes:包含了Drupal的模板引擎和默认主题。

 

图1-4 Drupal安装的默认目录结构

 

图1-5 sites文件夹用来存储你的所有Drupal修改

 

对一个请求提供服务(Serving a Request)

当Drupal收到一个请求时都发生了什么,如果对此有一个概念上的框架,这对以后很有帮助,所以本部分将为这一框架提供一个快照。如果你自己也想追踪它的话,使用一个好的调试器,从index.php开始,Drupal的大多数请求都从这里开始。对于展示一个简单web页面,这里所列的顺序看起来有些复杂,但这是灵活性所必需的。

Web服务器的角色

Drupal运行在一个web服务器上,通常是Apache上。如果web服务器识别Drupal的.htaccess文件,那么将初始化一些PHP设置,并启用简洁(clean)URL。

 

注意 Drupal支持简洁(clean)URL,也就是像http://example.com/foo/bar的一样的URL。Drupal的.htaccess文件中的mod_rewrite规则将这一路径转换为index.php?q=foo/bar。所以在内部,无论是否启用了简洁(clean)URL,Drupal总是使用相同的路径(存储在URL查询参数q中)。在这里,内部路径应该为foo/bar。内部路径也被称为Drupal路径。

 

在备选的web服务器中,比如微软的IIS,可以使用一个ISAPI模块比如ISAPI_Rewrite来实现简洁URL。

 

引导指令流程(The Bootstrap Process)

对于每个请求,Drupal通过一系列的引导指令阶段来引导它自己。这些阶段在bootstrap.inc中定义,接下来的部分描述了处理流程。

 

配置(Configuration)

在这一阶段将填充Drupal的内部配置数组,并建立站点的基础URL($base_url)。通过include_once()来解析settings.php文件,任何已被覆盖的变量将被应用。

早期页面缓存(Early Page Cache)

当在需要更高的性能水平时,甚至在试图建立数据库连接之前可能就需要要调用缓存系统了。早期页面缓存阶段让你(使用include())包含一个含有名为page_cache_fastpath()的函数的PHP文件,该函数接收并返回内容给浏览器。通过将page_cache_fastpath变量设置为TRUE,就可以启用早期页面缓存阶段了,而包含进来的文件是通过将cache_inc变量设置为文件的路径来定义的。

 

数据库(Database)

在数据库阶段期间,将决定数据库的类型,将建立初始链接以供数据库查询使用。

 

访问(Access)

Drupal支持基于一个主机名一个IP地址来禁止主机(对站点的访问)。在访问阶段,将快速的检查请求是否来自一个被禁的主机;如果是,那么将拒绝访问。

 

会话(Session)

Drupal利用了PHP内置的会话处理,但是它使用它自己的基于数据库的会话处理器来覆盖PHP的一些处理器。在会话阶段,将初始化或者重新构建会话。

 

后期页面缓存(Late Page Cache)

在后期页面缓存阶段,Drupal加载足够的支持代码来决定是否需要从页面缓存中提供一个页面。这包括,把来自于数据库的设置合并到在配置阶段创建的数组中,加载或者解析模块代码。如果在会话中显示请求来自于匿名用户并且启用了页面缓存,那么将从缓存中返回页面,执行到此停止。

 

路径(Path)

在路径阶段,将加载处理路径和路径别名的(aliasing)的代码。该阶段使得用户可读的URL被转化为Drupal路径,并处理内部Drupal路径的缓存和查询操作。

 

完整(Full)

该阶段是引导指令的最后一个阶段,它包括加载一个通用函数库,主题支持,和支持回调映射,文件处理,Unicode,PHP图片工具集,表单的创建和处理,自动排序的表格,和结果集的分页。在这里将设置Drupal定制的的错误处理器,设置本地化,并加载所有启用了的模块。最后Drupal调用init钩子,这样在对请求正式开始处理以前,将有机会通知相应的模块。

 

一旦Drupal的整个引导指令完成了,那么框架中的所有部分现在都可以使用了。现在是时候获得浏览器的请求并将它委托给一个处理它的函数。在URLs和处理它们的函数之间的映射,是使用一个回调登记来完成的,这个回调登记负责URL映射和访问控制。模块使用菜单钩子来注册它们的回调函数(更多信息,参看第4章)

 

当Drupal为浏览器请求的URL找到一个存在的回调函数,并且用户有权访问该回调函数,那么控制权将转移给回调函数。

处理一个请求(Processing a Request)

回调函数做了流程要求做的事情,并收集满足请求所需要的数据。例如,收到一个对内容的请求比如http://example.com/q=node/3,URL将被映射到node.module里面的函数node_page_view()。进一步的处理将从数据库中取回该节点的数据并将它放到一个数组中。接着,就到了主题化的时候了。

主体化数据(Theming the Data)

主体化涉及到将已被取回,操作或者创建的数据转化为HTML。Drupal将使用管理员选用的主题来为网页提供一个合适的外观,并将生成的HTML移交给web浏览器。

总结

读完本章后,你应该能大致理解Drupal的工作原理,并对当Drupal为一个请求服务时都发生了什么有个概念。组成网页服务处理流程的个部分将在后面章节中详细介绍。

 

 

 

发表于 @ 2008年03月24日 18:27:00|评论(0)|编辑

Drupal专业开发指南 第1章 Drupal工作原理(2)对请求提供服务 - g089h515r806的专栏 - CSDNBlog Drupal专业开发指南 第1章 Drupal工作原理(2)对请求提供服务 - g089h515r806的专栏 - CSDNBlog Drupal专业开发指南 第1章 Drupal工作原理(1) - g089h515r806的专栏 - CSDNBlog Drupal专业开发指南 第1章 Drupal工作原理(2)对请求提供服务 Drupal专业开发指南 第1章 Drupal工作原理(1) Drupal专业开发指南 第2章 创建一个模块(1) Drupal专业开发指南 第2章 创建一个模块(2) Drupal专业开发指南 第3章 模块特定设置(2) Drupal专业开发指南 第3章 模块特定设置(1) 散列表(哈希表)工作原理 - ilibaba的专栏 - CSDNBlog Drupal的汉化方法 使用开源软件设计、开发和部署协作型 Web 站点,第 5 部分: Drupal 入门 使用开源软件设计、开发和部署协作型 Web 站点,第 6 部分: 在 Drupal 中构建... 使用开源软件设计、开发和部署协作型 Web 站点,第 11 部分: 使用 Drupal 中... Drupal 与电子商务系统Magento的集成 SD卡驱动开发随笔(1) - Professionaler(自由人)的专栏 - CSDNBlog drupal.org | Community plumbing 从头学习Drupal Drupal | BenJr.tw 浅述如何为程序提供二次开发功能 - 1 (原创) - wisenowa的专栏 - CSDNBlog Bloom Filter概念和原理 - medie2005的专栏 - CSDNBlog 安装后的一些设置和操作 | Drupal China 安装后的一些设置和操作 | Drupal China 编写你自己的单点登录(SSO)服务 - javachannel的专栏 - CSDNBlog