¿Cómo agrego un enlace hash en los menús?


21

¿Hay alguna manera de agregar un enlace hash en el menú debajo del menú drupal para crear un elemento de menú que salte a un ancla o id en la página?


Si usa la URL absoluta al principio, funcionará. Al igual que yourdomain.com/somepath#someother
hzak

Respuestas:


15

Desafortunadamente, hasta donde yo sé, Drupal no puede hacer esto fuera de la caja. Sin embargo, puede usar el módulo Elementos de menú especiales para crear un nuevo elemento de menú y colocar "nolink" en la configuración de ruta.


lamentablemente este módulo para la versión 6 y nadie para la 7 pero puede modificarse. gracias de cualquier manera .
mohamad salama

1
Más bien, haga uso de l('linktext', '', array('fragment' => ' ', 'external' => TRUE));la respuesta de @ Sebastian.
Duncanmoo

"Elementos especiales del menú" agrega a <span title="" class="nolink">...</span>. El problema no es más que la falta de CSS. Simplemente copie el ul.menu a{}CSS y péguelo para ul.menu li span.nolink{}. Esta trabajando bien para mi. Pero deshabilitó la flecha desplegable habilitada por li.expanded. :(
Mayeenul Islam

Lamento publicar tan tarde, pero acabo de encontrar este hilo. En lugar de cambiar el CSS, puede usar un pequeño js para envolver el nolink en una etiqueta de anclaje con un hash. Con jQuery, seríajQuery("span.nolink").wrap("<a href='#'></a>");
Goldentoa11

15

Siga lo informado en un comentario para la l()documentación .

Para crear un enlace a un ancla con nombre (por ejemplo, "#namedanchor"), deberá usar una pequeña solución alternativa.

l('linktext', '', array('fragment' => 'namedanchor', 'external' => TRUE));

Para crear un enlace de solo hash (a "#"), deberá adaptarlo a:

l('linktext', '', array('fragment' => ' ', 'external' => TRUE));

(Tenga en cuenta que el fragmento contiene un espacio).

 

En Drupal 7, configure "HTML" en TRUE, luego agregue el carácter hash.


13

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

nodo / 16 # gohere

la url automática lo cambiará para que sea

acerca de nosotros # gohere


1
¿Qué hay de permanecer en la página en la que estás? Por ejemplo, ¿intenta obtener el enlace Saltar a navegación para ir al div de navegación independientemente de en qué página se encuentre? @shanabus
kine456

2
La mejor manera de hacerlo, ¡no se necesita ningún módulo o complemento!
Andreas Daoutis

Incluso trabaja con <front>#gohere. ¡Agradable! :)
Huelfe

6

Intente usar el módulo Menú vacío :

El menú vacío le permite configurar valores especiales para etiquetas para su uso en el sistema de menús Drupal 7. Puede personalizar hasta 10 etiquetas nulas diferentes con cualquier valor que desee y usarlas libremente dentro del sistema de menú de Drupal.
...
Como una ventaja adicional, y debido a la funcionalidad de este módulo, también puede usar los anclajes reales como elementos de menú que no tienen otro propósito que los marcadores de posición. Esto se logra con una etiqueta void que se establece en javascript: void (0); o incluso una simple etiqueta hash #. El beneficio de usar este módulo sobre special_menu_items para esto es que sus menús no requerirán ningún estilo adicional para dar cuenta de las etiquetas de extensión agregadas utilizadas por special_menu_items, y serán válidos W3C porque cada ancla debe tener un atributo href.

¡Es una muy buena solución!


2

Acabo de encontrar el mismo problema. Necesitaba agregar mediante programación elementos de menú con enlaces hash. Mi 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

Sólo la creación externala TRUElo hace por mí. Probado en Druapl 7.32.

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


0

Usar las funciones de traducción de Drupals también 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;
}

Puede agregar un enlace hash al menú utilizando el código anterior.


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

No publique respuestas de "solo código". Si bien esto podría resolver el problema, no explica al lector por qué resuelve el problema o qué proporciona en comparación con las alternativas aquí .
Shawn Conn

0

instale elementos de menú especiales y menú DHTML para menús jerárquicos y luego:

  • agregue su vocabulario de ejemplos x y agregue sus términos
  • haga clic en modificar x-example que en la sección del menú de taxonomía establecer la ubicación del menú
  • ir a los bloques establecer el menú en un bloque
  • en la modificación del administrador del menú, verá los términos agregados automáticamente
  • haga clic en modificar un elemento del menú y luego páselo <void>en el objetivo

Ahora regrese a su página de inicio y verá que el elemento de menú que hemos modificado en el clic no va a ninguna parte


Bienvenido a Drupal Q&A. Sería más útil explicar cómo usar los elementos del menú Especial en lugar de simplemente pegar una imagen. Puede considerar mejorar su respuesta. Gracias.
Kojo

1
Creo que ahora está bien
elaz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.