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?
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?
Risposte:
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.
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
la risposta di @ Sebastian.
<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
. :(
jQuery("span.nolink").wrap("<a href='#'></a>");
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.
http://drupal.org/node/123103#comment-4955236
node / 16 # gohere
l'url automatico lo cambierà per essere come
chi-siamo # gohere
<front>#gohere
. Bello! :)
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!
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);
Proprio l'impostazione external
per TRUE
lo fa per me. Testato in Druapl 7.32.
l('Some Name', '#', array('external' => TRUE));
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';
}
}
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.
/**
* 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;
}
}
installare voci di menu speciali e menu DHTML per menu gerarchici quindi:
<void>
nella destinazioneora torniamo alla tua home page e vedrai che le voci di menu che abbiamo modificato nel clic non vanno da nessuna parte