Как я могу выработать эту точку зрения? - PullRequest
2 голосов
/ 13 августа 2010
  • List -> l_user У меня есть узел List, в котором есть поле для ссылки на пользователя (l_user).
  • Story -> s-user У меня есть узлы Story, в которых также есть пользовательполе ссылки (s_user).
  • Нет прямой связи между List и Story.

Я хочу добавить представление к List, в котором перечислены все истории, ссылающиеся на того же пользователя,list ссылки.По сути, что-то вроде SELECT stories WHERE story.s_user = this list.l_user и l_user - это пользователь, на которого есть ссылка в списке, к которому относится это представление.

Пока представление фильтруется по node:type story, но я не уверен, что использовать (аргументы/ filter и т. д.), чтобы связать story s_user с list l_user.

. Возможно ли это с помощью Views?

Ответы [ 3 ]

5 голосов
/ 14 августа 2010

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

Чтобы сделать это, настройте ваше представление как нормальное, как если бы вы показывали каждый пользовательский узел.Таким образом, вы можете иметь вид, подобный следующему:

  • Страница 1 (пользователем 1)
  • Страница 2 (пользователем 1)
  • Страница 3 (пользователем 2)
  • Страница 4 (от пользователя 2)
  • Страница 5 (от пользователя 1)

Где пользователь - это поле ссылки на пользователя на каждой странице, которое называется Ссылка пользователя Story .

Теперь, под Аргументы добавить аргумент для Содержимое: Ссылка пользователя Story .Теперь в представлении будут отображаться только те узлы, которые опубликованы пользователем, указанным в аргументе.Проблема в том, что в блоке нет аргумента для указания: вам нужно предоставить аргумент по умолчанию.

Все еще на панели конфигурации аргумента для Содержимое: ссылка на пользователя Story , выберите Укажите аргумент по умолчанию в Действие, которое нужно выполнить, если аргумент отсутствует .Вы получите множество вариантов, но ни один из них не является тем, что вы ищете: поле ссылки на текущий узел.

Так что вам нужно будет использовать PHP-код действие и используйте следующий код:

$node = node_load(arg(1));
return $node->field_list_user[0]['uid'];

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

Так что, если я нахожусь на узле 17, чье поле ссылки пользователя указывает пользователя 4, аргумент, который будет передан представлению, равен 4. В этом представлении будут отображаться только те узлы в представлении, которые имеют пользовательские ссылки, которыетакже 4.

Сохраните вид, создайте отображение блока и разместите его в любом месте.Когда вы посещаете страницу узла с полем ссылки пользователя, блок заполняется ссылочными узлами пользователя.

3 голосов
/ 14 августа 2010

Я бы предложил получить все пользовательские ссылки из узла списка и передать их в аргумент views.Таким образом, ваш код будет выглядеть примерно так (не проверено):

$user_ids = array();
foreach ($list_node->l_user as $user_reference) {
  $user_ids[] = $user_reference['uid'];
}
$view = views_get_view('list_view');
return $view->preview('block_1', array(implode(',', $user_ids));

Предполагается, что у вас есть представление с именем «list_view» с отображением с именем «block_1» (вы можете увидеть имя машины, когда вы наводите курсор мыши надисплей).Это отображение должно быть представлением узла с фильтром типа узла 'story' и аргументом содержимого user_l, установленным для нескольких значений.В этом коде почти наверняка есть ошибка, но я знаю, что общая концепция работает, как я делал это несколько раз раньше.

2 голосов
/ 13 августа 2010

Для решения этой проблемы вам необходимо скачать NodeReferrer. http://drupal.org/project/nodereferrer

Предоставляет ответную часть для справочного поля узла CCK.

Затем вы можете вызвать поле «Рефере узла» в вашем представлении.

...