Existe uma maneira de adicionar um link com hash no menu no menu drupal para criar apenas um item de menu que salte para uma âncora ou ID na página?
Existe uma maneira de adicionar um link com hash no menu no menu drupal para criar apenas um item de menu que salte para uma âncora ou ID na página?
Respostas:
Infelizmente, até onde sei, o Drupal não pode fazer isso imediatamente. No entanto, você pode usar o módulo de itens de menu especiais para criar um novo item de menu e colocar "nolink" nas configurações do caminho.
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
acordo com a resposta de @ Sebastian.
<span title="" class="nolink">...</span>
. O problema não passa de falta de CSS. Basta copiar o ul.menu a{}
CSS e colá-lo para ul.menu li span.nolink{}
. Está funcionando bem para mim. Mas desativou a seta suspensa ativada por li.expanded
. :(
jQuery("span.nolink").wrap("<a href='#'></a>");
Siga o relatado em um comentário para a l()
documentação .
Para criar um link para uma âncora nomeada (por exemplo, "#namedanchor"), você precisará usar uma pequena solução alternativa.
l('linktext', '', array('fragment' => 'namedanchor', 'external' => TRUE));
Para criar um link somente de hash (para "#"), você precisará adaptá-lo para:
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
(Observe que o fragmento contém um espaço.)
No Drupal 7, defina "HTML" como e TRUE
, em seguida, acrescente o caractere de hash.
http://drupal.org/node/123103#comment-4955236
nó / 16 # gohere
o URL automático mudará para ser como
sobre-nós
<front>#gohere
. Agradável! :)
Tente usar o módulo Void Menu :
O menu Cancelar permite configurar valores especiais para tags para uso no sistema de menus do Drupal 7. Você pode personalizar até 10 tags de nulo diferentes com qualquer valor que desejar e usá-los livremente no sistema de menus do Drupal.
...
Como um bônus adicional, e devido à funcionalidade deste módulo, você também pode usar âncoras reais como itens de menu que não servem a nenhum outro propósito que não os espaços reservados. Isso é realizado com uma tag void definida como javascript: void (0); ou até uma simples hash tag #. O benefício de usar este módulo em vez de special_menu_items para isso é que seus menus não exigirão nenhum estilo adicional para explicar as tags de extensão adicionadas usadas por special_menu_items e serão válidas para o W3C porque cada âncora deve ter um atributo href.
É uma solução muito boa!
Acabei de encontrar o mesmo problema. Eu precisava adicionar programaticamente itens de menu com links de hash. Meu código:
// the URL with hash in it is in the form 'normal_part_of_url'#'hash_part_of_url'
$item = array(
'link_path' => %normal_part_of_url%,
'link_title' => %your_link_title%,
'menu_name' => %menu_where_to_add_links%,
'options' => array('fragment'=>%hash_part_of_url%)
);
menu_link_save($item);
Apenas definindo external
para TRUE
fazer isso por mim. Testado no Druapl 7.32.
l('Some Name', '#', array('external' => TRUE));
O uso das funções de tradução do Drupals também funciona.
/**
* Implements hook_menu().
*
* Defines a valid link to use when creating menu items.
*/
function greenacorn_menu() {
$items['<main-content>'] = array(
'page callback' => 'drupal_not_found',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_menu_link_alter().
*
* Flags the link to be altered at runtime.
*
* Note: Changes here would be saved back to the database.
*/
function greenacorn_menu_link_alter(&$item, $menu) {
if ($item['link_path'] == '<main-content>') {
$item['options']['alter'] = TRUE;
}
}
/**
* Implements hook_translated_menu_link_alter().
*
* Refactors the link to go to the fragment #main-content.
*/
function greenacorn_translated_menu_link_alter(&$item, $map) {
if ($item['link_path'] == '<main-content>') {
$item['href'] = '';
$item['localized_options']['fragment'] = 'main-content';
}
}
function test_menu() {
$items = array();
$items['sample'] = array(
'title' => t('Sample page'),
'type' => MENU_NORMAL_ITEM,
'menu_name' => 'main-menu',
'page callback' => 'samplepage',
'access callback' => TRUE,
'options' => array('fragment' => 'sampleHash'),
);
return $items;
}
Você pode adicionar um link de hash ao menu usando o código acima.
/**
* Implements hook_module_implements_alter().
*/
function MODULE_module_implements_alter(&$implementations, $hook) {
if ($hook == 'url_outbound_alter') {
$stored = $implementations['MODULE'];
unset($implementations['MODULE']);
$implementations['MODULE'] = $stored;
}
}
/**
* Implements hook_url_outbound_alter().
*/
function MODULE_url_outbound_alter(&$path, &$options, $original_path) {
if (strpos($path, '#') !== FALSE) {
$fragment = substr($path, strpos($path, "#") + 1);
$path = str_replace('#' . $fragment, '', $path);
$options['fragment'] = $fragment;
}
}
instale itens de menu especiais e menu DHTML para menus hierárquicos:
<void>
no destinoagora volte para sua página inicial e você verá que o item de menu que modificamos no clique não está em lugar nenhum