Drupal: создание привязки только привязки к l()
Я хотел бы вывести этот
<a href='#namedanchor'>link</a>
с использованием функции l(), так что ссылка просто переходит к привязке на текущей странице.
Я ожидал, что это сработает
l('link', '', array('fragment' => 'namedanchor'));
но он создает абсолютную ссылку на www.example.com/#namedanchor
вместо www.example.com/currentpage#namedanchor
Ответы
Ответ 1
Если вы хотите создать ссылку только с фрагментом, вам нужно немного "обмануть" функцию url. Поскольку он добавит базовый путь ко всем внутренним URL-адресам, ''
станет http://example.com
.
Что вам нужно сделать, так это установить внешнюю опцию в значение true:
l('link', '', array('fragment' => 'namedanchor', 'external' => TRUE));
Это даст желаемый
<a href='#namedanchor'>link</a>
Альтернатива вы могли бы дать полный URL-адрес, как предлагает Джереми.
Ответ 2
Чтобы создать привязку с помощью l():
$path = isset($_GET['q']) ? $_GET['q'] : '<front>';
l(t('link text'), $path, array('attributes' => array('name' => 'name-of-anchor')));
Это выведет:
<a href="/path/to/currentpage" name="name-of-anchor">link text</a>
Затем, чтобы связать это с помощью l():
$path = isset($_GET['q']) ? $_GET['q'] : '<front>';
l(t('link to anchor'), $path, array('fragment' => 'name-of-anchor'));
Это выведет:
<a href="/path/to/currentpage#name-of-anchor">link to anchor</a>
Ответ 3
Вот документация для l
Не похоже, чтобы он по умолчанию использовал текущую страницу, когда путь не определен. Поэтому вы должны называть это следующим образом:
l('link', 'currentpage', array('fragment' => 'namedanchor'));