O que são as Entidades no Drupal 7

Talvez você já tenha ouvido falar sobre "entidades" no Drupal 7 e se perguntado o que elas são e como você poderia trabalhar com elas. A API de Entidades está se tornando mais popular à medida que os membros da comunidade entendem que podem criar soluções muito mais leves e flexíveis com ela.

Muitas vezes nós comparamos a criação de um sites em Drupal com um dos brinquedos favoritos das crianças: o LEGO. Nós podemos construir Tipos de entidade (Entity type), que permitem a criação de Pacotes (Bundles) aos quais podemos adicionar Campos (Fields) e, em seguida, criar as Entidades (Entities). O objetivo deste post é explicar as relações entre os Tipos de entidade > Pacotes > Campos > Entidades. Esta foi uma das mudanças mais importantes do Drupal 7 e que possibilitou incorporar componentes/funcionalidades de alguns dos módulos mais amados pela comunidade - como o CCK - ao núcleo do sistema.

A ilustração abaixo mostra alguns exemplos de Tipos de entidades existentes no Drupal 7, com algumas Entidades de exemplo:

Tipos de entidade (Entity type)

Originalmente, o sistema de campos no Drupal era utilizado somente em Tipos de conteúdo. Agora, graças à API de Entidade, podemos adicionar campos à outras coisas. Isto torna o Drupal altamente flexível. Uma entidade é uma abstração útil para agrupar campos. Vamos considerar alguns exemplos de entidades:

  • Nodes (conteúdo)
  • Comentários
  • Termos de taxonomia
  • Perfis de usuário

Você também pode criar novos tipos de entidades, quando as opções acima não atenderem às suas necessidades. Para mais informações, leia sobre como usar o hook_entity_info e extender com a API de Entidade: entity_crud_hook_entity_info.

Pacotes (Bundles)

Os Pacotes são uma implementação de um tipo de entidade para o qual os campos podem ser anexados. Você pode considerar os pacotes como subtipos de uma entidade. No caso dos nodes, por exemplo, você pode gerar subtipos como artigos, blogs, produtos etc. No entanto, nem todos os tipos de entidade têm pacotes por padrão (embora eles possam ser implementados utilizando a API de Entidades). Os usuários, por exemplo, não têm pacotes, então nós não podemos criar novos tipos de usuário nativamente.

Com os pacotes, você pode criar tantos subtipos quanto desejar. Em seguida, utilizando o sistema de Campos, você pode adicionar campos extras a esses pacotes, como por exemplo um campo de upload de arquivo para artigos, campos de localização para usuários etc.

Campos (Fields)

Um campo é um pedaço reutilizável de conteúdo. Em termos técnicos, cada campo é um tipo de dados primitivo, com validadores customizados, widgets para edição e formatadores para exibição. Para uma abordagem mais técnica, leia o guia da API de Campos do Drupal7 para desenvolvedores.

O que é importante saber é que os campos podem ser adicionados a qualquer um dos pacotes (ou tipos de entidades) para ajudar a organizar seus dados. Digamos, por exemplo, que você crie um tipo de conteúdo com um único campo de texto (textarea) não-estruturado e use o HTML para estruturar parte dos dados, como o campo de sumário/teaser por exemplo. Isso tornaria mais difícil, por exemplo, controlar a sua exibição ou fazer conexões/relacionamentos entre diferentes tipos de conteúdo. Este é o motivo pelo qual o uso de Campos é essencial.

Entidade (Entity)

Uma entidade seria uma instância de um tipo de entidade específica, como um post de blog, um comentário ou um termo de taxonomia.

Você pode usar a função entity_load para carregar qualquer entidade. No entanto, o núcleo do Drupal 7 não fornece uma função para salvar ou apagar entidades. Felizmente o módulo Entity API fornece essas funcionalidades que faltaram no núcleo.

Conclusão

Se você estiver familiarizado com o Drupal 6 e for novo no Drupal 7, isso vai soar como uma grande novidade. No Drupal 6 e versões anteriores, os usuários e os comentários, por exemplo, não tinham o mesmo poder que os nodes (conteúdos). Nativamente eles não podiam ter traduções, campos personalizados, controle de revisões etc. Isso também significa que sistemas como o Views, que fazem seleção de campos para criar listagens personalizadas, não funcionavam tão bem com os comentários e usuários quanto com os nodes. Até foram criados alguns projetos com objetivo de transformar os comentários e usuários em nodes, a fim de possibilitar que tais funcionalidades fossem implementadas a eles. Porém, isso significava que todas as informações adicionais do objetto node eram adicionadas aos comentários. E eu, particularmente, sempre me incomodei com isso.

Como solução, a comunidade criou esta abstração com base no que era comum entre esses diferentes modelos de tipos de entidades. Deste modo, a API de Entidade permite soluções mais leves e flexíveis. Hoje já existem muitos módulos que baseiam suas soluções em entidades, e outros ainda estão sendo desenvolvidos, o que torna muito mais fácil o relacionamento entre os dados e torna a arquitetura muito mais flexível.

Como dito anteriormente, o módulo Entity API estende a API de entidade do núcleo Drupal, a fim de proporcionar uma forma unificada para lidar com as entidades e suas propriedades. Além disso, ele oferece uma entidade controladora para CRUD, o que ajuda a simplificar a criação de novos tipos de entidades. Leia mais sobre como usar o módulo Entity API em seus projetos.

Este post foi traduzido e adaptado do original An Introduction to Entities. Se você tiver qualquer sugestão ou opinião sobre ele, deixe seu comentário abaixo.

Compartilhe este conteúdo

Precisa de ajuda com Drupal?
Estamos ansiosos para saber mais.