Drupal Views Повторяющиеся значения, возвращаемые при использовании отношения - PullRequest
4 голосов
/ 24 марта 2010

У меня проблема с просмотром. У меня есть представление, и я передаю ему термин таксономии по имени. Затем я имею отношение к связанному узлу. Для моих выходных полей я возвращаю связанный заголовок и связанный текст. У меня, однако, есть дубликаты в моих результатах. Я стал отличным от да, но считаю, что это работает на возвращаемых узлах, а не на связанных узлах. Любые идеи, как я могу удалить дубликаты?

Обновление

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

SELECT DISTINCT(node.nid) AS nid,
    node_node_data_field_wine_company.title AS node_node_data_field_wine_company_title,
    node_node_data_field_wine_company.nid AS node_node_data_field_wine_company_nid 
FROM node node  
LEFT JOIN content_type_wine node_data_field_wine_company ON node.vid = node_data_field_wine_company.vid 
INNER JOIN node node_node_data_field_wine_company ON node_data_field_wine_company.field_wine_company_nid = node_node_data_field_wine_company.nid  
LEFT JOIN term_node term_node ON node.vid = term_node.vid INNER JOIN term_data term_data ON term_node.tid = term_data.tid 
WHERE term_data.name = 'test'
GROUP BY nid

Похоже, что я должен группировать по node_node_data_field_wine_company_nid или выбирать оттуда различные значения. Есть идеи?

Обновление

Это может быть невозможно при использовании обычных соперников. Ниже моя установка.

У меня есть таксономия, называемая Регион. Регион применяется к пользовательскому типу контента под названием Wine. Тип содержимого Wine содержит поле ссылки на узел типа компании. Компания является пользовательским типом узла.

У меня есть список всех моих регионов. Нажав на регион, я передам это в качестве аргумента представлению (название термина). Из этого региона я хочу вернуть все компании этого региона.

Чтобы получить это, мне нужно получить все предметы из Вина, которые имеют этот регион. Со всеми виноматериалами региона мне нужно получить уникальную ссылку на узел компании. Я тогда верну это.

Одним из способов может быть предоставление каждой компании региона (ей) для составления списка. Тем не менее, я бы предпочел, чтобы это было сделано автоматически из типа вина.

Есть идеи?

1 Ответ

1 голос
/ 25 марта 2010

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

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


Edit: Что касается опций для программного манипулирования видом, вы можете взглянуть на хуки модуля views . Для небольших корректировок результата запроса можно реализовать hook_views_pre_render() и манипулировать возвращенным набором результатов непосредственно в $view->result (то есть после выполнения запроса).

Однако для более крупных манипуляций (как в вашем случае) можно реализовать hook_views_query_alter() и настроить фактический запрос, прежде чем он будет использован для возврата набора результатов. Необходимо соблюдать осторожность, чтобы изменить только критерии сортировки или фильтрации, но при этом сохранить общую структуру возвращаемых данных (например, она все еще должна содержать все поля, ожидаемые представлением). Хотя этот подход дает огромную гибкость, необходимо помнить, что он хрупок в отношении последующих изменений, примененных к представлению - если определение представления изменяется таким образом, что изменяет построенный запрос, изменение, сделанное в hook_views_query_alter(), может больше не работать или вызвать странные результаты.

Хуки представлений запускаются для каждого вида, поэтому необходимо проверить правильность представления (и, в конечном счете, также отображение), прежде чем вносить какие-либо изменения в него.

...