Come faccio ad aggiungere un collegamento hash nei menu?


21

C'è un modo per aggiungere un collegamento con hash nel menu sotto il menu drupal per creare semplicemente una voce di menu che salta giù su un ancoraggio o un ID sulla pagina?


Se usi Absolute url all'inizio funzionerà. Like yourdomain.com/somepath#someother
hzak,

Risposte:


15

Sfortunatamente, per quanto ne so, Drupal non può farlo immediatamente. Tuttavia, è possibile utilizzare il modulo Voci di menu speciali per creare una nuova voce di menu e posizionare "nolink" nelle impostazioni del percorso.


sfortunatamente questo modulo per la versione 6 e nessuno per 7 ma può essere modificato. grazie comunque .
Mohamad Salama,

1
Piuttosto usa l('linktext', '', array('fragment' => ' ', 'external' => TRUE));la risposta di @ Sebastian.
Duncanmoo,

"Voci di menu speciali" aggiunge a <span title="" class="nolink">...</span>. Il problema non è altro che la mancanza di CSS. Copia il ul.menu a{}CSS e incollalo per ul.menu li span.nolink{}. Funziona bene per me. Ma ha disabilitato la freccia del menu a discesa abilitata da li.expanded. :(
Mayeenul Islam

Mi dispiace postare così tardi, ma ho appena incontrato questa discussione. Invece di cambiare il CSS, puoi usare un po 'di js per avvolgere il nolink in un tag anchor con un hash. Con jQuery, sarebbejQuery("span.nolink").wrap("<a href='#'></a>");
Goldentoa11,

15

Segui quanto riportato in un commento per la l()documentazione .

Per creare un collegamento a un'ancora denominata (ad esempio "#namedanchor"), è necessario utilizzare una piccola soluzione.

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

Per creare un collegamento solo hash (a "#"), dovrai adattarlo a:

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

(Nota che il frammento contiene uno spazio.)

 

In Drupal 7, imposta "HTML" su TRUE, quindi aggiungi il carattere hash.


13

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

node / 16 # gohere

l'url automatico lo cambierà per essere come

chi-siamo # gohere


1
Che ne dici di rimanere sulla pagina in cui ti trovi? Ad esempio, stai cercando di ottenere il collegamento Passa alla navigazione per portarti al div di navigazione indipendentemente dalla pagina in cui ti trovi? @shanabus
kine456

2
Il modo migliore per farlo, non è necessario alcun modulo o plugin!
Andreas Daoutis,

Funziona anche con <front>#gohere. Bello! :)
Huelfe,

6

Prova a utilizzare il modulo Menu vuoto :

Il menu Void consente di configurare valori speciali per i tag da utilizzare nel sistema di menu Drupal 7. Puoi personalizzare fino a 10 diversi tag vuoti con qualsiasi valore desideri e usarli liberamente all'interno del sistema di menu Drupal.
...
Come bonus aggiuntivo e grazie alla funzionalità di questo modulo, puoi anche utilizzare le ancore effettive come voci di menu che non hanno altro scopo che i segnaposto. Ciò si ottiene con un tag void impostato su javascript: void (0); o anche un semplice tag hash #. Il vantaggio di utilizzare questo modulo su special_menu_items per questo è che i tuoi menu non richiedono alcun tipo di stile aggiuntivo per tenere conto dei tag di span aggiunti utilizzati da special_menu_items e saranno W3C validi perché ogni anchor deve avere un attributo href.

È una soluzione molto bella!


2

Ho appena riscontrato lo stesso problema. Avevo bisogno di aggiungere a livello di codice voci di menu con collegamenti hash. Il mio codice:

// 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

Proprio l'impostazione externalper TRUElo fa per me. Testato in Druapl 7.32.

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


0

Anche l'uso delle funzioni di traduzione di Drupals funziona.

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

Puoi aggiungere un link hash al menu usando il codice sopra.


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

Si prega di non pubblicare risposte "solo codice". Mentre questo potrebbe risolvere il problema, non spiega al lettore perché risolve il problema o cosa fornisce rispetto alle alternative qui .
Shawn Conn,

0

installare voci di menu speciali e menu DHTML per menu gerarchici quindi:

  • aggiungi il tuo vocabolario x-example e aggiungi ad esso i tuoi termini
  • fare clic su Modifica esempio x rispetto alla sezione del menu di tassonomia imposta la posizione del menu
  • vai ai blocchi imposta il menu su un blocco
  • nel menu modifica amministratore vedi i termini aggiunti automaticamente
  • fai clic su modifica una voce di menu, quindi oltre questa <void>nella destinazione

ora torniamo alla tua home page e vedrai che le voci di menu che abbiamo modificato nel clic non vanno da nessuna parte


Benvenuto in Domande e risposte su Drupal. Sarebbe più utile spiegare come utilizzare le voci di menu speciali anziché incollare un'immagine. Puoi considerare di migliorare la tua risposta. Grazie.
Kojo,

1
penso che ora sia ok
elaz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.