Как добавить вкладку локальной задачи в представление узла? [закрыто]


8

Я пытаюсь добавить дополнительную вкладку к узлу «Просмотр» и «Редактирование».

Мой модуль включен нормально, и я очистил кеш, но моя новая вкладка не появляется. Что мне не хватает?

/**
* Implements hook_menu().
*/
function add_performance_menu() {
  $items = array();

  $items['node/%node/performance'] = array(
    'title' => 'Add a performance',
    'page callback' => 'add_performance_action',
    'access callback' => TRUE,
    'type' => MENU_LOCAL_TASK,
  );

  return $items;
}

/**
* Page callback.
*/
function add_performance_action() {
  return t('Hello');
}

Маршрут работает? Если вы перейдете в «/ node / 1 / performance», вы получите «Hello» обратно?
Les Lim

Хорошая точка зрения. Нет, он просто отображает узел как обычно.
пушка

4
В написанном вами коде нет ничего плохого, поэтому пройдите обычные проверки: посмотрите на имя файла вашего модуля на предмет опечаток, посмотрите на таблицы кеша, чтобы убедиться, что они очищаются и т. Д.
Les Lim

1
Эй, спасибо - обнадеживаю, зная, что это не код. В конце концов, я заработал, отключив и снова включив модуль. Может потому что таблица роутеров обновляется при включении? Во всяком случае ... это работает сейчас.
Пушка

Ответы:



0

Ваш код выглядит хорошо, но не забывайте очищать кеши Drupal в admin / config / development / performance после каждого изменения в вашем hook_menu выше.

Альтернатива, которая приходит на ум, будет использовать hook_menu_local_tasks_alter, потому что пункт меню, который мы хотим использовать, может уже существовать.

Вы также можете попробовать это, я надеюсь, что это поможет вам:

/**
* Implements hook_menu().
*/
function add_performance_menu() {
  $items = array();
  $items['node/%node/performance'] = array(
    'title' => 'Add a performance',
    'access callback' => 'your_module_access_check',
    'access arguments' => array(1),
    'type' => MENU_LOCAL_TASK,
  );
  return $items;
}
function your_module_access_check($node) {
  if ($node->type == 'page') {
    return TRUE;
  }
  return FALSE;
}

Спасибо

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.