Drupal区块路径设置的BUG

Drupal区块路径设置,目的就要在不同的页面节点上显示不同的区块(block),在控制面板的区块设置里有一列名为PATH,就是它了。详见:Putting blocks with content in the sidebars

以前就研究过,未果,最近zephyr在drupal的官方论坛里问了这个问题,然后又去搜了一下,找到了这个:Block Paths and Path Aliases,证明了4.4.0版本在不使用clean url时,block path有BUG,killes@www.drop.org给出了这个patch:

Category: feature requests ? bug reports
Assigned to: Anonymous ? killes@www.drop.org
Status: active ? patch
Attachment: block.patch (922 bytes)

 

其实就是在block.module里找到并

 

删:      if ((($block[‘status’] && (!$user->uid || !$block[‘custom’])) || ($block[‘custom’] && $user->block[$block[‘module’]][$block[‘delta’]])) && (!$block[‘path’] || preg_match($block[‘path’], “/” . $_GET[“q”]))) {

 

添:      if ((($block[‘status’] && (!$user->uid || !$block[‘custom’])) || ($block[‘custom’] && $user->block[$block[‘module’]][$block[‘delta’]])) && (!$block[‘path’] || preg_match($block[‘path’], “/” . $_GET[“q”]) || preg_match($block[‘path’], str_replace(‘?q=’, ‘/’, request_uri())))) {

具体的表达式范例:

只在首页显示
<(/|index.php)$>

只在?q=blog下的节点显示
<^/blog>

只在首页和?q=blog节点显示
<^/blog|(/|index.php)$>

只在详细节点显示
<^/node/view>

其余同理,把节点名换下就可以了。

上面所述的表达式只针对drupal4.4版本,以前的版本略有不同,见Putting blocks with content in the sidebars ,have fun!