Como prometido semana passada, essa é a segunda parte do tutorial sobre como criar um site de imobiliária com o Drupal. Se você perdeu a primeira parte, você pode ver aqui.

Instalação

Nesse tutorial eu não vou cobrir a instalação de módulos, temas e nem a instalação do Drupal. Vou comentar apenas quais módulos instalei e vou dar uma passeada nas configurações que fiz para cada módulo. Se você ainda não sabe como instalar o Drupal você pode aprender no vídeo que gravei aqui. Se você não sabe como instalar módulos e temas você pode consultar a documentação oficial.

Arquitetura

Uma vez que você tenha o Drupal instalado e funcionando você já tem 2 tipos de conteúdo criados: Artigo e Página. Esses são os dois tipos básicos do Drupal e nós não os usaremos na estrutura do nosso site. Eventualmente você pode querer utilizar esses dois tipos para um blog ou páginas institucionais e por isso é importante mantê-los.

Nós vamos criar dois tipos novos de conteúdo. Um deles será um tipo chamado Imóvel que irá armazenar as informações do nosso imóvel. Esse é o tipo mais importante para o nosso site. O outro tipo que criaremos se chama Agente. Esse segundo tipo vai funcionar como um contato para um dado imóvel. Você pode imagina-lo como sendo uma imobiliária ou um corretor de imóveis que irá vender ou alugar aquele imóvel.

É interessante notar que essa é uma forma de organizar sua informação. Talvez você possa pensar em outras. A beleza do Drupal está na liberdade que você tem para personalizar como você achar melhor. No entanto é fundamental que você analise bem a sua arquitetura para evitar dores de cabeça no futuro. Mudar a estrutura é sempre possível, mas isso sempre vai implicar em mais configuração e geralmente um efeito em cadeia.

Agente

Um agente pode ser responsável por um ou vários imóveis. Um agente também pode ter várias formas de contato como telefone comercial, celular, site etc. Você pode ter vários agentes sem ter relacionamento com nenhum imóvel, mas não iremos permitir imóveis sem um agente.

Campos e módulos usados no Agente
Campo Módulo Descrição
Nome Texto (core) Usaremos o clássico campo de título do Drupal como o nome do nosso agente.
Logo Image (core) Um campo de imagem para conter a logo.
Biografia Texto longo (core) O campo que geralmente é o "corpo" de um artigo usaremos como biografia.
Telefone Phone Para armazenar o telefone utilizaremos o módulo Phone.
Celular Phone Mesma coisa para o celular.
Site Link Para armazenar o site utilizaremos o módulo Link.

Uma pequena nota: o módulo Phone ainda não suporta os telefones com 9 dígitos de São Paulo. Eu enviei um patch que ainda não foi aplicado para resolver esse problema.

Como você pode ver acima, utilizamos 6 campos e 3 deles foram feitos com módulos extra. Você pode está se perguntando o motivo de eu utilizar os módulos Phone e Link e não campos de texto que são padrão do Drupal. A questão é que esses módulos contém configurações e validações específicas para esses tipos de dado. Por exemplo o módulo Phone só aceita números de telefone, e quando os exibe o faz já com tudo formatado.

Criação de um agente:

Tela de criação de agente

Estrutura de campos de um agente:

Estrutura do tipo Agente

Configurações do campo de telefone:

Estrutura do campo do tipo phone

 

Imóvel

O tipo imóvel é um pouco mais complexo que o tipo Agente. Uma vez que o nosso negócio é gestão de imóveis, ele é o nosso objeto principal. A sua estrutura deve comportar todas as informações pertinentes a um imóvel. No meu modelo escolhi alguns campos que acho adequados quando imagino alguém indo buscar um imóvel. Vejamos os campos que utilizei:

Campos e módulos usados no Imóvel
Campo Módulo Descrição
Título Texto (core) Campo de título. Não faz muito sentido para um imóvel, mas pode servir como propaganda.
Código Texto (core) Um campo para armazenar um código. Pode ser usado em buscas.
Descrição Texto longo (core) Descrição detalhada do imóvel
Fotos Imagem (core) Número ilimitado de fotos de um imóvel.
Tipo de imóvel Listagem (core) Define se é uma casa, apartamento, terreno, etc.
Modalidade Listagem (core) Define se é um imóvel para aluguel ou venda ou os dois.
Endereço Address Field Usei o Address Field pois ele já provê o endereço completo o os dados armazenado são a base para o mapa.
Área total Ponto flutuante (core) Área total do imóvel
Área útil Ponto flutuante (core) Área privativa
Preço Ponto flutuante (core) Preço em reais.
Preço por m² Computed Field O Computed field faz um cálculo dividindo o preço pela área total e nos dá o prexo por m².
Ano de construção Inteiro (core) O ano que o imóvel foi construído.
Quantidade de quartos Inteiro (core) Quantos quartos tem no imóvel.
Quantidade de banheiros Inteiro (core) Quantos banheiros tem no imóvel.
Vagas de garagem Inteiro (core) Quantas vagas de garagem.
Mapa Geofield O Geofield gera um mapa baseado em vários tipos de dado. Aqui usamos o endereço do imóvel.
Agente Entity Reference O Entity Reference no Drupal 7 faz o papel do Node Reference no Drupal 6 só que para qualquer entidade.

