Однажды я столкнулся с необходимостью вытащить все action ссылки и табы из нод и сделать из них контекстные ссылки, примерно так, как это делает модуль Contextual links. Этот модуль мне не нравится потому, что он не позволяет настроить отображение контекстных ссылок только в нодах.
Итак, у нас есть какая-то своя тема или модуль и этого достаточно, чтобы вывести красивое контекстное меню для нод.
Для тизеров
<?php
/**
* Implements hook_process_node().
*/
function mytheme_process_node(&$vars) {
// If display is page then menu will create in hook_process_page.
if ($vars['view_mode'] != 'full') {
$node = isset($vars['node']) ? $vars['node'] : NULL;
if (!empty($node->nid)) {
$links = menu_contextual_links('node', 'node', array($node->nid));
$menu = array();
if (!empty($links) && is_array($links)) {
foreach ($links as $key => &$link) {
if (isset($link['#link'])) {
$link = $link['#link'];
}
$class = drupal_html_class($link['path']);
$menu[$class] = $link;
$menu[$class] += $link['localized_options'];
unset($links[$key]);
}
}
if ($menu) {
$vars['title_prefix'][] = array(
'#theme' => module_exists('ctools') ? 'ctools_dropdown' : 'links',
'#links' => $menu,
'#title' => 'Menu',
'#heading' => array(
'text' => t('Menu'),
'level' => 'div',
'class' => 'menu-icon',
),
);
}
}
}
}
Для страницы
<?php
/**
* Implements hook_preprocess_page().
*/
function mytheme_preprocess_page(&$variables) {
$links = array();
$menu = array();
$links[] = &$variables['tabs']['#primary'];
$links[] = &$variables['tabs']['#secondary'];
$links[] = &$variables['action_links'];
foreach ($links as &$group) {
if (!empty($group) && is_array($group)) {
foreach ($group as $key => &$link) {
if (isset($link['#link'])) {
$link = $link['#link'];
}
$class = drupal_html_class($link['path']);
$menu[$class] = $link;
$menu[$class] += $link['localized_options'];
unset($group[$key]);
}
}
}
if (!isset($variables['page_dropdown_menu'])) {
$variables['page_dropdown_menu'] = array();
}
$variables['page_dropdown_menu'] += $menu;
}
<?php
/**
* Implements hook_process_page().
*/
function mytheme_process_page(&$variables) {
if (!empty($variables['page_dropdown_menu'])) {
$variables['title_prefix'] = array(
'#theme' => module_exists('ctools') ? 'ctools_dropdown' : 'links',
'#links' => $variables['page_dropdown_menu'],
'#title' => 'Menu',
'#heading' => array(
'text' => t('Menu'),
'level' => 'div',
'class' => 'menu-icon',
),
);
}
}