21
Oct
2015
BlueSnow

【Drupal】模块目录组织方式总结

我们都知道在drupal系 统目录下模块可以放在很多目录下,Drupal会按照一定的次序扫描所有的符合规范的目录下的模块。但是并不意味着我们可以随意放置模块,比如系统的 modules目录下放的都是核心自带的模块,为了以后的升级方便,我们不应该将模块放在/modules目录里面,那么Drupal的模块应该怎样放置 呢?

 

多站点模式

如果你的网站是以Drupal多站点方式运作的,意思是多个网站共享一套Drupal代码,这时我们的第三方模块一般都放在/sites/all /modules目录。而其他模块则分网站放到/sites/网站名/modules目录下,如果你的自定义模块想要跨多站共享的话,也需要放到 /sites/all/modules里,这时为了区分,你需要在/sites/all/modules目录里建子目录,例如contrib代表第三方模 块目录,custom代表自定义共享模块目录。

Drupal多站点其实还有一种不共享代码,只共享数据库的情况,但这与本文要讨论的主题无关,就不做过多说明了。

单站点模式

单站点模式是我们最常见的情况,我们就是要用一套Drupal代码建一个站,如果是一个比较大型的网站,需要使用的模块众多,我们就需要做一些规划 了,以下是我在开发过程中的一些心得,希望对大家有所帮助。(下文的目录都放在/sites/all/modules目录下,以保证/sites目录下的 站点目录干净清爽)

contrib 

毫无疑问,这个目录是放置第三方模块的

custom_contrib

放置的也是第三方模块,但是有一点点与我们的需求不符,又没有提供足够的钩子做扩展,所以我们就需要硬编码了,放在这个目录可以提醒你哪些模块是被修改过的,升级时要多加小心,不要遗漏之前打过的补丁。

custom

存放自定义模块

features

存放我们经过规划从后台导出的一批features,每个feature一般是要围绕一个功能特性进行打包,不过如何规划features每个人可能有不同的理解,只要能有清晰的思路,并且以后便于维护即可。

development

存放所有开发相关,而与网站业务逻辑无关的模块,比如devel, schema等,这些模块也不一定是只能在本地使用,但一般是不建议在生产服务器启用的,将这些模块放在一起,对生产服务器的问题排查和优化有一定的帮助。

localhost

这是一个特殊的目录,里面存放的是不放入版本控制的模块,可以是第三方模块,也可以是自定义模块,一般我会在里面继续细分一些子目录,但localhost目录则需要根据版本控制软件设置目录的ignore属性,这样不管里面放了多少代码都不会因为误操作上传到代码库。

第三方模块,之所以有第三方模块放到localhost是因为在团队开发过程中,你不能任意的提交模块到版本库,而有些开 发相关的模块对本地开发又很有帮助,所以我将版本库里没有,但对我有用,对其他人未必有用的第三方模块,主要是开发相关的模块,放到localhost 下,以提高本地开发调试效率。

自定义模块,自定义模块放到localhost当然也是不希望代码被上传到版本库,但为什么有这样的自定义模块呢,当然也 是为了本地开发效率的提高,这也是一些开发相关的模块,但大多数情况下,都是对业务逻辑和数据做一些CRUD,比如一键插入删除测试数据,比如一键删除近 期测试用户等等,这对本地开发效率有极大的提升,或者可以保证本地数据库的精简。

not_in_use

这个目录里的模块来自于custom目录,因为一些自定义的模块可能因为某些原因,比如需求变更,模块功能不再需要,这时如果封装良好的话,需要把 模块禁用掉,但由于自定义代码里包含许多业务逻辑,删除肯定不是一个好办法,我们以后可能需要把这个功能拿回来重新使用,或者需要参考里面的代码,所以我 们会需要把这样的模块放到一个单独的目录,从而哪些模块正在被使用,哪些模块目前已经不用了,就是一目了然的了。

总结

从以上目录划分可以看出,我们就是在通过多放几个子目录让代码结构,主要是模块结构,变得更有条例,在实际项目中,由于业务逻辑的不同,我绝对相信 大家有需要新建除了上文提到目录以外的其他目录,而且根据项目大小的不同,以上的目录建议也不是都必须存在的,大家可以根据实际情况进行调整。

总之由于网站一般都需要长期维护,而随着时间的推移很多项目相关的信息你可能都有所遗忘,因此我们开发过程中总要想一些办法让今后项目可以比较容易 的理解和维护,从小的方面是代码符合规范,注释良好,代码精炼易懂,从大的方面就是项目的目录结构,技术架构,文档,任务管理等等。

最后,如果大家对模块的目录组织结构也有自己的理解,可以通过回复本文与大家分享。

补充知识点

移动模块目录的方法:(感谢流云同学的提议)
移动模块目录意味着其定义的hook_menu都不会正常工作了,许多依赖于此模块的模块无法正常工作,因此如果代码书写不规范,大量移动模块可能引起白屏问题。这里简单说下常见的两种情况的解决方法。

1,如果不发生白屏,则先到后台的模块列表页,这个页面有一个功能就是重置扫描模块列表,然后清缓存即可。
2,如果发生白屏,进不去模块列表页,可以自己在index.php里,加上registry_rebuild()函数(D7,D6是另一个rebuild函数),执行一次之后删掉,然后清缓存。

 


声明: 本站所有文章欢迎转载,所有文章未说明,均属于原创,转载均请注明出处。
本文有效链接: http://www.drupal001.com/2013/08/drupal-modules-directory-structure/
版权所有: Drupal与高性能网站架构 http://www.drupal001.com

Source: