Comment ajouter un lien de hachage dans les menus?

21

Existe-t-il un moyen d'ajouter un lien haché dans le menu sous menu drupal pour simplement créer un élément de menu qui saute à une ancre ou un identifiant sur la page?

mohamad salama
la source
Si vous utilisez l'URL absolue au début, cela fonctionnera. Comme votredomaine.com/somepath#someother
hzak

Réponses:

15

Malheureusement pour autant que je sache, Drupal ne peut pas le faire hors de la boîte. Cependant, vous pouvez utiliser le module Éléments de menu spéciaux pour créer un nouvel élément de menu et placer "nolink" dans les paramètres de chemin.

kiamlaluno
la source
malheureusement ce module pour la version 6 et personne pour 7 mais peut être modifié. Merci quand même .
mohamad salama
1
Utilisez plutôt l('linktext', '', array('fragment' => ' ', 'external' => TRUE));la réponse de @ Sebastian.
Duncanmoo
"Éléments de menu spéciaux" ajoute a <span title="" class="nolink">...</span>. Le problème n'est que le manque de CSS. Copiez simplement le ul.menu a{}CSS et collez-les pour ul.menu li span.nolink{}. Ça marche bien pour moi. Mais il a désactivé la flèche déroulante activée par li.expanded. :(
Mayeenul Islam
Désolé de poster si tard, mais je viens de parcourir ce fil. Au lieu de changer le css, vous pouvez utiliser un petit js pour envelopper le nolink dans une balise d'ancrage avec un hachage. Avec jQuery, ce seraitjQuery("span.nolink").wrap("<a href='#'></a>");
Goldentoa11
15

Suivez ce qui a été signalé dans un commentaire pour la l()documentation .

Pour créer un lien vers une ancre nommée (par exemple "#namedanchor"), vous devrez utiliser une petite solution de contournement.

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

Pour créer un lien de hachage uniquement (vers "#"), vous devrez l'adapter à:

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

(Notez que le fragment contient un espace.)

 

Dans Drupal 7, définissez "HTML" sur TRUE, puis ajoutez le caractère de hachage.

Sébastien
la source
13

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

noeud / 16 # gohere

l'URL automatique le changera comme

qui sommes-nous # gohere

squarecandy
la source
1
Et si vous restiez sur la page sur laquelle vous vous trouvez? Par exemple, essayer d'obtenir le lien Passer à la navigation pour vous diriger vers le div de navigation, quelle que soit la page sur laquelle vous vous trouvez? @shanabus
kine456
2
La meilleure façon de le faire, aucun module ni plug-in requis!
Andreas Daoutis
Fonctionne même avec <front>#gohere. Agréable! :)
Huelfe
6

Essayez d'utiliser le module Void Menu :

Le menu Vide vous permet de configurer des valeurs spéciales pour les balises à utiliser dans le système de menus Drupal 7. Vous pouvez personnaliser jusqu'à 10 balises void différentes avec la valeur que vous souhaitez et les utiliser librement dans le système de menu Drupal.
...
En prime, et en raison de la fonctionnalité de ce module, vous pouvez également utiliser des ancres réelles comme éléments de menu qui ne servent à rien d'autre que des espaces réservés. Ceci est accompli avec une balise void qui est définie sur javascript: void (0); ou même une simple balise de hachage #. L'avantage d'utiliser ce module sur special_menu_items pour cela est que vos menus ne nécessiteront aucun style supplémentaire pour tenir compte des balises span ajoutées utilisées par special_menu_items et seront valides W3C car chaque ancre doit avoir un attribut href.

C'est une très belle solution!

Andriyun
la source
2

Je viens de rencontrer le même problème. J'avais besoin d'ajouter par programme des éléments de menu avec des liens de hachage. Mon code:

// 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
la source
1

La mise juste externalà TRUEfait pour moi. Testé dans Druapl 7.32.

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

timofey.com
la source
0

L'utilisation des fonctions de traduction de Drupals fonctionne également.

/**
 * 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';
  }
}
Un terrain.
la source
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;
}

Vous pouvez ajouter un lien de hachage au menu en utilisant le code ci-dessus.

Gourou
la source
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
la source
Veuillez ne pas publier de réponses "code uniquement". Bien que cela puisse résoudre le problème, cela n'explique pas au lecteur pourquoi il résout le problème , ni ce qu'il fournit par rapport aux alternatives ici .
Shawn Conn
0

installez les éléments de menu spéciaux et le menu DHTML pour les menus hiérarchiques puis:

  • ajoutez votre vocabulaire d'exemple et ajoutez-y vos termes
  • cliquez sur modifier x-exemple que dans la section de menu de taxonomie définir l'emplacement du menu
  • aller aux blocs définir le menu sur un bloc
  • dans le menu admin modification vous voyez les termes ajoutés automatiquement
  • cliquez sur modifier un élément de menu puis passez-le <void>dans la cible

maintenant de retour à votre page d'accueil et vous verrez que l'élément de menu que nous avons modifié dans le clic ceux-ci ne vont nulle part

elaz
la source
Bienvenue dans Drupal Q&A. Il serait plus utile d'expliquer comment utiliser des éléments de menu spéciaux au lieu de simplement coller une image. Vous pourriez envisager d'améliorer votre réponse. Je vous remercie.
Kojo
1
je pense que maintenant c'est ok
elaz