¿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?

mohamad salama
fuente
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.

kiamlaluno
fuente
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.

Sebastian
fuente
13

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

nodo / 16 # gohere

la url automática lo cambiará para que sea

acerca de nosotros # gohere

Squarecandy
fuente
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!

Andriyun
fuente
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);
EDWH
fuente
1

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

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

timofey.com
fuente
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';
  }
}
Una tierra.
fuente
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.

Gurú
fuente
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;
  }
}
ccx105
fuente
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

elaz
fuente
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