Category Archives: Drupal

Drupal7配置Memcache/Memcached

Memcache module:
https://drupal.org/project/memcache

Documentment:
https://drupal.org/node/1131458

Monitor and Debug:
http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/
https://code.google.com/p/phpmemcacheadmin/

Drupal6 同类型模块:cacherouter

参考资料:http://drupals.cn/node/321
http://blog.timenic.com/install-memcache-on-centos.html
http://www.ccvita.com/257.html
http://blog.csdn.net/heiyeshuwu/archive/2006/11/13/1380838.aspx

Drupal慢的原因

不止一次听人抱怨Drupal 慢,在本地开发环境尤为常见,较为常见的原因有:~

本地环境造成慢的原因,最常见的是由update manager 造成的,如果你发现你开的Drupal 页面 一直在等待响应,一般都是它造成的,其实根源在于国内网络因为你知我知的原因,访问国外网站常不稳定,而update manager不断在后台检查更新,遇到网络问题的时候就卡住,影响网页本身的加载速度。在模块列表那里禁用update manager 即可。

第二个慢的原因是,toolbar,就是管理工具条,有时候这个东西的ajax加载很慢导致网页变慢。在模块列表那里禁用即可。

第三个慢的原因是,php.ini 中的memory_limit 设置太少,一般默认设置大小为32M。当你装很多模块的时候,就会慢,特别是在后台的时候尤为常见(比如区块列表页,模块列表页),且最常见的症状就是白屏。建议这个最少放200M。

说实在的,如果不用PHP 缓存的话,Drupal 还是很慢的,不太强的服务器,(用iwebtool 测试)4-6秒的执行时间都可能,但是一般独立服务器或者VPS装了php 缓存 插件,比如apc,xcache 之类都能得到极显著的提升。如果配合fastcgi 就更爽了(一般内存少的VPS 就不要装fastcgi了,国外的共享空间则默认开fastcgi的。笔者的服务器nginx+fastcgi+apc+drupal 自带的缓存,一般的文章页面用iwebtool 测试都不超过0.5秒)。所以自己装的环境还是要装个php 缓存插件,推荐apc,简单高效且Drupal 社区有APC 模块可以实现更细的优化。( 一般国外买的共享空间都已经装有相应的php 缓存插件了的)。

在线测量网站执行速度的工具:http://www.iwebtool.com/speed_test

转自:http://drupalchina.cn/node/1860

form表单元素过多导致的故障

最近一个drupal 6搭建的站点后台菜单列表页面出现问题,编辑完毕点击”Save configuration”后页面刷新重载,设置信息却没有保存,单个菜单的修改没有问题。
首先看watchdog,没有任何相关的错误信息。
装上devel模块,dpm出form结构,没有validate,submit也没有被修改和覆盖,正常指向核心menu模块。
在核心menu模块menu_overview_form_submit内加入调试信息,发现”Save configuration”时根本没有进入到这里。
此时又发现这个故障只存在于Primary links中,Footer Menu和其他菜单可以正常编辑,而Primary links里面大概包含了600+的菜单项。
尝试在hook_form_alter里面unset掉大部分的菜单项之后,submit就可以正常工作了。
看来绕了一个大圈,原来跟表单元素过多有关系。查资料发现官方说明:
http://www.php.net/manual/en/info.configuration.php#ini.max-input-vars
PHP默认是1000,即默认允许提交的表单数据不超过1000个元素,包含hidden的元素,自PHP 5.3.9起有效。
修改php.ini或者在.htaccess中加入

max_input_vars = 3000

即可,之后submit就可以正常保存数据了。

Drupal Registry Rebuild

最近开发一个项目,在移动过一些模块的路径之后,出现了类似于这样的错误:

PHP Fatal error:  Class 'EntityAPIControllerExportable' not found in ...sites/all/modules/rules/includes/rules.core.inc on line 11

查过资料之后知道,一些比较核心的模块会到registry表内注册自己一些核心的class/function,此时需要重建它,才能让系统找到迁移之后的模块。
重建registry表,我们得使用Registry Rebuild模块。根据官网的介绍:”THIS IS NOT A MODULE. YOU CAN’T ENABLE IT.” 这不是一个真正的模块,不能启用它。说明这个”模块”的使用方式会跟普通的模块不一样,下面开始操作。重建数据之前务必备份数据库!!
Continue reading

Drupal笔记

Hooks group: http://api.drupal.org/api/drupal/includes!module.inc/group/hooks
Default theme implementations: http://api.drupal.org/api/drupal/modules%21system%21theme.api.php/group/themeable

drupal_get_title()  //获取当前页面的title内容
drupal_get_path($type, $name)  //获取模块、主题.. 的路径
path_is_admin($path)  //判断当前路径是否为后台路径
user_is_anonymous()  //判断当前用户是否为匿名用户
drupal_get_destination()  //获取目的地页面地址,用于完成表单之后的跳转,默认返回当前地址
drupal_attributes(array $attributes = array())  //将传入的数组转换为HTML元素的属性,如:array('class' => array('selected', 'first')) 转换为 <xx class="selected first" ..
DRUPAL_ROOT  //常量,drupal安装的根目录

Development tools: http://drupal.org/node/147789
审查Drupal模块,提出修改建议:
http://ventral.org/