Вопрос по мотивам ответа - CCK: как взять значение «ссылки на ноду» из произвольного поля?

Главные вкладки

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 14 декабря 2008 в 15:11

Здравствуйте!

Столкнулся с проблемой, которую не знаю, как решить. Суть такова, имеется несколько типов страниц, предназначенных для разного содержимого (отдельно матчи, отдельно информация о команде-сопернике, например). Хочется связать их между собой так, чтобы потом делать красивую выборку через views. Как я себе это представляю: При создании новой ноды матча (type1) можно из выпадающего списка выбрать соперника (тип содержимого type2), при этом в качестве значения будет записываться не название команды соперника, а id той самой ноды, которая ей посвящена.

Например, я создаю ноду матча, который состоится 14 декабря, прописываю дату время, а потом указываю соперника — открываю выпадающее меню, где могу выбрать «Арсенал» (nid 5), «Астон Виллу» (nid 17) или «Болтон» (nid 19). Если выбираю «Арсенал», в качестве значения прописывается 5, «Астон Виллу» — 17 и т.д.

Подскажите, пожалуйста, как это реализовать, если учесть, что список возможных соперников будет постоянно пополняться? Как я понимаю, нужно написать функцию на php, которая будет пробегать по всем нодам type2, доставать оттуда имена соперников (teamname) и создавать массив со значениями вида nid => teamname. Правильно? Помогите, пожалуйста, с написанием такой функции.

И ещё, подскажите, пожалуйста, какой тип искомого поля «соперник» использовать в ноде type1 — число (integer) или ссылка на ноду?

Заранее спасибо за помощь!

UPD: Перечёркнутый ныне вопрос решился элементарно — было достаточно выбрать в качестве типа значения «ссылку на ноду», и всё. Но возник новый вопрос — как в качестве вывода давать не заголовок_со_ссылкой/заголовок_без_ссылки/тизер/нода_целиком/хидден, а значение определённого поля (предположим, field_teamshortname)?

Комментарии

Аватар пользователя Terix Terix 15 декабря 2008 в 9:23

Не совсем понятно что и как.

Насколько я понимаю матч предполагает двух соперников. А тут он почему - то один.

Во - вторых если нужна просто возможность выбирать название ноды из списка, то тип поля "ссылка на ноду" разрешает такое безо всяких проблем.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 15 декабря 2008 в 16:58

Спасибо за ответ!

Просто у меня сайт посвящён одному клубу, поэтому надо выбирать лишь одного из соперников -)

Да, всё в этом компоненте оказалось проще, чем я думал. Достаточно было сделать лишь поле ссылкой на ноду, как всё решилось. Спасибо большое! А я всё не решался попробовать.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 16 декабря 2008 в 13:43

Поюзал «ссылку на ноду», понял, что это почти то, что надо, но всё же не совсем... Из этого родился новый вопрос.

При выборе ссылки на ноду вывод может представляться в следующих видах: заголовок со ссылкой на ноду, заголовок без ссылки на ноду, тизер, вся нода, спрятанный. Как изменить это так, чтобы выводилось содержимое произвольного поля cck, имеющегося в ноде? Предположим, поля field_teamshortname?

Аватар пользователя Terix Terix 18 декабря 2008 в 15:12

В меню конфигурации полей типа "ссылка на ноду" есть возможность использовать view для составления списка нод для выбора. В этот view можно впихнуть всё, что нужно, в том числе значение любого поля.

Только надо помнить, что если использовать свой view для выбора узла, пункт Content types that can be referenced: перестаёт работать. Поэтому придётся определить тип нод в фильтре view.

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 18 декабря 2008 в 16:14

Спасибо за подробный ответ. Решил им воспользоваться, но что-то, видимо, упустил:
1. Создал новый вьюс, который у меня из страниц нужного типа достаёт значение поля competition_abbr, сортирует его по Name ASC и выводит в виде списка;
2. Посмотрел превью нового вьюса — выводится список, состоящий из одних аббревиатур;
3. Открыл на редактирование поле «Турнир» типа «ссылка на ноду» и выбрал пункт «View used to select the nodes:»;
4. В выпадающем списке нашёл свой вьюс competition_abbr и сохранил изменения.
5. Открыл нужную страницу матча на редактирование. Имеется выпадающее меню, каждый пункт которого теперь имеет вид «EPL - Заголовок: Премьер-лига», «FAC - Заголовок: Кубок Англии» и так далее. Выбираю, к примеру, первый пункт и сохраняю.
6. Открываю страницу того же матча на просмотр. Вижу «Турнир: EPL».

Судя по всему, я в Вашем объяснении упустил какой-то важный момент, но какой?

1. «Content types that can be referenced:» я оставил прежним, раз он всё равно не играет никакой роли при использовании вьюс в данном случае.
2. Пробовал разные виды «Display Fields» — всё то же самое, отображается заголовок со ссылкой на ноду/заголовок без ссылки и т.д.

Подскажите, пожалуйста, где ошибка?

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 12 января 2009 в 19:20

Попробую ещё раз поднять этот вопрос, а то за месяц так и не нашёл решения -( Как мне сделать, чтобы в итоге в ноду вставлялось значение поля, вытащенного мной через views?