Também enviei um patch para o Address Field para que ele aceite a formatação dos endereços brasileiros corretamente.

O interessante a se observar no tipo imóvel é que ele tem 2 campos que o usuário não preenche: Preço por m² e Mapa. Esses dois campos são derivados de outros campos. Como explicado acima, o Preço por m² calcula uma informação utilizando Computed Field e o Mapa (Geofield) consome os dados geográficos gerados pelo Endereço (Address Field).

Se você observar bem nas screenshots abaixo vai perceber que alguns campos como as áreas e os quartos, banheiros e vagas de garagem estão agrupados. Isso é feito utilizando o módulo Field Group. Esse módulo provê o agrupamento de campos, tanto na tela de criação/edição quanto na tela de exibição. Isso é muito útil quando você tem informações semelhantes e que acha necessário organizar melhor na tela.

Criando um imóvel

Criando um imóvel

Estrutura de um imóvel

Estrutura de um imóvel

Configurações

Como disse, não vou comentar tudo que se pode configurar. Escolhi alguns itens que acho interessante.

Endereço

Como dito, o campo endereço foi criado usando o Address Field. Esse módulo te dá a possibilidade de adicionar um campo de endereço já sub-dividido em Logradouro, Cidade, CEP, Estado e país (opcional). Ele também salva essas informações no formato xNAL. O interessante é que você pode utilizar esse campo para múltiplos países, e ele irá renderizar o conjunto de campos de acordo com o país. O fato de gravar os dados no formato xNAL é que o torna exportável para mapas.

O módulo Address Field, na sua versão atual, não está bem adequado para o endereço brasileiro, por isso envie esse patch para melhorar um pouco.

Preço por m²

Esse campo, como dito acima, é um campo processado com o módulo Computed Field. Esse módulo permite que você pegue o conteúdo de outros campos e faça processamento e apresente essas informações. É muito útil quando você já tem a informação mas ainda requerem cálculos para exibir e você não quer criar um módulo só para isso. Abaixo você pode ver o código que utilizei:

 0)  {
  $entity_field[0]['value'] = number_format(($preco / $area), 2, ',', '.');
} else {
  $entity_field[0]['value'] = 0;
}

Mapa

Esse campo, como descrito, é usado para exibir o mapa com o endereço provido pelo campo de endereço. Ele tem algumas configurações mas as mais importantes são:

  • Geocode from field - que você deve escolher de qual campo virá a informação de endereço.
  • Geocoder - qual serviço de mapa você vai usar para renderizar o mapa em si.

Agente

Esse campo é o que faz o link entre um imóvel com o Agente. O que é importante configurar nesse módulo é:

  • Target type - O tipo de entidade ao qual devemos fazer link. No caso o nosso agente é um node, então é isso que escolhemos.
  • Entity selection mode - Como você quer fazer para encontrar o conteúdo. Usei o Single para não precisar usar uma view.
  • Target bundles - Como escolhemos o node como target type, aqui irá listar apenas os tipos de node o que iremos escolher agente, já que esse é o tipo que desejamos fazer relacionamentos.

Conclusão

O ponto que você deve dar mais atenção na hora de criar um site é a arquitetura. Saber escolher os campos e os tipos de campos é fundamental para evitar retrabalho e dores de cabeça no futuro. Existem módulos para vários tipos de campos que facilitam nossa vida. É muito importante você dar uma olhada nos repositórios oficiais do Drupal para encontrar aqueles que melhor se adequem às suas necessidades.

Nós vamos parar por aqui e semana que vem continuamos com um novo tópico. Lembro que você pode acessar o site de demonstração da imobiliária aqui. Se você tiver alguma dúvida, envie um comentário que irei respondendo por aqui.

Até semana que vem.

Update: A parte 3 já está no ar.