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

最近在使用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 = '<br /><br /><div class="bh-tip">以下是目前收集的得獎、入圍名單,若沒有你要的資訊,請<a href="' . $node->field_website[0]['url'] . '">點這邊前往他們官網看看</a>。<br /><a class="bh-feedback" href="http://bhuntr.com/node/add/winner?&m[]=' . $node->nid . '&destination=match/detail/' . $node->nid . '/win">張貼得獎名單</a>。</div>';
    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
'<br /><br /><div class="bh-tip">噢喔!目前沒有得獎名單情報,你可以<a href="' . $node->field_website[0]['url'] . '">點這邊前往他們官網看看</a>。<br /><a class="bh-feedback" href="http://bhuntr.com/node/add/winner?&m[]=' . $node->nid . '&destination=match/detail/' . $node->nid . '/win">張貼得獎名單</a>。</div><br /><br /><br /><br />';
  }
}

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);
}
?>

hanamizuki 的照片

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

找到方式了!
翻了書之後發現 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);
}
?>

RSS feed