2016-04-28 1 views
0

на моем сайте Drupal 8, у меня есть разделы, помеченные термином типа «Терапия» и «Команда», где одно содержание (каждая терапия, каждый человек ...) узлы с якорями. Узлы (например, вся команда) отображаются на одной странице. В моем меню не проблема добавить якорь-хэштег, чтобы точно прокрутить до одиночной терапии или члена команды.Переписать узловые ссылки в Drupal 8 с помощью anchor-hashtag, например./termname # title вместо /termname/title.html

Но: Я также использую ссылки на объекты для ссылки на разные узлы. Эти ссылки генерируются внутри системы автоматически (например, therapy/massage.html). Теперь я хочу создать правило перезаписи, которое перезаписывает все узловые ссылки (например,) xxx.xxx.com/therapy#massage, где «массаж» является названием узла.

Подсказка: это невозможно сделать с помощью pathauto! Я уже пробовал это.

Спасибо заранее и связи, Fab

+0

Вам, вероятно, нужно подключиться к ссылкам и им самим. Взгляните сюда: https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Menu!menu.api.php/function/hook_link_alter/8.1.x – VJamie

+0

Эй, Джейми, спасибо. Но можете ли вы дать мне подсказку, как это могло бы выглядеть? И где я должен разместить этот код? Я хочу, чтобы заголовок узла был добавлен как anchor-hashtag. –

ответ

0

Похоже, что это возможно с Url :: fromUserInput()

Взгляните на следующую ссылку: https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Url.php/function/Url%3A%3AfromUserInput/8.1.x

Ваш код будет выглядеть примерно так это

$url = Url::fromUserInput('#' . $node->getTitle()); 

Куда поместить это зависит от того, как вы создаете свою страницу. Если это стандартный вид (который я предполагаю), вам нужно подключиться к созданию вашей ссылки и изменить URL-адрес.

Для вышесказанного вам необходимо создать модуль и добавить крючок в файл .module.

Крюк вы будете нуждаться в hook_link_alter(), вы можете найти документацию здесь: https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Menu!menu.api.php/function/hook_link_alter/8.1.x

/** 
* Implements hook_link_alter(). 
*/ 
function module_link_alter(&$variables) { 
    /** @var NodeInterface $node */ 
    $node = $variables['options']['node']; 

    if ($node != NULL){ 
    $variables['url'] = Url::fromUserInput('#' . $node->getTitle()); 
    } 

Код выше должен получить вас на вашем пути, я не совсем уверен, если это Я буду работать, так как я еще не пробовал.

Надеюсь, это поможет!

+0

Привет, Джейми, и еще раз спасибо за ваш ответ. Мне нужно положить это в template.php или где? Извините im new для Drupal 8:/ Не могли бы вы намекнуть на это? Было бы прекрасно, спасибо заранее. –

+0

@FabUlous Обновлено мой ответ – VJamie

+0

Wow super! я проверю это после запуска. Большое спасибо! Поскольку мне пришлось быстро закончить этот проект, я нашел обходное решение: можно добавить знак хэша непосредственно внутри поля URL-Alias ​​в форме редактирования узла. И этот URL-адрес также используется для всего справочного материала. Это не идеальное решение, так как есть ошибочная ошибка, набрав URL-адрес неправильно, но так как я создаю и редактирую контент для клиента, это нормально. Я не понимаю, почему его невозможно добавить хэш-знак в pathauto. Было бы так просто! –

Смежные вопросы