Есть новостной сайт. На одной странице выводится несколько блоков из views (дисплеи одного view). Api 2. У новостей много различных полей по которым и выводится новости в данные блоки (различные наборы Filters).
Проблема в том, что в разных блоках на одной странице могут дублироваться те же новости (ноды). Есть идея воспользоваться views api, а имеенно hook_views_post_execute - получить последовательно для каждого блока массив nid (глобальный - пополняется для каждого блока уникальными nids чтобы в дальнейшем использоваться как фильтр в последующих блоках по порядку вывода на странице - т.к. блоки выводятся функцией в шаблоне) и для каждого последующего блока использовать hook_views_query_alter добавляя в критерии чтобы исключить массив nid - уже выведенных новостей.
Проблема в том что hook_views_post_execute - ведет себя непонятным образом заполняйй сразу глобальный массив nid для первого же встреченного блока, т.е. не получается последовательно заполнять этот массив и каждый раз использовать его в изменении запроса для каждого последующего блока. Подскажите как исправить. Или же может быть есть более легкий способ решения?
p.s. в поиске нашел только исключение дублей в одном и том же блоке или странице, а мне нужно чтобы в разных блоках (на одной и той же странице) не было материалов с одинаковыми nid
Комментарии
Раз всё равно вызываете вьюсы в коде, то:
- Используйте EntityFieldQuery() для фильтрации нужных материалов и получения айдишников нужных материалов.
- Для каждого последующего блока добавляейте исключения по айдишникам, которые уже есть чтоб решить вашу проблему с дубликатами.
- После того как получите наборы айдишников для каждого блока вызывайте свои вьюсы. Только во вьюсах уже уберите все фильтры, а добавьте аргументы по айдишникам.
$view = views_get_view('news');
$result = $view->execute_display('block_1', $args);
Разве в шестерке это есть?
А по каким критериям "фильтруются" материалы для разных блоков?
Упс, просмотрел версию вопроса.
Тогда не знаю... можно посмотреть sql запросы, которые генерят вьюсы и использовать их для получению айдишников по фильтрам.