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
– это пользователь, на l_user
делается ссылка в списке, в SELECT stories WHERE story.s_user = this list.l_user
l_user
это представление.
Пока представление фильтруется по node:type story
но я не уверен, что использовать (arguments / filter и т. Д.), Чтобы связать story s_user
с list l_user
.
Это можно сделать с помощью Views?
Вы можете сделать это с помощью аргумента Views. То, что вы пытаетесь сделать, это фильтровать этот список пользователем, и вы можете фильтровать его с узла, на котором вы сейчас находитесь (или, более конкретно, на пользовательском ссылочном поле узла). Итак, вам нужно будет предоставить представления с аргументом, равным пользовательскому ссылочному полю узла.
Для этого настройте свое представление как обычно и как будто вы показываете узел каждого пользователя. Таким образом, у вас может быть вид, похожий на:
Где пользователь является полем пользовательских ссылок на каждой странице, называемой ссылкой пользователя Story .
Теперь в разделе Аргументы добавьте аргумент для ссылки Content: Story . Теперь в представлении будут отображаться только узлы, которые публикуются пользователем, указанным в аргументе. Проблема заключается в том, что в блоке нет аргументов для указания: вам нужно предоставить аргумент по умолчанию.
Еще на панели конфигурации аргументов для справочной информации Content: Story выберите « Предоставить аргумент по умолчанию в разделе« Действие », если аргумент отсутствует . Вы получите множество опций, но ни один из них не является тем, что вы ищете: поле ссылки пользователя текущего узла.
Поэтому вам нужно будет использовать действие кода PHP и использовать следующий код:
$node = node_load(arg(1)); return $node->field_list_user[0]['uid'];
Это загружает узел , основанный на идентификатор узла , извлеченного из пути текущей страницы и возвращает пользователю опорного поля этого узла (изменение field_list_user
на имя опорного поля пользователя в списке узлов).
Поэтому, если я нахожусь на узле 17, в поле пользовательских ссылок которого указано пользователь 4, аргумент, который будет передан в представление, будет 4. В представлении будут показаны только узлы в представлении, у которых есть ссылки на пользователя, которые также равны 4.
Сохраните представление, создайте отображение блока и поместите его туда, где хотите. Когда вы посещаете страницу узла с пользовательским ссылочным полем, блок будет заполняться указанными узлами пользователя.
Я бы предложил получить все ссылки на пользователя из узла списка и передать их в аргумент 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» (вы можете увидеть имя машины, когда вы наводите курсор на дисплей). Это отображение должно быть представлением узла с фильтром типа «история» узла и аргументом контента user_l, установленным для принятия нескольких значений. В этом коде есть почти наверняка ошибка, но я знаю, что общая концепция работает, как я это делал несколько раз.
Чтобы решить эту проблему, вам необходимо загрузить NodeReferrer. http://drupal.org/project/nodereferrer
Она обеспечивает встречную часть для опорного узла поля CCK в.
Затем вы можете вызвать поле «Node referrer» в вашем представлении.