Wie füge ich einen Hash-Link in Menüs hinzu?


21

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?


Wenn Sie am Anfang die absolute URL verwenden, funktioniert dies. Like yourdomain.com/somepath#someother
hzak

Antworten:


15

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.


Leider ist dieses Modul für Version 6 und niemand für 7 aber modifizierbar. Danke trotzdem .
Mohamad Salama

1
Nutze lieber l('linktext', '', array('fragment' => ' ', 'external' => TRUE));die Antwort von @ Sebastian.
Duncanmoo

"Spezielle Menüpunkte" fügt ein <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. :(
Mayeenul Islam

Tut mir leid, dass ich so spät gepostet habe, aber ich bin gerade auf diesen Thread gestoßen. Anstatt das CSS zu ändern, können Sie ein wenig js verwenden, um den Nolink in ein Anker-Tag mit einem Hash zu wickeln. Mit jQuery wäre esjQuery("span.nolink").wrap("<a href='#'></a>");
Goldentoa11

15

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 TRUEund hängen Sie das Hash-Zeichen an.


13

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

node / 16 # gohere

Die Auto-URL wird es so ändern, wie es ist

über-uns # gohere


1
Wie wäre es, auf der Seite zu bleiben, auf der Sie sich befinden? Versuchen Sie beispielsweise, über den Link Skip to Navigation (Zur Navigation springen) zum Navigationsbereich zu gelangen, unabhängig davon, auf welcher Seite Sie sich befinden? @shanabus
kine456

2
Am besten ohne Modul oder Plugin!
Andreas Daoutis

Funktioniert sogar mit <front>#gohere. Nett! :)
Huelfe

6

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!


2

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

1

Einfach einstellen, externalum TRUEes für mich zu tun. Getestet in Druapl 7.32.

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


0

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

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

Sie können mit dem obigen Code einen Hash-Link zum Menü hinzufügen.


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

Bitte poste keine "Code-only" Antworten. Während dies das Problem lösen könnte, erklärt es dem Leser nicht, warum es das Problem löst oder was es im Vergleich zu den Alternativen hier bietet .
Shawn Conn

0

Installieren Sie spezielle Menüelemente und das DHTML-Menü für hierarchische Menüs.

  • Ergänzen Sie Ihr x-example-Vokabular und ergänzen Sie es mit Ihren Begriffen
  • Klicken Sie auf X-Beispiel ändern, um die Menüposition festzulegen
  • gehe zu den Blöcken setze das Menü auf einen Block
  • Im Menü Admin Modifikation sehen Sie die automatisch hinzugefügten Begriffe
  • Klicken Sie auf einen Menüpunkt ändern und fügen Sie diesen <void>im Ziel hinzu

Kehren 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


Willkommen bei Drupal Q & A. Es wäre sinnvoller, zu erklären, wie spezielle Menüelemente verwendet werden, anstatt nur ein Bild einzufügen. Sie können erwägen, Ihre Antwort zu verbessern. Vielen Dank.
Kojo

1
Ich denke, jetzt ist es in
Ordnung
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.