Як використовувати назву вузла чи псевдонім шляху замість ідентифікатора вузла у контекстному фільтрі посилання на вузол у видах?


7

У мене є вузол A з посиланням на вузол B.

У вікні я показую всі вузли А, на які посилається конкретний вузол В (nid: 123, title: node-B-title).

Замість використання nid у контекстному фільтрі я хотів би використовувати заголовок вузла. Наприклад, замість:

view-name/123

Я хотів би використати

view-name/node-B-title

Як я міг це зробити?

Відповіді:


10

У мене була дуже схожа проблема, і я не просто знайшов її вирішення, але й дізнався нові речі про те, як працює перегляд. Дозвольте мені поділитися тим, що я дізнався, і вирішенням вашої проблеми.

Коли ви створюєте подання з одним або декількома контекстуальними фільтрами, представлення повинно десь отримувати значення цих фільтрів. Це можна зробити -

  1. Вибір значення (-ів) фільтру контексту з URL-адреси
    • Зазвичай у вас буде перегляд сторінки для таких цілей, який має URL-адресу форми foo/%/barабо foo/bar/%для одного контекстного фільтра АБО форми foo/%/bar/%або foo/bar/%/%для декількох фільтрів
    • Якщо у вас є кілька фільтрів, значення URL, яке з’являється першим, відображається у перший фільтр, поруч із другим фільтром тощо.
  2. Перегляди дозволяють вказати, що робити, якщо значення фільтру недоступні в URL-адресі . Зазвичай використовується для перегляду блоків .
    • Ви можете вибрати різні дії, а потім налаштувати вибір. Ви можете вибрати різні дії, а потім налаштувати вибір. asdfj kajsdf
  3. Ще одна річ, яку дозволяє переглядати, - це сказати, що робити зі значеннями фільтрів, якщо вони знайдені в URL-адресі, як описано в №1 вище. Типовими випадками використання є - Створення динамічних заголовків на основі значень фільтрів, Перевірка значень фільтру тощо.
    • Під час перевірки значень фільтрів ви також можете змінювати значення! (Саме тут лежить наше рішення). Це дуже схоже на те, як ми можемо змінити значення $ form у зворотних зворотах для перевірки друпальної форми. введіть тут опис зображення

Вирішення вашої конкретної проблеми полягає у використанні дуже подібного коду в розділах, на які вказують стрілки на наведеному вище зображенні.

Це посилання виявилося мені дуже корисним. Ось уривок з нього:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

Це не спрацювало для мене, а скоріше спричинило помилку ajax у режимі перегляду при збереженні.
DrCord

1

Це не спрацює за будь-яких обставин, але один підхід до проблеми у питанні полягає у використанні фактичного відображення вузла вузла B (або вузла типу B) та встановлення його шляху, як вам потрібно, за допомогою шляху або модуля pathauto. Потім скористайтеся блоком перегляду, щоб додати відносини вмісту та потрібний перегляд.

Використовуйте контекстний фільтр на NID, а потім встановіть Provide default value > Content ID from URL. Потім додайте блок переглядів на вашу сторінку або набір сторінок.

Якщо ваш контекст дозволяє використовувати блок переглядів на самому вузлі, а не на сторінці переглядів, це значно полегшить отримання потрібного шляху та відображення переглядів, які ви хочете.


1

Я відредагував прийняту відповідь, але хотів додати тут фактичний код:

Використовуйте опцію перевірки PHP під параметрами перевірки у контекстному фільтрі.

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

1

Аргумент перегляду повинен бути посиланням на поле типу вмісту, потім виберіть опцію "Надати аргумент за замовчуванням" і перевірте параметр Id Node (щось подібне).

1) Додати аргумент "X посилання на поле" 2) Перевірте ідентифікаційний вузол з URL-адреси (додайте аргумент за замовчуванням) 3) У розділі перевірки перевірте тип вмісту вузла, а в розділі "Тип вузла" виберіть "Ідентифікатор вузла

І робиться. :)


"Ідентифікатор вмісту з URL" надає лише nid. Якщо я використовую посилання на термін, я міг би використовувати "критерії перевірки" з "ім'ям терміна, перетвореним на ідентифікатор терміна". Для посилання на вузол не існує аналогічного варіанта для перекладу заголовка в nid. Можливо, тому, що назви необов’язково унікальні.
uwe

Так правильно, але якщо аргумент повинен бути посиланням на поле (nid), спробуйте це.
Елео

1) Додати аргумент "X посилання на поле" 2) Перевірте ідентифікаційний вузол з URL-адреси (додайте аргумент за замовчуванням) 3) У розділі перевірки перевірте тип вмісту вузла, а в розділі "Тип вузла" виберіть "Ідентифікатор вузла"
Eleo

Фактичний URL може мати nid, а псевдонім шляху може бути заголовком вузла. Це працює, чи не так?
SGhosh

0

Старе запитання, але знайшов його через Google і подумав, що я поділюсь своїм рішенням для всіх, хто знайде його в майбутньому:

Зараз існує модуль з ім'ям безпечного слова, який в основному робить саме те, що запропонував Sumeet Pareek: (Автоматично) створює поле, сприятливе для URL-адрес.


0

Я порекомендував би модуль Псевдоніматичний шлях (шлях_alias_xt) . Він вирішує цю проблему, встановлюючи без конфігурації, це, мабуть, магія. : D Насправді, але уривок зі сторінки модуля пояснює, як ви його просто встановите, і він виправляє цю та інші проблеми, але не входить у те, як модуль робить це за кадром ... О, ну, ми завжди могли читати код: D Він не конкретно згадує про фіксацію контурів поглядів, але я використовував це, і це прекрасно працює.

Список проблем, які він вирішує, зі сторінки модуля:

  • Ви коли-небудь замислювалися про те, чому після визначення псевдоніма, як-от для, скажімо, вузла / 123, ваші сторінки все ще пронизані тими потворними машинно створеними вкладками та посиланнями, як / node / 123 / edit, node / 123 / reitions etc. .?
  • Так само для / таксономії / термін /% та / користувач /% посилань: ви очікували побачити / висихає / доріжку, але отримали / user / 5 / track?
  • Чи виявляєте ви, що в адресному рядку веб-переглядача також відображаються ці потворні цифри замість ваших псевдонімів?
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.