it-swarm-es.com

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

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

21
mohamad salama

Desafortunadamente, que yo sepa, 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 coloque "nolink" en la configuración de ruta.

15
user842

Siga lo que se informa en n 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, establezca "HTML" en TRUE, luego agregue el carácter hash.

15
Sebastian

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

nodo/16 # gohere

la url automática lo cambiará para que sea

acerca de nosotros # gohere

13
squarecandy

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

El menú vacío le permite configurar valores especiales a las etiquetas para usar en el sistema de menú Drupal 7. Puede personalizar hasta 10 etiquetas nulas diferentes con cualquier valor que desee y usarlas libremente dentro del sistema de menú Drupal.
...
Como una ventaja adicional, y debido a la funcionalidad de este módulo, también puede utilizar 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 solución muy buena!

6
Andriyun

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

Solo configurar external en TRUE lo hace por mí. Probado en Druapl 7.32.

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

1
timofey.com

El uso de 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
Alan D.

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
  • haz clic en modificar un elemento del menú y luego pasa este <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

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