Como alterar um menu Menu_Local_Task no Drupal
Pergunta
Eu criei um menu com guias no meu módulo Drupal 6 personalizado. Quero posicionar uma lista suspensa HTML à direita do menu com guias na parte superior da página do meu módulo. A lista demitirá alguns eventos do AJAX na mudança, por exemplo, alterando a cláusula de limite na consulta SQL, especificando 10,20,50.100 resultados. Como posso conseguir isso no Drupal sem modelos de hackers?
Obrigado,
Solução
Você poderia fazer isso substituindo theme_menu_local_tasks()
dentro do seu tema:
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;
}
(Nota: código não testado - digitação em potencial)
Outras dicas
Como você está se referindo ao código para colocar em um módulo, o módulo deve implementar hook_theme_registry_alter()
, o que permitiria ao módulo substituir a função theme_menu_local_tasks()
. O módulo deve armazenar o valor do retorno de chamada anterior, para que ainda possa chamá -lo no caso da página que não deve mudar.
A implementação de um gancho no módulo permite que você tenha as guias de menu normal, uma vez que o módulo fosse desativado; Alterar o tema atual exigiria que você o alterasse mais quando quiser a funcionalidade e, se estiver usando um tema feito de outra pessoa, deve alterar o tema o tempo todo para baixar uma nova versão. Se você estiver usando mais de um tema, faça a alteração em cada tema usado.
Em geral, uma modificação para um tema exigido de um módulo deve ser feito dentro de um módulo.