¿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?
¿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?
Respuestas:
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.
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
la respuesta de @ Sebastian.
<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
. :(
jQuery("span.nolink").wrap("<a href='#'></a>");
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.
http://drupal.org/node/123103#comment-4955236
nodo / 16 # gohere
la url automática lo cambiará para que sea
acerca de nosotros # gohere
<front>#gohere
. ¡Agradable! :)
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!
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);
Sólo la creación external
a TRUE
lo hace por mí. Probado en Druapl 7.32.
l('Some Name', '#', array('external' => TRUE));
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';
}
}
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.
/**
* 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 elementos de menú especiales y menú DHTML para menús jerárquicos y luego:
<void>
en el objetivoAhora 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