Подтвердить что ты не робот

Drupal: создание привязки только привязки к l()

Я хотел бы вывести этот

<a href='#namedanchor'>link</a>

с использованием функции l(), так что ссылка просто переходит к привязке на текущей странице.

Я ожидал, что это сработает

l('link', '',  array('fragment' => 'namedanchor'));

но он создает абсолютную ссылку на www.example.com/#namedanchor вместо www.example.com/currentpage#namedanchor

4b9b3361

Ответ 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'));