解决了Drupal的一个关于block的bug

据有关资料显示,本bug只存在于5.x版本中,本网站恰恰就在这个范围。

本网站上的菜单(menu)、系统自带的block、自己开发的block等在不同的页面上显示在不同的页面位置上,通过系统导航菜单Administer>>Site building>>Blocks进入到设置页面,给每个block指定不同的显示位置,在每个block的配置页面上,有个Page specific visibility settings配置项,可以设定该block在哪些页面上显示或者不显示,我最常使用的是:

  • Show on every page except the listed pages.
  • Show on only the listed pages.

然而过了一段时间,发现这个设置项中的设置内容丢失了,但是,Drupal系统在显示各页面时,还是能够正确使用原来的设置,查看数据库中的blocks表,发现原来的设置都在,说明是PHP代码在生成配置管理页面时出现了错误,后来通过搜索网络发现这确实一个bug,而且以前发生过某个block的title不能显示了可能也跟这个bug有关。我回忆了一下,在此之前,通过导航菜单Administer>>Site building>>Themes切换过几个theme,这是问题引发原因,详细参见[1]

修改方法是将block.module代码中的bug去除,参见[2]。经测试,系统恢复正常。


参考资料:

  1. Block title and visibility php gets blanked out in block->configure
  2. block.module修改方法
  3. Block visibility settings bug