# Drupal

Drupal é um framework modular e um sistema de gestão de conteúdos (CMS) escrito em PHP. O Drupal permite criar e organizar conteúdo, manipular a aparência, automatizar tarefas administrativas e definir permissões e papéis para usuários e colaboradores.
Em março de 2022, a comunidade Drupal tinha mais de 1,39 milhões de membros, incluindo 124 000 utilizadores que contribuíam ativamente, o que resultou em mais de 50 000 módulos gratuitos que ampliam e personalizam a funcionalidade do Drupal, mais de 3 000 temas gratuitos que alteram o aspeto do Drupal e, pelo menos, 1400 distribuições gratuitas que permitem aos utilizadores configurar rápida e facilmente um Drupal complexo e específico em menos passos.
Por ser desenvolvido em PHP, o Drupal é independente de sistema operacional. No entanto, requer um servidor HTTP compatível com PHP, como o Servidor Apache e um Servidor de banco de dados como o MySQL, recomendado para seu funcionamento.
O Drupal é comumente descrito como um Framework de Gerenciamento de Conteúdo, pois além de oferecer as funcionalidades básicas de um CMS ele também implementa uma série de APIs robustas e apresenta uma estrutura modular que facilita o desenvolvimento de módulos extensivos.
Esta característica é tão marcante que a comunidade de desenvolvedores é bem expressiva.

## Nome e Mascote

O nome Drupal deriva da palavra “druppel” do holandês, que significa "gota" ("drop" em inglês). O criador Dries Buytaert pensou no cair da chuva, gotas. Dries, na verdade queria a palavra “dorp” ("vila" em holandês, numa referência a comunidade de usuários), mas quando foi procurar o domínio, digitou errado e achou que soava melhor ainda. O projeto começou em 2000. O mascote azul em forma de gota chama-se Druplicon.

## Desenvolvimento

Por ser um projeto de software livre, qualquer pessoa pode ver o funcionamento do Drupal, fazer modificações, redistribuir com ou sem modificações, além de poder, propor mudanças no projeto principal. Tudo isso de acordo com a licença GPL, da GNU. A comunidade Drupal é ativa e prestativa. Vários módulos com funções importantes foram criados por usuários comuns.
Sendo uma plataforma de sites dinâmicos, o Drupal integra muitos dos recursos populares de sistemas gerenciadores de conteúdo, blogs, ferramentas colaborativas e software de comunidades baseado em discussões em um único pacote fácil de usar, sendo livre e gratuito para download e uso.
Habilitando e configurando módulos distintos, um administrador pode desenvolver um site único, que pode ser usado para uma combinação de gestão de conhecimento, publicação na web ou interação de comunidades. Segue abaixo lista de funções organizada com características comuns da web:

### Gerenciamento de conteúdo

    Através de uma simples interface baseada no seu navegador, membros podem publicar para vários módulos de conteúdo: histórias, blogs, enquetes, imagens, fóruns, downloads, etc. Administradores podem escolher entre múltiplos temas ou criar o seu próprio para dar ao site uma aparência única. O sistema de classificação flexível permite classificações hierárquicas, indexação cruzada de textos e definição de múltiplas categorias para a maioria dos tipos de conteúdo. O acesso ao conteúdo é controlado através de definições de papéis pelo administrador. Páginas do site podem exibir mensagens por tipo de módulo ou conteúdo categorizado, com exportação em RSS separada por cada tipo de exibição. Usuários também podem fazer busca por palavra-chave em todo o site.

### Blog

    Uma instalação simples pode ser configurada como um blog pessoal único ou vários blogs pessoais. O Drupal suporta a API do Blogger, provê alimentadores RSS para todos os blogs individualmente e pode ser configurado para pingar diretórios de blogs como por exemplo, blogs e weblogs.com quando um novo conteúdo é postado na página principal.

### Comunidade baseada em discussões

    Um site que usa Drupal pode agir como um site de notícias semelhante ao Slashdot e/ou fazer uso de um fórum de discussão tradicional. Quadros de comentários anexados na maioria dos tipos de conteúdo, fazem com que os usuários possam discutir facilmente novas mensagens.

### Colaboração

    Usado para gerenciar a construção do Drupal, o módulo de projeto é apropriado para ser usado em outros projetos de software de código aberto. O módulo book, similar a um wiki colaborativo inclui um controle de versão que permite a grupos criarem, revisarem e mantenham documentos ou quaisquer outros tipos de textos facilmente.
Se você deseja modificar algumas características ou criar algo novo, como uma tradução, a comunidade Drupal vai recebê-lo muito bem.

## Módulos

