2010-08-11 85 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

相關問題