Ваш анализ кажется верным в том смысле, что отличное относится к «оригинальным» узлам, а не к связанным. Таким образом, вы можете попытаться «перевернуть» конструкцию вашего представления, начиная с теперь «связанных» узлов, добавляя отношение к теперь «исходным» узлам и фильтруя результаты по их условиям. Последний пункт, в котором я не уверен, в том, что я не знаю, возможно ли применить термин «фильтр» к узлам, извлеченным через отношения, но это может стоить попробовать.
Если оказывается невозможным получить желаемые результаты с помощью функциональности «стандартных» представлений, существуют различные варианты управления представлением из пользовательского кода, но для этого потребуется более детальное знание сценария использования. (например, нужно ли работать с пейджером и тому подобным). Если похоже, что вам нужно идти по этому пути, вы можете дополнить свой вопрос описанием того, что именно вам нужно достичь.
Edit:
Что касается опций для программного манипулирования видом, вы можете взглянуть на хуки модуля views . Для небольших корректировок результата запроса можно реализовать hook_views_pre_render()
и манипулировать возвращенным набором результатов непосредственно в $view->result
(то есть после выполнения запроса).
Однако для более крупных манипуляций (как в вашем случае) можно реализовать hook_views_query_alter()
и настроить фактический запрос, прежде чем он будет использован для возврата набора результатов. Необходимо соблюдать осторожность, чтобы изменить только критерии сортировки или фильтрации, но при этом сохранить общую структуру возвращаемых данных (например, она все еще должна содержать все поля, ожидаемые представлением). Хотя этот подход дает огромную гибкость, необходимо помнить, что он хрупок в отношении последующих изменений, примененных к представлению - если определение представления изменяется таким образом, что изменяет построенный запрос, изменение, сделанное в hook_views_query_alter()
, может больше не работать или вызвать странные результаты.
Хуки представлений запускаются для каждого вида, поэтому необходимо проверить правильность представления (и, в конечном счете, также отображение), прежде чем вносить какие-либо изменения в него.