问题 针对特定内容类型的Drupal 7 hook_menu


我尝试将新选项卡添加到特定内容类型'abc',这是代码,但它不起作用,选项卡显示在所有节点上。任何人都可以帮忙吗?谢谢!

function addtabexample_menu() {
  $items=array();

  $items['node/%node/test'] = array(
  'title' => 'Test',
  'page callback' => 'handle_test',
  'page arguments' => array('node', 1),
  'access arguments' => array('access content'), 
  'type' => MENU_LOCAL_TASK,
  'weight' => 100,
  );
return $items;
}

function handle_test($node){

  $result='hi';
  if ($node->type == 'abc') {
    $result='I am working';
}

6045
2017-07-15 13:14


起源



答案:


access callback 是决定是否显示选项卡的正确位置,但代码只是一个单行:

function addtabexample_menu() {
  $items = array();

  $items['node/%node/test'] = array(
    'title' => 'Test',
    'page callback' => 'handle_test',
    'page arguments' => array('node', 1),
    'access callback' => 'addtabexample_access_callback',
    'access arguments' => array(1), 
    'type' => MENU_LOCAL_TASK,
    'weight' => 100,
  );

  return $items;
}

function addtabexample_access_callback($node) {
  return $node->type == 'abc' && user_access('access content');
}

一旦更改了代码,请记得清除缓存 hook_menu() 使更改生效。


12
2017-07-15 15:21



有用!测试页如何保留在叠加层上? - user1480765
看一下 hook_admin_paths() - Clive
另外,也可以使用变体 node_access('view', $node) 在回调中,它确定当前登录用户对当前节点的访问权限。 - Parag Magunia


答案:


access callback 是决定是否显示选项卡的正确位置,但代码只是一个单行:

function addtabexample_menu() {
  $items = array();

  $items['node/%node/test'] = array(
    'title' => 'Test',
    'page callback' => 'handle_test',
    'page arguments' => array('node', 1),
    'access callback' => 'addtabexample_access_callback',
    'access arguments' => array(1), 
    'type' => MENU_LOCAL_TASK,
    'weight' => 100,
  );

  return $items;
}

function addtabexample_access_callback($node) {
  return $node->type == 'abc' && user_access('access content');
}

一旦更改了代码,请记得清除缓存 hook_menu() 使更改生效。


12
2017-07-15 15:21



有用!测试页如何保留在叠加层上? - user1480765
看一下 hook_admin_paths() - Clive
另外,也可以使用变体 node_access('view', $node) 在回调中,它确定当前登录用户对当前节点的访问权限。 - Parag Magunia