Представление Drupal и URL-адреса путей
-
18-09-2019 - |
Вопрос
У меня проблема с путями Drupal в одном представлении, которое я создаю.Прямо сейчас мое мнение имеет следующую форму:содержание/2/6.
Где 2 и 6 — это идентификаторы двух узлов, я хотел бы манипулировать этими идентификаторами, чтобы перевести их, скажем, названия этих узлов.
Я не могу сделать это из представления, потому что я отправляю эти значения на панель, и панель ДОЛЖНА получить идентификаторы узлов.
Подводя итог, я просто хочу переписать (как это делает pathauto) эти идентификаторы в заголовок, могу ли я это сделать?Есть ли для этого специальный модуль?
Спасибо!
Решение
Если я вас правильно понимаю, вы хотите сохранить исходные пути «content/[nid_x]/[nid_y]», но добавить дополнительные псевдонимы URL для тех, у кого больше «говорящих» элементов пути из узлов (например,титулы).Если это верно, у вас есть два варианта:
Во-первых, вы можете сделать это вручную, определив псевдонимы URL-адресов для «content/[nid_x]/[nid_y]» в разделе «admin/build/path/add».Это легко сделать, но, вероятно, это не то, что вам нужно, если вам нужно много таких псевдонимов.
Во-вторых, это можно сделать программно с помощью path_set_alias()
функция.Использование функции довольно простое — единственная проблема может заключаться в том, где ее вызвать.Из вашего описания мне неясно, где и когда создаются эти представления, поэтому трудно придумать предложение - возможно, вы можете отредактировать свой вопрос, чтобы сделать его более конкретным.
Если вы хотите создать псевдонимы URL-адресов представления для определенных комбинаций узлов, вы можете попробовать использовать операции «вставка», «обновление» и «удаление» hook_nodeapi()
чтобы инициировать создание псевдонима.Очевидно, что это будет работать только в том случае, если существует последовательное правило, которое позволит вам решить из кода, для каких узлов создавать псевдоним или нет.
Если у вас есть псевдоним URL-адреса для определенного пути, он будет использоваться вместо исходного всякий раз, когда ссылка на этот путь создается через л() функция.Так, например.если вы создадите запись меню, указывающую на «content/2/6», используемый URL-адрес автоматически станет псевдонимом, который вы создали для этого пути.
Редактировать:На всякий случай, если вы в конечном итоге создадите псевдонимы программно. Если вы все равно используете pathauto, вы можете/должны использовать его pathauto_cleanstring()
(из «pathauto.inc»), чтобы гарантировать, что ваши сгенерированные URL-адреса правильно экранируются/перезаписываются на разрешенные символы.
Другие советы
Существует способ использовать функцию пользовательского URL-адреса для создания специальных URL-адресов.Если вы используете панели, я не уверен, захотите ли вы сделать это таким образом, потому что он очень статичный.
function custom_url_rewrite($op, $result, $path) {
if ($op == 'alias') {
if (preg_match('|^[node_id#_here](/{0,1}.*)|', $path, $matches)) {
return '[desired_alias]'. $matches[1];
}
}
if ($op == 'source') {
if (preg_match('|^[node_id#](/{0,1}.*)|', $path, $matches)) {
return '[desired_source]'. $matches[1];
}
}
return $result;
}
Вы захотите заменить идентификаторы узлов своими собственными, а также желаемыми псевдонимами и источниками.Надеюсь это поможет.
Возможно, также полезно:
измените исходные ссылки, используя представление для создания ссылки с использованием замены токена, например <a href="nodeview/[title]/nid" title="[title]">link tekst</a>
и обработать узел в представлении с помощью пути exa nodeview и аргументов null, null, nid f.i.
для более запутанных ссылок используйте поле просмотра php для построения строки..