因為版型設計的關係,常常會需要「A區塊顯示在A內容類型」、「B區塊顯示在B內容類型」, 之前我會用pathauto,把A內容類型的路徑統一, 但現在有點想直接用php控制,但一直弄不好,以下是我的寫法: 在區塊->特定頁面的顯示設定->選「如果以下的PHP程式碼傳回TRUE則顯示」 <?php global $node; if($node->type==journey){return TRUE;} ?> 系統安裝、設定、調整區塊6.x 發表回應前,請先登入或註冊 Re: 用php控制區塊的顯示? 這邊有解:http://drupal1.kiev1.org/Drupal_Controlling_block_visibility_with_PHP.html 應該是這樣 <?php $match = FALSE; $types = array('story' => 1, 'page' => 1); if (arg(0) == 'node' && is_numeric(arg(1))) { $nid = arg(1); $node = node_load(array('nid' => $nid)); $type = $node->type; if (isset($types[$type])) { $match = TRUE; } } return $match; ?> 一定要這樣複雜嗎?(我不太會PHP) 發表回應前,請先登入或註冊 Re: 用php控制區塊的顯示? <?php global $node; if($node->type==journey){return TRUE;} ?> 這個寫法是有問題的 第一是在 block 的樣板裡沒有 $node 的資料可以用 第二是頁面裡面可能不只讀取一篇 node,所以不可能用 global $node ,而且也沒有判斷是不是在單一 node 的頁面 第三是journey這個字串沒有用引號包起來 <?php $match = FALSE; $types = array('story' => 1, 'page' => 1); if (arg(0) == 'node' && is_numeric(arg(1))) { $nid = arg(1); $node = node_load(array('nid' => $nid)); $type = $node->type; if (isset($types[$type])) { $match = TRUE; } } return $match; ?> 這一段主要是讓區塊在 node/[nid] 路徑底下 凡是遇到 nodetype 屬於 story 或 page 的時候都顯示區塊 如果只需要單一某種 nodetype 才顯示 <?php if (arg(0) == 'node' && is_numeric(arg(1))) { $node = node_load(array('nid' => arg(1))); if($node->type == '[node_type_A]') return TRUE; //} } return FALSE; ?> 這樣子就可以了 B區塊 就把 [node_type_A] 改成 [node_type_B] 發表回應前,請先登入或註冊 Re: 用php控制區塊的顯示? 上面最後一段多了一個"{" 純簡化 .. <?php if (arg(0) == 'node' && is_numeric(arg(1))) { $node = node_load(array('nid' => arg(1))); return $node->type == '[node_type_A]'; } ?> 發表回應前,請先登入或註冊
Re: 用php控制區塊的顯示? 這邊有解:http://drupal1.kiev1.org/Drupal_Controlling_block_visibility_with_PHP.html 應該是這樣 <?php $match = FALSE; $types = array('story' => 1, 'page' => 1); if (arg(0) == 'node' && is_numeric(arg(1))) { $nid = arg(1); $node = node_load(array('nid' => $nid)); $type = $node->type; if (isset($types[$type])) { $match = TRUE; } } return $match; ?> 一定要這樣複雜嗎?(我不太會PHP) 發表回應前,請先登入或註冊
Re: 用php控制區塊的顯示? <?php global $node; if($node->type==journey){return TRUE;} ?> 這個寫法是有問題的 第一是在 block 的樣板裡沒有 $node 的資料可以用 第二是頁面裡面可能不只讀取一篇 node,所以不可能用 global $node ,而且也沒有判斷是不是在單一 node 的頁面 第三是journey這個字串沒有用引號包起來 <?php $match = FALSE; $types = array('story' => 1, 'page' => 1); if (arg(0) == 'node' && is_numeric(arg(1))) { $nid = arg(1); $node = node_load(array('nid' => $nid)); $type = $node->type; if (isset($types[$type])) { $match = TRUE; } } return $match; ?> 這一段主要是讓區塊在 node/[nid] 路徑底下 凡是遇到 nodetype 屬於 story 或 page 的時候都顯示區塊 如果只需要單一某種 nodetype 才顯示 <?php if (arg(0) == 'node' && is_numeric(arg(1))) { $node = node_load(array('nid' => arg(1))); if($node->type == '[node_type_A]') return TRUE; //} } return FALSE; ?> 這樣子就可以了 B區塊 就把 [node_type_A] 改成 [node_type_B] 發表回應前,請先登入或註冊
Re: 用php控制區塊的顯示? 上面最後一段多了一個"{" 純簡化 .. <?php if (arg(0) == 'node' && is_numeric(arg(1))) { $node = node_load(array('nid' => arg(1))); return $node->type == '[node_type_A]'; } ?> 發表回應前,請先登入或註冊
Re: 用php控制區塊的顯示?
這邊有解:
http://drupal1.kiev1.org/Drupal_Controlling_block_visibility_with_PHP.html
應該是這樣
<?php
$match = FALSE;
$types = array('story' => 1, 'page' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = TRUE;
}
}
return $match;
?>
一定要這樣複雜嗎?(我不太會PHP)
Re: 用php控制區塊的顯示?
<?php
global $node;
if($node->type==journey){return TRUE;}
?>
這個寫法是有問題的
第一是在 block 的樣板裡沒有 $node 的資料可以用
第二是頁面裡面可能不只讀取一篇 node,所以不可能用 global $node ,而且也沒有判斷是不是在單一 node 的頁面
第三是journey這個字串沒有用引號包起來
<?php
$match = FALSE;
$types = array('story' => 1, 'page' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = TRUE;
}
}
return $match;
?>
這一段主要是讓區塊在 node/[nid] 路徑底下
凡是遇到 nodetype 屬於 story 或 page 的時候都顯示區塊
如果只需要單一某種 nodetype 才顯示
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(array('nid' => arg(1)));
if($node->type == '[node_type_A]') return TRUE;
//}
}
return FALSE;
?>
這樣子就可以了
B區塊 就把 [node_type_A] 改成 [node_type_B]
Re: 用php控制區塊的顯示?
上面最後一段多了一個"{"
純簡化 ..
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(array('nid' => arg(1)));
return $node->type == '[node_type_A]';
}
?>