2010-08-11 55 views
0

我正在Drupal 6工作。确定页面内容的类型

我有要求在用户在博客页面上时添加特定块。听起来很简单,但它让我发疯。

当用户查看博客概述或单个博客条目时,需要显示该块。

我最初认为我可以通过页面名称来过滤它,所以它只会出现在page =/blog/。不幸的是,这只适用于博客概述页面;各个博客条目页面都有自己的URL(默认为/ node/,但会更改为所有者想要的内容)。

更多一点Google搜索,我发现了$ node-> type =='blog'这应该是我在博客入口页面上的事实,但似乎并不奏效。

在管理/建设/块/配置页面我已经页面可见性设置为PHP模式,PHP代码如下:

<?php 
return ($node->type == 'blog'); 
?> 

,但似乎并没有工作,即使如果我的print_r ($节点),它确实显示类型==博客。

我还在上面添加了strpos($ _ SERVER ['REQUEST_URI','blog'),但是当然由于第一个条件不起作用,添加第二个条件不会起作用。

感觉应该有一个明显的答案,但我无法找到它。谁能帮我吗。谢谢。

+0

你看起来没问题的代码。您也可以使用上下文模块在特定上下文中启用块。发展种子有一个很好的视频。 – Keyo 2010-08-11 10:38:20

+0

对于一个节点视图很简单,只需使用$ node = node_load(arg(1));返回($ node-> type =='blog');博客上市使用博客或博客/ – Nikit 2010-08-11 10:41:37

回答

1

与上面的代码的问题是,当您运行代码的块,它不会有$节点变量可用。你需要做这样的事情来将它添加到博客节点。

<?php 
    // This code checks the internal url, which for nodes always will be node/[nid]. 
    // Last condition: don't display the block on node edit forms etc. 
    if (arg(0) == 'node' && is_numeric(arg(1)) && empty(arg(2))) { 
     $node = node_load(arg(1)); 
     return $node->type == 'blog'; 
    } 
?> 
+0

代码是丑陋的,并不明显,但确实似乎工作(语法更正后!)),所以非常感谢。 同样感谢Nikit提出了很多相同的事情。鉴于两个评论的相似性,我认为它记录在drupal站点的某处?我想我的google-fu没有我想象的那么强大。 是否有任何主要的开销总是像这样调用node_load()? – Spudley 2010-08-11 11:29:20

+0

node_load调用被缓存(静态),所以没有开销,因为您正在查看的节点将被加载。 – Tom 2010-08-11 14:19:31

相关问题