it-swarm.com.de

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

Gibt es eine Möglichkeit, einen Hash-Link im Menü unter drupal menu) hinzuzufügen, um nur einen Menüpunkt zu erstellen, der zu einem Anker oder einer ID auf der Seite springt?

21
mohamad salama

Soweit mir bekannt ist, kann Drupal kann dies nicht sofort tun. Sie können jedoch das Modul Spezielle Menüpunkte verwenden, um einen neuen Menüpunkt zu erstellen. und platzieren Sie "nolink" in den Pfadeinstellungen.

15
user842

Befolgen Sie die Anweisungen in ein Kommentar zur Dokumentation l() .

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 fügen Sie dann das Hash-Zeichen hinzu.

15
Sebastian

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

knoten/16 # gohere

die automatische URL ändert sie wie folgt

über uns # gohere

13
squarecandy

Versuchen Sie das Modul Void Men :

Mit dem Menü "Leer" können Sie spezielle Werte für Tags konfigurieren, die im Menüsystem Drupal 7 verwendet werden. Sie können bis zu 10 verschiedene Void-Tags mit einem beliebigen Wert anpassen und diese im Menüsystem Drupal 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 Hash-Tag #. Der Vorteil der Verwendung dieses Moduls gegenüber special_menu_items besteht darin, dass für Ihre Menüs kein zusätzliches Styling erforderlich ist, um die von special_menu_items verwendeten zusätzlichen Span-Tags zu berücksichtigen, und dass W3C-gültig ist, da jeder Anker ein href-Attribut haben muss.

Es ist eine sehr schöne Lösung!

6
Andriyun

Ich bin gerade auf das gleiche Problem gestoßen. Ich musste programmgesteuert Menüelemente 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);
2
EDWH

Nur external auf TRUE zu setzen, macht es für mich. Getestet in Druapl 7.32.

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

1
timofey.com

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
Alan D.

Installieren Sie dann spezielle Menüpunkte und das DHTML-Menü für hierarchische Menüs :

  • fügen Sie Ihr X-Beispiel-Vokabular hinzu und fügen Sie Ihre Begriffe hinzu
  • klicken Sie auf "X-Beispiel ändern" als im Menübereich "Taxonomie"
  • gehen Sie zu den Blöcken und stellen Sie das Menü auf einen Block ein
  • in der Menüadministratoränderung werden die Begriffe automatisch hinzugefügt
  • klicken Sie auf einen Menüpunkt ändern und geben Sie diesen <void> im Ziel ein

jetzt zurück zu Ihrer Homepage und Sie werden sehen, dass der Menüpunkt, den wir im Klick geändert haben, nirgendwo hingehen

0
elaz
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 dem Menü mit dem obigen Code einen Hash-Link hinzufügen.

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