Gibt es eine Möglichkeit, einen Hash-Link im Menü unter Drupal-Menü hinzuzufügen, um einfach einen Menüpunkt zu erstellen, der zu einem Anker oder einer ID auf der Seite springt?
Gibt es eine Möglichkeit, einen Hash-Link im Menü unter Drupal-Menü hinzuzufügen, um einfach einen Menüpunkt zu erstellen, der zu einem Anker oder einer ID auf der Seite springt?
Antworten:
Soweit mir bekannt ist, kann Drupal dies leider nicht sofort tun. Sie können jedoch das Modul Spezielle Menüelemente verwenden , um ein neues Menüelement zu erstellen und "nolink" in den Pfadeinstellungen zu platzieren.
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
die Antwort von @ Sebastian.
<span title="" class="nolink">...</span>
. Problem ist nur das Fehlen von CSS. Kopieren Sie einfach das ul.menu a{}
CSS und fügen Sie es für ein ul.menu li span.nolink{}
. Es funktioniert gut für mich. Der Dropdown-Pfeil von wurde deaktiviert li.expanded
. :(
jQuery("span.nolink").wrap("<a href='#'></a>");
Befolgen Sie die Angaben in einem Kommentar zur l()
Dokumentation .
Um einen Link zu einem benannten Anker (z. B. "#namedanchor") zu erstellen, müssen Sie eine kleine Problemumgehung verwenden.
l('linktext', '', array('fragment' => 'namedanchor', 'external' => TRUE));
Um einen Nur-Hash-Link (zu "#") zu erstellen, müssen Sie ihn anpassen an:
l('linktext', '', array('fragment' => ' ', 'external' => TRUE));
(Beachten Sie, dass das Fragment ein Leerzeichen enthält.)
Setzen Sie in Drupal 7 "HTML" auf TRUE
und hängen Sie das Hash-Zeichen an.
http://drupal.org/node/123103#comment-4955236
node / 16 # gohere
Die Auto-URL wird es so ändern, wie es ist
über-uns # gohere
<front>#gohere
. Nett! :)
Versuchen Sie, das Modul Void Menu zu verwenden :
Mit dem Menü "Void" können Sie spezielle Werte für Tags konfigurieren, die im Drupal 7-Menüsystem verwendet werden sollen. Sie können bis zu 10 verschiedene leere Tags mit einem beliebigen Wert anpassen und diese im Drupal-Menüsystem frei verwenden.
...
Als zusätzlichen Bonus und aufgrund der Funktionalität dieses Moduls können Sie auch tatsächliche Anker als Menüelemente verwenden, die keinem anderen Zweck als Platzhaltern dienen. Dies wird mit einem Void-Tag erreicht, das auf Javascript gesetzt ist: void (0); oder sogar ein einfaches Hashtag #. Der Vorteil der Verwendung dieses Moduls gegenüber special_menu_items besteht darin, dass Ihre Menüs kein zusätzliches Styling erfordern, um die von special_menu_items verwendeten hinzugefügten Span-Tags zu berücksichtigen, und W3C-gültig sind, da jeder Anker ein href-Attribut haben muss.
Es ist eine sehr schöne Lösung!
Bin gerade auf das gleiche Problem gestoßen. Ich musste programmgesteuert Menüpunkte mit Hash-Links hinzufügen. Mein 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);
Einfach einstellen, external
um TRUE
es für mich zu tun. Getestet in Druapl 7.32.
l('Some Name', '#', array('external' => TRUE));
Die Verwendung von Drupals Übersetzungsfunktionen funktioniert ebenfalls.
/**
* 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;
}
Sie können mit dem obigen Code einen Hash-Link zum Menü hinzufügen.
/**
* 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;
}
}
Installieren Sie spezielle Menüelemente und das DHTML-Menü für hierarchische Menüs.
<void>
im Ziel hinzuKehren Sie jetzt zu Ihrer Homepage zurück und Sie werden sehen, dass der Menüpunkt, den wir im Klick geändert haben, nirgendwohin führt