Как изменить меню вкладки MENU_LOCAL_TASK в Drupal - PullRequest
4 голосов
/ 01 декабря 2009

Я создал меню с вкладками в своем пользовательском модуле Drupal 6. Я хочу расположить раскрывающийся список HTML справа от меню с вкладками в верхней части страницы моего модуля. Список будет запускать некоторые события ajax при изменении, например, изменив предложение LIMIT для SQL-запроса, указав 10,20,50,100 результатов. Как мне добиться этого в Drupal без взлома шаблонов?

Спасибо

Ответы [ 2 ]

6 голосов
/ 02 декабря 2009

Вы можете сделать это, переопределив theme_menu_local_tasks() в вашей теме:

function yourTheme_menu_local_tasks() {
  // Prepare empty dropdown to allow for unconditional addition to output below
  $dropdown = '';
  // Check if the dropdown should be added to this menu
  $inject_dropdown = TRUE; // TODO: Add checking logic according to your needs, e.g. by inspecting the path via arg()
  // Injection wanted?
  if ($inject_dropdown) {
    // Yes, build the dropdown using Forms API
    $select = array(
      '#type' => 'select',
      '#title' => t('Number of results:'),
      '#options' => array('10', '20', '50', '100'),
    );
    // Wrap rendered select in <li> tag to fit within the rest of the tabs list
    $dropdown = '<li>' . drupal_render($select) . '</li>';
  }

  // NOTE: The following is just a copy of the default theme_menu_local_tasks(),
  // with the addition of the (possibly empty) $dropdown variable output
  $output = '';
  if ($primary = menu_primary_local_tasks()) {
    $output .= "<ul class=\"tabs primary\">\n". $primary . $dropdown . "</ul>\n";
  }
  if ($secondary = menu_secondary_local_tasks()) {
    $output .= "<ul class=\"tabs secondary\">\n". $secondary ."</ul>\n";
  }

  return $output;
}

(ПРИМЕЧАНИЕ: непроверенный код - возможные опечатки)

0 голосов
/ 16 декабря 2009

Поскольку вы ссылаетесь на код для вставки модуля, модуль должен реализовать hook_theme_registry_alter(), что позволило бы модулю переопределить функцию theme_menu_local_tasks(). Модуль должен хранить значение предыдущего обратного вызова, чтобы он все еще мог вызывать его в случае, если страница не является той, которую он должен изменить.
Реализация ловушки в модуле позволяет вам иметь обычные вкладки меню, как только модуль был отключен; изменение текущей темы потребует, чтобы вы вернули ее обратно, когда вам больше потребуется функциональность, и если вы используете тему, созданную другим человеком, вы должны менять тему каждый раз, когда загружаете новую версию. Если вы используете более одной темы, вы должны внести изменения в каждую использованную тему.
В общем, модификация темы, которая требуется от модуля, должна выполняться внутри модуля.

...