Como adiciono um link de hash nos menus?


21

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?


Se você usar o URL absoluto no começo, ele funcionará. Como yourdomain.com/somepath#someother
hzak

Respostas:


15

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.


infelizmente este módulo para a versão 6 e ninguém para 7, mas pode ser modificado. obrigado de qualquer maneira.
mohamad Salama

11
Em vez disso, faça uso de l('linktext', '', array('fragment' => ' ', 'external' => TRUE));acordo com a resposta de @ Sebastian.
Duncanmoo

"Itens especiais do menu" adiciona a <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. :(
Mayeenul Islam

Desculpe postar tão tarde, mas acabei de passar por esse tópico. Em vez de alterar o css, você pode usar um pouco de js para envolver o nolink em uma tag de âncora com um hash. Com jQuery, seriajQuery("span.nolink").wrap("<a href='#'></a>");
Goldentoa11

15

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.


13

http://drupal.org/node/123103#comment-4955236

nó / 16 # gohere

o URL automático mudará para ser como

sobre-nós


11
Que tal permanecer na página em que você está? Por exemplo, tentando obter o link Pular para navegação para levá-lo à divisão de navegação, independentemente da página em que está? @shanabus
kine456 Apr

2
A melhor maneira de fazer isso, nenhum módulo ou plugin necessário!
Andreas Daoutis 28/03

Até trabalha com <front>#gohere. Agradável! :)
Huelfe 14/03

6

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!


2

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);

1

Apenas definindo externalpara TRUEfazer isso por mim. Testado no Druapl 7.32.

l('Some Name', '#', array('external' => TRUE));


0

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';
  }
}

0
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.


0
/**
 * 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;
  }
}

Por favor, não poste respostas "somente código". Embora isso possa resolver o problema, ele não explica ao leitor por que ele resolve o problema ou o que ele fornece em comparação com as alternativas aqui .
Shawn Conn

0

instale itens de menu especiais e menu DHTML para menus hierárquicos:

  • adicione seu vocabulário x-example e adicione seus termos
  • clique em modificar exemplo x do que na seção do menu de taxonomia definir local do menu
  • vá para os blocos defina o menu para um bloco
  • no menu modificação administrativa, você vê os termos adicionados automaticamente
  • clique em modificar um item de menu e depois <void>no destino

agora volte para sua página inicial e você verá que o item de menu que modificamos no clique não está em lugar nenhum


Bem-vindo às perguntas e respostas do Drupal. Seria mais útil explicar como usar itens de menu especiais em vez de apenas colar uma imagem. Você pode considerar melhorar sua resposta. Obrigado.
Kojo

11
eu acho que agora é ok
elaz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.