最近在使用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);
}
?>
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);
}
?>