Рейтинг:0

Как создать представление, показывающее пользователей, которые помечены И помечены текущим пользователем

флаг nl

Я пытаюсь отобразить список пользователей, которые отметили текущего пользователя и отмечены текущим пользователем. Итак, двусторонняя маркировка.

Я пытался использовать разные отношения и аргументы в представлениях, но, похоже, не могу правильно подобрать комбинацию. Какие-нибудь советы? Спасибо!

Вот моя конфигурация представлений из инструкций @pkros по запросу.

Посмотреть обзор

Посмотреть отношения

Просмотр контекстного фильтра

Кроме того, вот краткий скринкаст, показывающий проблему в действии... https://drive.google.com/file/d/1MOXKZSq_cjPRv6moim1a5ikKeeD8mjY9/view?usp=sharing

Рейтинг:0
флаг cn

Флаги односторонние, поэтому у вас не может быть «двухсторонних флагов».

В Drupal 8/9 флаг всегда имеет целевую сущность.

Таким образом, если пользователь A отмечает пользователя B, а пользователь B отмечает пользователя A, у вас есть два флага:

  • Флаг пользователя A пользователя B
  • Флаг пользователя B пользователя A

Я не могу придумать хороший способ сделать это в представлениях без специального кода.

Альтернативой может быть что-то вроде Флаг друга модуль, который реализует функцию «дружества» (или функцию взаимного пролистывания Tinder для сопоставления).

Реализовав подобную функциональность ранее в Drupal 7, в Drupal 8/9, я бы подумал о написании кода в _flagging_insert() хук, который проверяет, когда пользователь помечает другого пользователя, и определяет, пометил ли помеченный пользователь пометившего пользователя. Если это так, создайте объект (может быть узел со ссылками на объекты для обоих пользователей или пользовательский объект, если вы хотите получить фантазию) типа Друг или же Соответствовать или что-то еще, а затем отсортируйте совпадения таким образом в представлениях. Конечно, если пользователи могут снимать флаги друг с друга и нарушать совпадение, вы также должны добавить код для поддержки этого случая.

Рейтинг:0
флаг mx

Вот как вы можете сделать это с представлениями:

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

  2. Добавьте отношение флага и установите его на Включать только помеченный контент, ваше конкретное имя флага и Любой пользователь

  3. Добавить поле Логин пользователя от Пометка Категория (не категория пользователя)

    Теперь вы должны увидеть список всех помеченных «соединений». Поле имени пользователя показывает, какой пользователь был помечен, а поле Пометка пользователя показывает, кто их пометил.

  4. Теперь добавьте Логин пользователя Контекстный фильтр от Пользователь Категория и настройте ее:
    Когда значение фильтра НЕдоступно
    Укажите значение по умолчанию
    Идентификатор пользователя от вошедшего в систему пользователя
    Когда значение фильтра IS доступно или предоставлено значение по умолчанию
    Укажите критерии проверки
    Логин пользователя
    Единый идентификатор
    Настройте все остальные параметры в соответствии с вашими потребностями.

    Это показывает только «соединения», которые установлены с текущим пользователем.

  5. Удалите поле имени пользователя, так как оно вам больше не нужно, поскольку оно всегда показывает текущего пользователя.

Остается поле пользователя из контекста «Пометка», показывающее, кто пометил текущего пользователя, и в то же время этот пользователь был помечен текущим пользователем.

флаг nl
Я выполнил ваши шаги, но в выводе списка показаны только пользователи, которые пометили текущего пользователя (даже если текущий пользователь их не пометил). Хотите знать, нет ли еще одного шага, который мы пропустили?
флаг mx
Вы уверены, что правильно настроили Отношения? С "Любым пользователем"?
флаг nl
Да, так устроено. Если у меня есть текущий пользователь, снимите отметку с пользователя, который уже пометил текущего пользователя... этот пользователь все еще отображается в представлении выше. Вы тестировали это?
флаг mx
Да, у меня есть пример, который сработал, я написал ответ на его основе.
флаг mx
Можете ли вы добавить конфигурацию в вопрос, чтобы я мог увидеть разницу?
флаг nl
Привет, @pkros, я включил в вопрос конфигурацию своих представлений. Я даже пробовал совершенно новую установку Drupal по вашим инструкциям. Все еще сталкиваюсь с проблемой, упомянутой выше. Показаны только пользователи, которые отметили текущего пользователя. Не имеет значения, кого отметил текущий пользователь. Любые дополнительные советы? Спасибо!
флаг mx
Можете ли вы включить скриншоты вашей конфигурации Views? Необработанный экспорт не очень удобочитаем, и я не могу его импортировать, так как он зависит от вашей конкретной структуры за пределами представлений. При необходимости уменьшите окно и увеличьте шрифт при создании скриншотов, чтобы их было легче читать и не было много пустого места.
флаг nl
Хорошо, скриншоты добавлены. Также включено короткое видео, показывающее, как текущий пользователь снимает отметку с соответствующего пользователя, а вывод не меняется. Спасибо!
флаг nl
@pkros Любые дальнейшие отзывы? Ценю твою помощь.
флаг mx
Ах, он провалился, я постараюсь сжать его на этой неделе.
флаг nl
@pkros, просто хотел продолжить, если у вас есть еще совет. Такая неприятная проблема с моей стороны :). Спасибо!
флаг mx
Я выполнял обновления до D9, и мне еще предстоит кое-что сделать, тогда мне нужно откопать пример, чтобы я мог сравнить с вашим. Я не могу найти банкомат, он должен быть в резервной копии. завтра поищу.
флаг nl
Удачи в обновлении D9. Еще раз спасибо!
флаг mx
Я нашел свой пример, и кажется, что он работает не так, как я ожидал. Возможно, у меня есть комбинация флагов взаимного следования, которая заставила меня думать, что она отображается правильно. Теперь, когда я думаю об этом, странно, что я думал, что это работает, нет места, где два отмеченных направления сравниваются/сопоставляются. Я думаю, что это может быть решено с помощью Views Field View, потому что этот модуль позволяет вкладывать запросы, но я еще не пробовал, я взорвал сайт, пытаясь обновить композитор...
флаг mx
Вы используете существующий вид в качестве основы. Вы создаете новое отображение, которое будет использоваться в качестве поля Представления, строите его так же, как и существующие представления, только контекстный фильтр может нуждаться в настройке. Я думаю, вы могли бы управлять строкой, появляющейся с помощью контекстного фильтра во встроенном поле, чтобы исключить людей, у которых нет флага, идущего в противоположном направлении. Или вам может потребоваться переписать поле в базовом представлении, чтобы исключить их, если встроенное поле пусто, что-то в этом роде. Если я скоро исправлю свой сайт, я попробую и опубликую другой ответ.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.