Как я могу выработать эту точку зрения?

  • 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. То, что вы пытаетесь сделать, это фильтровать этот список пользователем, и вы можете фильтровать его с узла, на котором вы сейчас находитесь (или, более конкретно, на пользовательском ссылочном поле узла). Итак, вам нужно будет предоставить представления с аргументом, равным пользовательскому ссылочному полю узла.

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

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

    Где пользователь является полем пользовательских ссылок на каждой странице, называемой ссылкой пользователя 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» в вашем представлении.