您在這裡

增加某個頁面的Tab(Local menu task)

hanamizuki's 的頭像
hanamizuki 在 2010-07-30 (週五) 18:48 發表

最近在使用Ubercart製作網站,
但一直無法參透關於 Local Menu Task 的奧秘。

目標:在某頁面增加Tab

之前在獎金獵人的比賽node裡面增加「得獎名單」、「相關作品」等等有成功過,如下圖。但今天想在購物車頁面加入「最愛清單」的Tab卻怎樣都顯示不出來。
第一屆台灣權王大賽

以下是code內容,請求大家協助。

成功案例:在獎金獵人比賽頁面加入「得獎名單」Tab

建立bhuntr_match.module
<?php
function bhuntr_match_menu() {

$myurl = '?m=';

$items['node/%node/win'] = array(
'title' => t("得獎名單"),
'description' => t("這個比賽的得獎名單、頒獎資訊等官方訊息"),
'access callback' => "bhuntr_match_check_local_tasks",
'access arguments' => array(1),
'page callback' => "bhuntr_match_winner",
'page arguments' => array(1),
'type' => MENU_LOCAL_TASK
);
return $items;
}

function bhuntr_match_winner($node) {

$title = $node->title . '得獎名單';
drupal_set_title($title);
if($node->field_match_winner['0']['nid']){
$output = '

';
foreach ($node->field_match_winner as $key => $win) {
//$output .= $win['nid'];
$output .= views_embed_view('win');
}
return $output;
}
if(!$node->field_match_winner['0']['nid']){
return '

';
}
}

function bhuntr_match_check_local_tasks($node) {
return ($node->type == 'match');
}

?>

失敗案例:在購物車(/cart)加入「我的最愛清單」Tab

<?php
function pb_cart_menu() {

global $user;
$items = array();

$items['cart/fav'] = array(
'title' => t("我的最愛清單"),
'access callback' => "pb_cart_favorite_access",
'page callback' => "pb_cart_favorite",
'type' => MENU_LOCAL_TASK
);

return $items;
}

function pb_cart_favorite() {

global $user;
$output = '123';
return $output;

}

function pb_cart_favorite_access() {
global $user;
return ($user->uid);
}
?>

找到方式了!
翻了書之後發現 MENU_LOCAL_TASK 要在母選單是 MENU_NORMAL_ITEM 的狀況下才行。
原本 cart 頁面是 MENU_CALLBACK 所以不行。

如果不是這原因的話,請指教。

改過的code如下:
作用:在購物車頁面加上「我的最愛清單」Tab
<?php
function pb_cart_menu() {

$items = array();

$items['cart/list'] = array(
'title' => t("購物清單"),
'type' => MENU_DEFAULT_LOCAL_TASK
);
$items['cart/fav'] = array(
'title' => t("我的最愛清單"),
'access callback' => "pb_cart_favorite_access",
'page callback' => "pb_cart_favorite",
'type' => MENU_LOCAL_TASK
);

return $items;
}

function pb_cart_menu_alter() {
$items['cart'] = array(
'type' => MENU_NORMAL_ITEM,
);
}

function pb_cart_favorite() {
$view = views_get_view('my_favorite');
$output .= $view->execute_display('Default');
return $output;

}

function pb_cart_favorite_access() {
global $user;
return ($user->uid);
}
?>