Estou tentando obter uma união dos nós e comentários de um usuário classificados por "data de postagem". Esta postagem tem links para projetos de sandbox para o D6, mas não há nada para o 7.
Este post tem um exemplo do uso de hook_views_pre_execute () e um SQL UNION no D6. Isso não funciona para o D7 com visualizações 3.
Me deparei com o comentário de merlinofchaos
Como agora estamos usando o novo gerador de consultas do Drupal, a consulta é um objeto SelectQuery que você precisará modificar ou substituir. Consulte a nova camada de banco de dados do Drupal 7 para obter mais informações.
Alguém tem um exemplo de como fazer isso ou qualquer outra solução para combinar duas visualizações?
Respostas:
Aqui está um exemplo de trabalho e testado:
Isso funciona para a maioria das visualizações. No entanto, alguns plugins de estilo podem fazer coisas sofisticadas que não funcionam com essa técnica (módulo Calendário, estou olhando para você).
fonte
Você pode usar o módulo de manipuladores extras do Views para gerar consultas SQL UNION a partir de dois modos de exibição / exibição diferentes.
Um tutorial detalhado em drupal.org aqui
https://www.drupal.org/project/views_extra_handlers
fonte
Acabei usando db_query () para criar os UNIONs SQL e, em seguida, renderizando-os em um layout de tabela, incluindo pagers usando a função theme ().
Para o usuário, ele se parece com as visualizações padrão. O outro benefício foi que eu pude otimizar bastante a consulta. Estou mostrando "atividades do meu amigo" e, se você usasse modos de exibição para isso, criaria uma lista de seus amigos e a usaria na cláusula SQL "IN", que é muito lenta se você tiver mais de 50 ou 100 registros.
Eu poderia restringir essa lista de amigos apenas àqueles que foram conectados ao site nos últimos x dias.
Este é um exemplo de código:
fonte
Para referência futura, é assim que eu combinei duas visualizações com base na mesma tabela. Os mesmos princípios também devem ser aplicados em visualizações baseadas em tabelas diferentes com a mesma quantidade de campos.
No caso abaixo, apenas o ID é selecionado, pois o formato está definido como entidade renderizada. Mas se você optar por campos, sempre poderá adicionar campos fictícios adicionais à consulta que possui menos campos, como adicionei o carimbo de data / hora abaixo.
fonte
Eu imagino que é algo nesse sentido:
Embora eu não tenha testado.
Alguns links que podem ajudar:
http://api.drupal.org/api/drupal/includes!database!select.inc/function/SelectQueryInterface%3A%3Aunion/7
http://drupal.org/node/557318#comment-1991910
fonte
Me deparei com um módulo chamado Views Field View , que permite incorporar uma view como um campo em outra view. Ainda não testei isso ainda, mas pode ser útil para você.
fonte
O back-end EntityFieldQuery Views suporta a consulta de vários tipos de entidade ao mesmo tempo. Portanto, deve ser utilizável consultar nós e comentários. Os dois tipos de entidade usam uma
uid
propriedade para vincular seu autor, portanto, no nível da API, EntityFieldQuery :: propertyCondition () deve ser utilizável para selecionar os nós e comentários de um único usuário. Eu acho que as visualizações de back-end oferecem o mesmo recurso.fonte
Uma abordagem diferente poderia ser criar feeds de nós e comentários (com um filtro contextual do identificador do usuário no URL) e depois combinar os dois feeds em um novo feed e exibi-lo por data de postagem.
fonte
Global: campos PHP usados ? Você pode usá-los para unir uma vista que combina os dois.
Crie uma exibição do conteúdo com os campos Conteúdo: Título e Conteúdo: Comentários (excluídos da exibição).
Adicione um campo PHP que calcule qual é mais recente, a data da última atualização ou a data do último comentário do usuário e defina o valor do campo para essa data. Adicione esse campo como uma condição de classificação.
Adicione um campo semelhante que produz um link para o comentário ou para o nó.
Parece bom para mim!
fonte