Я пытаюсь использовать l()
что-то вроде <a href='#' ...>
, для целей вызова ajax. /programming/1698453/drupal-creating-anchor-only-link-with-l очень близок к правильной вещи - используйте опцию в l()
like, 'fragment' => 'foo'
чтобы создать ссылку вроде <a href='#foo'...>
- но я пытаясь получить чистый '#'. Есть ли способ сделать это, или я должен просто вставить что-то как часть фрагмента и не беспокоиться об этом?
источник
javascript:void(0)
javascript:
иjavascript:void(0)
так же. Единственная разница - "void (0)" :)PHP типизирует время поп-викторины! (Полное раскрытие: я не выиграл в нашем офисе).
Как уже отмечалось, это код,
l()
который нас интересует:Итак, вот вопрос: какое значение приводится к пустой строке, но передает следующее?
Ответ:
FALSE
!Итак, мы можем попробовать это:
Что дает нам:
К счастью, мы можем убрать эту ведущую косую черту, передавая
external => TRUE
:Что дает нам:
Boom. Что мы делаем, чтобы избежать конкатенации строк html вручную, а?
Постскриптум:
Я не уверен, что на самом деле рекомендую напечатать такую ссылку с php при нормальных обстоятельствах. Без вашего javascript все, что эта ссылка сделает , переместит вашего пользователя в верхнюю часть страницы ( что, к моему небольшому удивлению, является специфическим поведением ). Вероятно, это должно указывать на то, что работает без JavaScript.
Если ссылка действительно имеет смысл только с javascript (например, с элементами управления для слайд-шоу только для js или чего-то еще), я думаю, что лучше добавить ссылку на страницу с помощью javascript. В качестве альтернативы, если вы действительно хотите поместить его в свой источник, убедитесь, что он установлен
display:none
по умолчанию. У Drupal есть.js
класс в html, который затем показывает его, когда есть javascript.источник
К сожалению,
url()
функция (котораяl()
вызывает внутренне) практически уничтожает любой шанс пустого фрагмента следующими строками:Он проверяет, чтобы убедиться, что фрагмент не является пустой строкой, которую вам нужно передать, чтобы получить чистоту
#
. Я думаю, что самым простым решением было бы выбрать идентификатор подходящего элемента где-то на странице и использовать его вместо фрагмента (или,javascript:void
как уже упоминал Ситху).Однако ... наиболее доступным способом (а впоследствии и во многих странах легальным путем, например, раздел 508 в Штатах, DDA в Великобритании и т. Д.) Будет предоставление контента, который загружается / корректируется по вашей ссылке на отдельную страницу, и вместо этого используйте URL для этой страницы в качестве ссылки. Затем вы должны использовать javascript, чтобы остановить событие на ссылке от фактического перенаправления страницы для тех браузеров, у которых она включена.
Таким образом, у вас есть запасной контент для пользователей без javascript, вы сохраняете законность и делаете всех и их собаку счастливыми :)
источник
print drupal_json_output($output)
на своей странице вызова ajax.Вы не можете использовать чистый
#
.Но можно добавить
space symbol
после#
:источник
У меня просто была та же проблема, но ни одно из решений не было удовлетворительным, поэтому я придумал свое собственное:
Это производит чистый
#
источник
<a href="# ">link</a>
для меня.Вместо этого я бы использовал тип рендеринга html_tag, потому что, как мне кажется, ссылка на рендер привлекает особое внимание от Drupal. Недостатком является то, что для него нет функции быстрого доступа, поэтому нам придется использовать массив render:
источник
Это в основном тот же ответ, который я разместил здесь ... Установка
fragment
одного пробела преобразует в a#
и$current_path
включена, потому что в противном случае ссылка будет просто установленаwww.example.com/#
вместоwww.example.com/current-page#
:источник