Jak dodać łącze mieszające w menu?

21

Czy istnieje sposób na dodanie skrótu do menu w menu drupal, aby po prostu utworzyć pozycję menu, która przeskakuje do kotwicy lub identyfikatora na stronie?

mohamad salama
źródło
Jeśli użyjesz bezwzględnego adresu URL na początku, będzie działać. Like yourdomain.com/somepath#someother
hzak

Odpowiedzi:

15

Niestety, o ile mi wiadomo, Drupal nie może tego zrobić po wyjęciu z pudełka. Możesz jednak użyć modułu Specjalne pozycje menu , aby utworzyć nowy element menu i umieścić „nolink” w ustawieniach ścieżki.

kiamlaluno
źródło
niestety ten moduł dla wersji 6 i nikogo dla 7, ale można go modyfikować. w każdym razie dzięki.
mohamad salama,
1
Zamiast tego skorzystaj z l('linktext', '', array('fragment' => ' ', 'external' => TRUE));odpowiedzi @ Sebastiana.
Duncanmoo,
„Specjalne pozycje menu” dodaje <span title="" class="nolink">...</span>. Problemem jest tylko brak CSS. Po prostu skopiuj ul.menu a{}CSS i wklej je ul.menu li span.nolink{}. Dla mnie działa dobrze. Ale wyłącza strzałkę rozwijaną włączoną przez li.expanded. :(
Mayeenul Islam,
Przepraszam, że opublikowałem tak późno, ale właśnie natknąłem się na ten wątek. Zamiast zmieniać css, możesz użyć małego js, ​​aby owinąć nolink w tagu kotwicy hash. Z jQuery byłobyjQuery("span.nolink").wrap("<a href='#'></a>");
Goldentoa11,
15

Postępuj zgodnie z tym, co zgłoszono w komentarzu do l()dokumentacji .

Aby utworzyć link do nazwanej kotwicy (np. „#Namedanchor”), musisz użyć małego obejścia.

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

Aby utworzyć łącze tylko do mieszania (do „#”), musisz je dostosować do:

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

(Uwaga: fragment zawiera spację).

 

W Drupal 7 ustaw „HTML” na TRUE, a następnie dodaj znak skrótu.

Sebastian
źródło
13

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

node / 16 # gohere

automatyczny adres URL zmieni go na podobny

about-us # gohere

Squarecandy
źródło
1
Co powiesz na pozostanie na stronie, na której jesteś? Na przykład próbujesz uzyskać link Przejdź do nawigacji, aby przejść do div nawigacji bez względu na to, na której stronie jesteś? @shanabus
kine456
2
Najlepszy sposób, aby to zrobić, nie potrzebujesz modułu ani wtyczki!
Andreas Daoutis
Nawet współpracuje z <front>#gohere. Ładny! :)
Huelfe
6

Spróbuj użyć modułu Void Menu :

Menu Void pozwala skonfigurować specjalne wartości dla tagów do użycia w systemie menu Drupal 7. Możesz dostosować do 10 różnych pustych tagów dowolną wartością i swobodnie korzystać z nich w systemie menu Drupal.
...
Jako dodatkowy bonus i ze względu na funkcjonalność tego modułu, możesz również używać rzeczywistych kotwic jako pozycji menu, które służą jedynie symbolom zastępczym. Dokonuje się tego za pomocą tagu void ustawionego na javascript: void (0); lub nawet prosty tag skrótu #. Zaletą korzystania z tego modułu zamiast special_menu_items jest to, że twoje menu nie będą wymagały żadnej dodatkowej stylizacji, aby uwzględnić dodane tagi zakresu używane przez special_menu_items, i będą ważne w W3C, ponieważ każda kotwica musi mieć atrybut href.

To bardzo miłe rozwiązanie!

Andriyun
źródło
2

Właśnie napotkałem ten sam problem. Musiałem programowo dodać elementy menu za pomocą łączy mieszających. Mój kod:

// 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);
EDWH
źródło
1

Tylko ustawienie externalsię TRUErobi to za mnie. Testowane w Druapl 7.32.

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

timofey.com
źródło
0

Działa także funkcja tłumaczenia Drupals.

/**
 * 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';
  }
}
Ziemia.
źródło
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;
}

Możesz dodać link skrótu do menu, używając powyższego kodu.

Guru
źródło
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;
  }
}
ccx105
źródło
Nie publikuj odpowiedzi „tylko kod”. Chociaż może to rozwiązać problem, nie wyjaśnia czytelnikowi, dlaczego rozwiązuje problem , ani co zapewnia w porównaniu z alternatywami tutaj .
Shawn Conn
0

zainstaluj specjalne pozycje menu i menu DHTML dla menu hierarchicznych, a następnie:

  • dodaj swoje x-przykładowe słownictwo i dodaj do niego swoje warunki
  • kliknij przycisk modyfikuj x-przykład niż w sekcji menu systematyki ustaw lokalizację menu
  • przejdź do bloków ustaw menu na blok
  • w modyfikacji administratora menu zobaczysz warunki dodane automatycznie
  • kliknij zmodyfikuj element menu, a następnie wklej go <void>w celu

teraz wróć do strony głównej, a zobaczysz, że element menu, który zmodyfikowaliśmy, kliknij, aby nigdzie nie iść

elaz
źródło
Witamy w Drupal Q&A. Bardziej przydatne byłoby wyjaśnienie, jak używać specjalnych elementów menu zamiast wklejania zdjęcia. Możesz rozważyć ulepszenie swojej odpowiedzi. Dziękuję Ci.
Kojo
1
myślę, że teraz jest ok
elaz