O core do Drupal foi bem projetado com um sistema de ganchos conhecido como hooks (ou callbacks), que permitem que módulos insiram funcionalidades dentro do Drupal.
Módulos incluídos no core do Drupal liberam usuários para:
* Criar, revisar e categorizar conteúdo
* Buscar conteúdo
* Postar comentários
* Participar de fóruns
* Votar em enquetes
* Trabalhar em colaboração escrevendo projetos
* Criar e visualizar páginas de perfil pessoal
* Comunicar entre si ou com outros administrados de websites
* Mudar o visual do site através do gerenciador de temas
* Construir menus de navegação de vários níveis
* Usuários do mesmo site podem navegar com seus idiomas locais
* Prover leitor de notícias RSS feeds
* Registrar e gerenciar contas de usuários
* Criar granularmente regras para usuários dando permissão para funcionalidades específicas do site
* Usar regras de acesso para proibir acessos específicos através dos usuários, emails, e endereços IPs.
* Prover estatísticas e relatórios para administração
* Gerenciar cache e throttling, técnica utilizada para desabilitar recursos quando o site estiver com alto tráfego
* Construir específicas regras para filtros de conteúdo
* Sistema de URL amigável que permite lembrar facilmente (ex: "www.mysite.com/products" melhor que "www.mysite.com/?q=node/432)
O Drupal possui milhares de módulos livres e gratuitos escritos pela própria comunidade, como:
* Sistemas para E-Commerce
* Workflows personalizados
* Galeria de Fotos
* Organic groups
* Google sitemaps
* Amazon Items
* Mailing list management
* Integration with CVS

## Usabilidade

Para os desenvolvedores o Drupal objetiva um sistema de desenvolvimento que seja:
* Bem equipado com um sistema de "ganchos" que permita entendimento instantâneo para abranger a maioria dos objetivos de codificação previstos que envolvam interações com os elementos do núcleo
Para os administradores o Drupal tem como objetivo produzir soluções que sejam:
* Fácil de instalar e configurar, de forma que seja mínimo o conhecimento técnico específico.
* Intuitivo e auto-explicativo, de forma que os administradores possam facilmente encontrar as opções de configuração que precisam.
* Altamente configurável, de forma que os administradores possam exibir a interface que eles desejam.
Para os usuários, todos os elementos da interface de usuário devem ser:
* Intuitivo e auto-explicativo de forma que os usuários, com o mínimo de experiência prévia, possam facilmente descobrir, navegar e usar as funcionalidades.
* Organizado de tal forma que os usuários não tenham dificuldades de identificar o essencial do não essencial.

## Princípios
### Modular e extensível

    O Drupal tem por objetivo prover um núcleo leve e poderoso que suporte ser estendido através de módulos personalizados.

### Qualidade de codificação

    Alta qualidade, elegância e código documentado é uma prioridade sobre funcionalidades desordenadas.

### Baseado em padrões

    O Drupal suporta padrões consolidados e emergentes. Padrões específicos incluem XHTML e CSS.

### Demanda de poucos recursos

    Para garantir excelente desempenho, o Drupal preza pelo código resumido (por exemplo, minimizando o uso de consultas a bancos). O Drupal também deve requerer o mínimo de software no lado do servidor, fazendo uso dos largamente utilizados. Especificamente, o Drupal deve funcionar corretamente em um servidor com Apache, PHP e tanto MySQL como PostgreSQL.

### Código aberto

    O Drupal é baseado na filosofia de colaboração de software livre através do código aberto, bem como é liberado sob a licença GPL. O Drupal em si é código aberto e construído e suportado sob outros projetos de código aberto. Especificamente o Drupal é codificado na linguagem de código aberto PHP e tem como formato primário de fonte de dados os bancos de dados de código aberto MySQL e PostgreSQL.

### Facilidade de uso

    O Drupal tem por objetivo uma alta qualidade da usabilidade para desenvolvedores, administradores e usuários.

### Colaboração

    O desenvolvimento do Drupal se baseia no compartilhamento de informação de forma aberta.

## Críticas

Algumas pessoas consideram o Drupal mais difícil de aprender e levemente mais difícil de instalar do que outras soluções CMS simples ou ferramentas básicas de blogging como o Wordpress. A partir da versão 5.0 do Drupal, lançada em 15 de Janeiro de 2007, os líderes do desenvolvimento da ferramenta vêm desenvolvendo uma série de melhorias deste aspecto, como a implementação de um instalador com interface web, aprimoramentos na usabilidade e perfis de instalação.
Alguns programadores criticam o Drupal porque eles percebem a ferramenta como não sendo OOP (Object-Oriented Programming, ou Programação Orientada a Objeto), mas a programação Drupal a partir de uma perspectiva orientada a objeto explica como princípios OOP e AOP (Aspect-Oriented Programming, ou Programação Orientada a Aspecto) se aplicam ao Drupal.
Muitos dos módulos contribuídos pela comunidade são compatíveis apenas com o Banco de Dados MySQL, ou apenas PostgreSQL. A partir da versão 6.0, a abstração de banco de dados obriga os desenvolvedores a criar modelos de dados independentes do servidor de banco de dados a ser usado pelo Drupal.