Essa é a quinta parte do tutorial de como criar um site de imobiliária com Drupal. Se você perdeu, aqui está o link para a parte anterior.

Introdução

Hoje vou falar do mais famoso módulo não-core do Drupal: o Views. Se você está chegando agora no mundo do Drupal, esse será um módulo que com certeza você vai usar, mais cedo ou mais tarde.

De forma breve o Views é um módulo que te auxilia em consulta no banco de dados. Ao invés de ter que fazer um código ou mesmo um módulo inteiro para uma simples consulta, você usa o Views e faz tudo via uma interface (hoje) amigável.

Essa é uma definição bem rasa do Views, uma vez que ele pode fazer muito, muito mais coisas.

Toda vez que você pensar que precisa fazer uma listagem de conteúdo, usuário, comentário, taxonomia etc. você está, na verdade, pensando: preciso criar uma view. No Drupal, uma view é, como dito, uma consulta. Na verdade você pode ter mais de uma consulta em uma view, como veremos abaixo.

Essa consulta pode listar campos (o que no SQL seria um SELECT por alguns campos), receber parâmetros ou filtros (o que no SQL seriam cláusulas de um WHERE), fazer referências (em SQL seriam joins) e pode ter um limite de itens (em SQL a cláusula LIMIT). O resultado também pode ser ordenado por alguns critérios (o que no SQL é um ORDER BY).

O resultado da view pode ser exibido de várias formas: listas HTML, listas de divs, um slideshow (como o que é mostrado no nosso tutorial), em tabelas HTML e mais uma infinidade de modos. Algumas exibições extras são adicionadas por outros módulos que você pode ir baixando à parte.

Conceitos básicos

O Views é um módulo muito grande e tem uma grande quantidade de conceitos, configurações e opções. Eu vou listar alguns aqui com uma breve descrição do que se trata para que possamos continuar.

Conceitos básicos do Views
Conceito Breve definição
View Agrega um ou mais display, geralmente por uma funcionalidade ou assunto. Uma view vai estar sempre relacionada a um tipo de objeto tais como conteúdo, usuário, taxonomia, etc.
Display

Cada view pode ter um ou mais display. Esses displays nada mais são do que a materialização dessa view com um conjunto de configurações e opções. Os displays são, de fato, o que o usuário vê. Existe um display especial que é o display padrão, que não precisa ser sempre materializado em algo visível. Ele serve como um guia para os demais displays e geralmente é o primeiro display criado.

Existem vários tipos de display. Vou tratar só de página e bloco.

Campos É a informação que é extraída do objeto em questão (que, como dito, pode ser um conteúdo, usuário, comentário, taxonomia etc.). Nem sempre você fará uso de campos, mas esse é o modo mais flexível de se exibir o conteúdo.
Critério de filtro São condições fixas que você define para que o seu objeto seja exibido. Por exemplo só exibir nodes publicados ou que tenham uma data de publicação até um período específico.
Critério de ordenação Como o nome diz, é como o nosso conteúdo será ordenado.
Filtros contextuais São valores que são passados para essa view (de diversas formas) e que irão servir para compor o filtro do conteúdo. Falarei mais desse item abaixo.
Relacionamentos Quando um objeto está relacionado a outro e você precisa trabalhar com esse segundo, você cria esse relacionamento. Dessa forma os campos do segundo objeto estão disponíveis para serem usados nos outros itens (filtros, campos e etc.).
Outras Existem outras várias opções que não irei cobrir aqui para não ficar mais enfadonho.

O nosso caso

No site que criei para esse tutorial montei duas views. Uma delas para tratar somente o slideshow de fotos do imóvel e uma outra para as demais listagens de imóveis. Essa separação é inteiramente a seu critério. Eu, geralmente tento agrupá-las por assunto. A lógica que utilizei para minha separação foi:

  • View galeria: lista somente um campo dos imóveis com um filtro contextual.
  • View Lista de imóveis: todas as listagens de imóveis (objeto completo) são feitas aqui.

Obviamente você não precisa concordar com a minha visão e nem mesmo fazer assim. O importante é que você tenha os displays contidos nessas views. Se você achar melhor criar uma view para cada display, não tem problema (quer dizer, vai virar uma bagunça, mas é possível).

View Galeria

Vou começar por essa view pois ela só possui um display do tipo bloco.

Você deve se lembrar de quando na parte 3 do tutorial eu comentei que o campo Galeria de imagens é criado por uma view e importado via Display Suite. Pois bem, essa é a view em questão. Aqui utilizei o módulo Views Nivo Slider (criado pelo nosso colega Pedro Faria) para exibir as imagens do imóvel numa bela galeria. Abaixo uma tabela com as configurações que utilizei e uma breve explicação.

