Tenho comentários sobre nós que são categorizados por termos. Preciso mostrar uma visão dos termos e se há novos comentários em qualquer um dos nós com os quais o termo está marcado.
Então, se eu tiver o seguinte:
Term1
-NodeA (has new comments)
-NodeB (has new comments)
Term2
-NodeC (no new comments)
-NodeD (no new comments)
Term3
-NodeE (no new comments)
-NodeF (has new comments)
Term4
Eu preciso da minha visão para ficar assim:
Term1 – new comments!
Term2
Term3 – new comments!
Term4
Primeiro, tentei fazer uma visualização dos comentários para incluir o novo campo de comentários e usar relacionamentos para mostrar os termos. No entanto, se um termo não tiver nós ou comentários (Term4 no meu exemplo), preciso que o termo ainda seja exibido.
Então tentei fazer uma visualização dos termos. Adicionei os relacionamentos 'Termo de taxonomia: conteúdo com termo' e o campo 'Conteúdo: novos comentários' que usa esse relacionamento. Isso mostra o número de novos comentários conforme o esperado. Isso me fornece resultados duplicados (que podem ser corrigidos com os campos de agrupamento), mas inesperadamente também oculta os termos que não têm comentários ou nós.
Estou fazendo isso da maneira certa e, em caso afirmativo, como posso impedir que os termos 'vazios' sejam ocultos?
ATUALIZAÇÃO Atualizei o núcleo D e alguns módulos que tinham novas versões (mas não exibições). A visualização funciona bem com o relacionamento 'Configurar relacionamento: termo de taxonomia: conteúdo com termo' quando o campo é 'Conteúdo: título (título)'. No entanto, quando adiciono o campo 'Conteúdo: novos comentários', os termos que não têm comentários ficam ocultos.
UPDATE Tentei o seguinte em um campo de visualizações:
if(intval($data->node_new_comments) > 0) {
if(!array_key_exists($data->tid, $static)) {
print "new comments !";
$static[$data->tid] = 1;
}
} else {
print "here you do whatever you want when there's no new comment";
}
ATUALIZAÇÃO - por 'novos comentários', quero dizer comentários que o usuário conectado não leu. Este é um campo padrão nas visualizações. Preciso disso em vez de uma data arbitrária cortada. Desculpe por qualquer confusão.
Taxonomy term: Term name
e não éContent: -term vocabulary-
(erro fácil de cometer!) 4) Você vê a mesma coisa se criar uma nova visualização dos Termos de Taxonomia do zero apenas com o relacionamentoTaxonomy Term: Term Name
eContent: New Comments
?Respostas:
Isso funciona para mim. Eu tenho uma visão de termo que mostra o campo nome do termo e meu código adiciona o novo sinalizador de comentário após o nome do termo.
O código entra em um módulo personalizado.
Você precisa alterar para VIEW_NAME para seu nome de exibição e TAXONOMY_FIELD_NAME para o nome do seu campo (como tags de campo, por exemplo).
fonte
history
tabela contém dados de nós de leitura por uid.A adição do campo 'Conteúdo: novos comentários' adiciona um valor
INNER JOIN
à tabela node_comment_statistics, que pode ser a origem dos problemas que você está enfrentando. (Por exemplo, se não houver entradas para NodeC, NodeD e NodeE em node_comment_statistics por algum motivo, os termos não serão mostrados devido aJOIN
seremINNER
um.)A reconstrução de node_comment_statistics ajuda?
fonte
Aqui está um esboço de uma resposta que o levará quase todo o caminho até lá, eu acho. Comece criando uma exibição de nós e adicione a taxonomia e o tempo do comentário mais recente como campos.
Agora ative a agregação para a visualização e defina a agregação para o campo taxonomia como "agrupar resultados juntos", na coluna "tid".
Altere a configuração de agregação para o campo de tempo do comentário para "Máximo".
Agora você deve ter uma visualização que lista todos os seus termos de taxonomia (pelo menos aqueles que possuem conteúdo) com a data do último comentário. A etapa final será processar o registro de data e hora do comentário em um gancho de visualizações ou tema para torná-lo exibido conforme necessário, o que deve ser relativamente simples.
fonte
Você deve fazer outra consulta primeiro, para recuperar os termos que possuem nós com novos conteúdos.
Fui ajudado por esta discussão .
Como eu disse, coloquei tudo isso nos campos php; se você tiver tempo, será melhor colocá-lo em um módulo, em um views_query_alter ou então.
Adicione um campo php e, no código de configuração , acesse a lista de termos das marés que têm novo conteúdo:
Agora no código de saída , verifique se seu termo está nesta matriz:
É o mais leve que vejo, mesmo que a consulta possa ser pesada se você tiver uma grande quantidade de nós e comentários.
EDIT: Devo lembrar que colocar php no sql com views php NÃO é uma boa prática , convido você a colocar tudo isso em um módulo personalizado em hook_views_query_alter o mais rápido possível.
fonte