Я пытаюсь получить объединение пользовательских узлов и комментариев, отсортированных по «дате публикации». Этот пост ссылается на проекты песочницы для D6, но нет ничего для 7.
В этом посте есть пример использования hook_views_pre_execute () и SQL UNION в D6. Это не работает для D7 с представлениями 3.
Я наткнулся на комментарий merlinofchaos
Поскольку теперь мы используем новый генератор запросов Drupal, запрос представляет собой объект SelectQuery, который вам придется изменить или заменить. Посмотрите новый слой базы данных Drupal 7 для получения дополнительной информации.
У кого-нибудь есть пример того, как сделать это или любое другое решение для объединения двух представлений?
Ответы:
Вот рабочий и проверенный пример:
Это работает для большинства просмотров. Однако некоторые плагины стиля могут делать причудливые вещи, которые не будут работать с этой техникой (модуль календаря, который я смотрю на вас).
источник
Вы можете использовать модуль дополнительных обработчиков Views для генерации запросов SQL UNION из двух разных представлений / дисплеев.
Подробное руководство на drupal.org здесь
https://www.drupal.org/project/views_extra_handlers
источник
В итоге я использовал db_query () для создания SQL UNION, а затем преобразовал его в макет таблицы, включая пейджеры, используя функцию theme ().
Для пользователя это выглядит как вид по умолчанию. Другое преимущество состояло в том, что я мог много оптимизировать запрос. Я показываю «действия моего друга», и если бы вы использовали для этого представления, он создал бы список ваших друзей и использовал бы его в предложении SQL «IN», что очень медленно, если у вас более 50 или 100 записей.
Я мог бы сузить этот список друзей только до тех, кто зашел на сайт за последние x дней.
Это пример кода:
источник
Для дальнейшего использования, вот как я объединил два представления на основе одной таблицы. Те же принципы должны применяться к представлениям, основанным на разных таблицах с одинаковым количеством полей.
В нижеследующем случае выбирается только идентификатор, так как формат установлен для визуализируемого объекта. Но если вы работаете с полями, вы всегда можете добавить дополнительные фиктивные поля в запрос, который имеет меньше полей, как я добавил временную метку ниже.
источник
Я представляю что-то вроде этого:
Хотя я не проверял это.
Некоторые ссылки, которые могут помочь:
http://api.drupal.org/api/drupal/includes!database!select.inc/function/SelectQueryInterface%3A%3Aunion/7
http://drupal.org/node/557318#comment-1991910
источник
Я натолкнулся на модуль с именем View Field View , который позволяет вам встраивать вид как поле в другой вид. Я еще не пробовал это сам, но это может быть полезно для вас.
источник
EntityFieldQuery Views Backend поддержки запросов для нескольких типов объектов одновременно. Таким образом, он должен быть пригоден для запроса как узлов, так и комментариев. Оба типа сущностей используют
uid
свойство для связи с их автором, поэтому на уровне API EntityFieldQuery :: propertyCondition () должно использоваться для выбора узлов и комментариев от одного пользователя. Я думаю, что бэкэнд представлений обеспечивает ту же функцию.источник
Другой подход может заключаться в создании каналов узлов и комментариев (с контекстным фильтром идентификатора пользователя в URL-адресе), а затем объединить два канала в новый канал и отобразить его по дате публикации.
источник
Используется Global: поля PHP ? Вы можете использовать их, чтобы соединить клейкой лентой вид, который объединяет их.
Создайте представление содержимого с полями Content: Title и Content: Comments (исключено из отображения).
Добавьте поле PHP, которое вычисляет, что является более поздним, дату последнего обновления или дату последнего комментария пользователем, и установите значение поля равным этой дате. Добавьте это поле в качестве условия сортировки.
Добавьте аналогичное поле, которое выводит либо ссылку на комментарий, либо на узел.
Это звучит хорошо для меня!
источник