View Galeria
Item Opção Descrição
Formato Views Nivo Slider Aqui escolhemos como será exibida nossa view. Como dito usei o Views Nivo Slider
Exibir Campos Escolhi a opção de campos pois só desejo exibir um campo: imagem
Campos Foto Escolhi a foto no formato desejado.
Critério de filtro Publicado e tipo = imóvel Só deve funcionar se o tipo de conteúdo for um imóvel e estiver publicado
Filtros contextuais Conteúdo: NID Esse é o identificador do nosso imóvel. Para funcionar corretamente, ao escolher esse campo você deve configurar a opção "Quando o valor do filtro NÃO está disponível" com "ID do conteúdo pela URL". Assim ele sempre pegará o ID daquele conteúdo sendo visualizado.

Uma vez que a view esteja salva você pode voltar nas configurações do Display Suite (vide parte 3) e adicionar um campo do tipo bloco com esse display. Assim você tem como ir às configurações de exibição de campos do seu imóvel e adicionar esse novo campo ao topo da exibição do imóvel. O resultado é a tela de cada imóvel com uma galeria mostrando todas as imagens.

View Lista de imóveis

Essa view é um pouco mais complexa que a primeira. Ela possui quatro displays que descrevo sucintamente abaixo.

Imóveis por tipo

Se você já viu o site demonstração que montei, verá que na página inicial há uma separação (feita com o módulo Panels e comentado mais para a frente) de imóveis por tipo. Esse display é responsável por exibir somente imóveis de um determinado tipo (casa, apartamento, etc.).

Isso é feito com um filtro contextual semelhante ao da view galeria acima. A diferença, é claro, está no campo. Ao invés de utilizar o campo Conteúdo: NID, utilizei o campo Conteúdo: Tipo do imóvel (esse campo, se você se lembra, nós criamos na parte 2).

Outra diferença é que não escolhi o formato Views Nivo Slider, mas sim Lista sem formatação, uma vez que vou simplesmente exibir os campos e não fazer slideshow.

Slideshow de imóveis

Esse display de bloco é muito semelhante ao da galeria. As diferenças são: não há filtro contextual pois vou mostrar todos os imóveis (limitados a 10 por vez); e vou exibir somente a primeira imagem de um imóvel.

A configuração para exibir apenas a primeira imagem do imóvel é feita no campo de foto. Há uma opção chamada "Multiple field settings" que você deve marcar o item "Mostrar todos os valores na mesma linha" e em seguida escolher um limite definido na opção "Mostrar X valor(s) começando de Y" conforme imagem abaixo.

Imagem com descrição

Encontre um imóvel

Esse display é o único que é do tipo página e, portanto, é o único que tem um endereço. Você pode dar o endereço que você quiser, desde que ele não exista (senão haverá um conflito). Esse display é utilizado como página de busca de imóveis. Defini alguns campos que gostaria de deixar o usuário utilizar para pesquisa e exibo uma lista de imóveis baseado nesses campos.

Para fazer o efeito de formulário de pesquisa você deve marcar nos critérios de filtro quais campos devem estar expostos para o usuário através da opção "Expor este filtro para visitantes, para permitir que eles o alterem". Para fazer exibição com checkboxes para o filtro "Tipo de imóvel" eu utilizei o módulo Better Exposed Filters que agrega algumas novas opções.

Um último detalhe foi que eu mandei os filtros expostos serem exportados para um bloco, ao invés de aparecer no topo da página. Você faz isso marcando a opção "Formulário exposto no bloco" como sim. Depois basta posicionar o bloco como achar melhor.

Imóveis por corretor

Semelhante a galeria, esse display foi usado para ser anexado a um tipo de conteúdo. Então ele é um display de bloco, que será usado no Display Suite e depois agregado a meu tipo de conteúdo Agente.

Esse display lista os imóveis de um corretor que é passado via Filtro Contextual com o campo Conteúdo: Agente. Assim toda vez que você estiver vendo um agente esse display é executado e lista os imóveis dele. A posição onde esses imóveis irão aparecer você define na configuração de exibição de campos do seu Agente.

Finalizando

O Views é um dos, senão o mais, poderoso dos módulos para o Drupal. Praticamente qualquer site que você vá fazer precisa dele e é de suma importância que você aprenda usá-lo.

É importante notar que os usos dado aqui são simples mas envolvem conceitos importantes. Certamente em sites mais complexos, novos elementos e talvez até alguns módulos extra serão necessários para se obter o resultado desejado. Por exemplo, não cheguei a usar nenhum relacionamento, mas esse é um dos recursos mais importantes do Views. Talvez num tutorial futuro eu o aborde.

Espero que agora as coisas estejam fazendo um pouco mais de sentido.

Acredito que a próxima parte será a penúltima dessa série de tutoriais e assim teremos o site inteiro coberto.

Até semana que vem.