Pesquisar este blog

Tutorial_Drupal

Como instalar e configurar o TinyMCE no Drupal

Nesse tutorial veremos como instalar e usar o editor WYSIWYG TinyMCE no Drupal.

O TinyMCE é um editor online designado WYSIWYG (What You See Is What You Get) em português "O que você vê é o que você tem".

Com ele é possivel editar conteúdo online sem precisar saber HTML, mas com formatação rica. Ele foi criado pela empresa Moxiecode, e pode ser baixado livremente no site da empresa em: http://tinymce.moxiecode.com/. Ele funciona independente do Drupal, mas aqui veremos como integrá-lo ao Drupal.

Atualmente existe um módulo para o Drupal que habilita o uso do TinyMCE para edição de conteúdo. Esse módulo está disponível em: http://drupal.org/project/tinymce

Como diz na página do módulo o mesmo não instala o TinyMCE em sí, então é preciso que você baixe, além do módulo para o Drupal, o TinyMCE.

Assim, o primeiro passo para a instalação do TinyMCE é ir até a página do módulo e baixá-lo. Em seguida, vá até a página do TinyMCE e baixe-o também.
Nesse ponto é importante observar, na página do módulo, qual versão do TinyMCE ele suporta. No momento em que eu escrevo esse tutorial, a versão suportada é a 2.1.2. Assim, quando for baixar, procure essa versão.

Com os dois produtos baixados, você deve descompactar o módulo na pasta modules da sua instalação do Drupal. Isso fará com que o módulo esteja disponível para o Drupal.
Isso, por si só, não faz com que o TinyMCE esteja funcional. É necessário também descompactar o TinyMCE na pasta do módulo tinymce. Assim, a estrutura de diretórios deve ficar semelhante a essa:

Antes:

Depois:

Isso feito, podemos habilitar o módulo para o nosso site.

Para tanto logue-se como administrador no seu site. Acesse Administrar -> Construção do site -> Módulos e habilite o módulo TinyMCE.

Pronto o módulo está instalado.

Nesse ponto você não verá o editor ainda pois, no caso do TinyMCE, você precisa configurar um perfil de usuário que terá acesso a esse editor. Isso é feito assim para evitar que usuários, sem os privilégios necessários, acessem o TinyMCE.

Então você deve criar um perfil (esse tutorial não irá cobrir esse procedimento) e ir até: Administrar -> Gerenciamento de usuários -> Controle de acesso e dê a permissão "access tinymce" para esse perfil. Obviamente que se o seu usuário pode fazer outras coisas, você deve dar as permissões necessárias.

Isso habilitará o usuário acessar o TinyMCE, mas precisamos configurar como o editor será exibido para o usuário. Ao contrário de outros módulos para o Drupal (como o FCKEditor) o nível de personalização do TinyMCE é muito grande.

Vamos configurar o TinyMCE. Para isso acesse o seu site e vá em: Administrar -> Configuração do site -> TinyMCE settings

A primeira vez que você acessa essa página lhe será mostrado um aviso de que ainda não há um perfil, e lhe será dada a oportunidade de criar um.
Clicando nesse link, você será levado a uma tela onde pode configurar cada parâmetro do TinyMCE.

Vamos dar uma breve olhada nessas opções.

Vamos por partes:

Basic setup

Você vai dar um nome para esse perfil.

Nesse ponto você pode configurar qual o perfil de usuário pode acessar esse conjunto de opções do TinyMCE (pode ser mais de um perfil).

É possível configurar outros itens relacionados ao o usuário.

Visibilidade

Você escolhe em quais páginas o TinyMCE vai ser usado. Ele vem, por padrão, para ser usado em páginas de conteúdo, comentários e perfil do usuário.

Buttons and plugins

Como o nome diz, você pode configurar os botões e plugins que fará uso.

Editor appearance

Configura as opções de visualização (posicionamento e alinhamento) do editor na tela.

Editor appearance

Aqui você configura como o editor irá tratar o código gerado ou colado. Você pode habilitar a limpeza e formatação do código, o que é uma boa opção.

CSS

Por último é possível configurar os estilos do Editor. Isso impacta diretamente em como o exitor é exibido. Recomendo escolher para o parâmetro "Editor CSS", a opção "tinyMCE default". Isso evita conflitos entre o CSS do seu site e o Editor.

Pronto. Ao salvar essa tela, o TinyMCE estará configurado para o seu site.

Uma nota importante. Se você tentar acessar, com o primeiro usuário que você criou para o site, alguma tela onde o editor deveria aparecer ele não aparecerá. Isso acontece porque você precisa atribuir a esse usuário o mesmo perfil para o qual você configurou o TinyMCE. Isso feito, estará disponível também para esse usuário.

[Seria interessante informar um problema na instalação, que é a criação de mais um subdiretório
/modules/tinymce/tinymce/tinymce
cuja solução está em
http://drupal.org/node/80612]


Imcopatibilidade com tema

Meu problema foi solucionado quando alterei o tema. Talvez isso possa estar ocorrendo com os demais usuários.
O link para criar um novo profile do tinyMCE não aparece em alguns temas.




Criando sua própria autenticação do Drupal

Como uma das grandes vantagens de se trabalhar com o Drupal é a de que ele é altamente customizável, a autenticação não poderia ficar pra traz. Neste artigo vamos ver como é simples criar seu próprio sistema de autenticação para o Drupal.

Para tornar este artigo mais fácil de entender, vamos criar um módulo real que vai autenticar todos os usuários que estão em um arquivo texto. O nome do nosso módulo será fileauth.

Basicamente vamos apenas usar um hook para criar nosso módulo, o hook_auth.

Então chega de bla bla bla e vamos lá...

Primeiro crie o diretório fileauth onde os arquivos do nosso módulo vai ficar e crie o arquivo fileauth.info dentro dele.

Agora crie o arquivo usuarios.txt com o seguinte conteúdo:


pedro:1234
priscilla:4321
fulano:abcd
zezinho:obdc

Estando com tudo pronto, vamos para o módulo. Crie o arquivo fileauth.module e coloque o seguinte conteúdo. Em seguida vou explicar o que ele vai fazer...


function fileauth_auth ($username, $password, $server) {
$file = drupal_get_path('module', 'fileauth') . '/usuarios.txt';
// File not found
if ( !file_exists($file) ) {
drupal_set_message("File '$file' not found!", 'error');
return FALSE;
}
$users = file($file, FILE_IGNORE_NEW_LINES);
// No users on file
if (!count($users)) {
return FALSE;
}
foreach ($users as $user) {
list($u, $p) = split(':', $user);
if ($u == $username && $p == $password) {
return TRUE;
}
}
// User not found...
return FALSE;
}
?>

Muito simples né? vamos à explicação...

Caso o drupal não ache o usuário em sua base de dados, ele executa nossa função passando o usuario e a senha que foram escritos no formulário. O parâmetro $server pode ser esquecido neste momento por nós pois não vai ter utilidade...

O módulo apenas abre o arquivo e procura por um usuário:senha... Simples né?

Você agora pode fazer o que quiser... validar com usuários de banco de dados, XML-RPC etc. O céu é o limite...



Criando um tema para o Drupal

Esse tutorial mostra como transformar um template HTML em um tema do Drupal.

Como pré-requisito para entender esse tutorial você vai precisar entender um pouco de PHP, HTML e CSS para conseguir acompanhar tudo.

Para esse tutorial também é necessário que você já tenha uma instalação do Drupal na sua máquina. Caso você ainda não tenha ou não saiba como fazer essa instalação pode ver esse tutorial e esse screencast.

Para o melhor entendimento desse tutorial, quando nos referimos a template estaremos falando de um layout feito em HTML e que ainda não tem funcionalidade no Drupal. Quando nos referirmos a tema estamos nos referindo a um template já funcionando no Drupal.

Então, antes de mais nada, precisamos encontrar um template. No nosso tutorial vamos pegar um template já pronto na Internet, no seu caso você mesmo pode fazer um ou pagar um designer para que o faça.
O template escolhido para esse tutorial foi o Standardized disponível em http://www.freecsstemplates.org/preview/standardized. Esse template é grátis, podendo ser baixado gratuitamente. Você precisará manter os créditos do tema, pois ele está licenciado sob a Creative Commons, mas isso não é problema pois estamos em uma comunidade se Software livre não é? :-)

Em seguida precisaremos montar nosso tema propriamente dito. Eu tenho por hábito partir de um tema pré-existente, mas você não precisa fazer isso, é uma questão pessoal. Para esse tutorial, vou usar como base o tema Bluemarine que já vem com toda instalação do Drupal.

Assim, a primeira coisa a fazer é baixar o template (acima você tem o endereço para download). Em seguida entramos na pasta themes da nossa instalação do Drupal e copiamos toda a pasta do tema bluemarine com um nome diferente, no nosso caso o nome do nosso tema será tutorial. O resultado final será algo como mostrado abaixo.

Sistema de arquivos

Em seguida copiamos alguns elementos do template para a pasta do nosso novo tema. No caso desse nosso tema, vamos copiar a pasta images e o arquivo default.css que estão na pasta do template para a pasta do nosso tema. Em seguida, apagamos o arquivo style.css que já estava na pasta do nosso tema e renomeamos o arquivo default.css para style.css. Isso é necessário pois o Drupal entende, por padrão, que o nome do arquivo de CSS do nosso tema se chama style.css. Obviamente podemos ter outros aquivos CSS, mas para o nosso tema vamos fazer seguindo o padrão. Uma outra coisa que podemos fazer é baixar um thumbnail para substituir o que já existe do bluemarine. Isso Não é imprescindível mas é importante pois é através desse thumbnail que vamos poder visualizar na área de administração de temas qual é o nosso tema. No caso do template que baixamos, ele já tem um thumbnail em http://www.freecsstemplates.org/download/thumbnail/standardized. Baixe esse arquivo e substitua o arquivo screenshot.png que está na pasta do nosso tema.

Com isso terminamos os preparativos e podemos partir para a construção do tema propriamente dita. Como eu disse me baseio em um tema para construir os meus, então o trabalho aqui é um pouco de copiar e colar, e vou mostrar como estava antes e depois até o resultado final.

Para começar o trabalho, primeiro renomeamos o arquivo page.tpl.php do tema que copiamos para algo como page.tpl.php.old e copiamos o arquivo index.html do template para a pasta do tema com o nome page.tpl.php. No final poderemos apagar o page.tpl.php.old. Em seguida abrimos os dois arquivos para montar o tema. Para facilitar o entendimento, dividi em partes de forma que podemos ir acompanhando pedaço por pedaço da construção do tema.

Começamos com a tag HTML do nosso tema. No tema original ela é assim:

Aqui vemos duas marcações em PHP, com a variável $language que é o código do idioma do site. Isso é usado para formatar o HTML de acordo com os padrões da W3C. No nosso template veio assim:

Perceba que aqui existe um comentário sobre a licença do template, e a tag HTML não tem designação de idioma, então modificamos para que fique assim:

Pronto, temos essa parte terminada. Em seguida vamos para os cabeçalhos. É nessa parte que são declarados os estilos, javascript e várias outras partes importantes do tema do Drupal. Abaixo o original, no tema bluemarine:

E abaixo o original no nosso template:

Por fim temos o resultado final:

Veja que o resultado final é igual ao original do bluemarine. Nem sempre será, no nosso tema vamos usar a estrutura básica, então não precisamos de alterações. Agora uma breve explicação do que é cada uma das variáveis nessa seção:

  • $head_title - Essa variável traz o título da página. Poderíamos preencher o título diretamente, mas perderíamos o título que é gerado diretamente para cada página. Se você nunca reparou que cada página tem um título no Drupal, da próxima vez que você acessar um site com o Drupal, dê uma olhada na barra de título do seu navegador.
  • $head - Essa variável carrega uma série de informações importantes para o seu site. É por ela que são carregadas as informações de quais os RSS disponíveis no seu site, o ícone que aparece na barra de endereços (conhecido com favicon) além da codificação da página (utf-8, iso-8859-1 e etc).
  • $styles - Como o nome mesmo diz, aqui é onde vem as declarações de estilos. O Drupal pode carregar vários arquivos CSS, e de fato ele faz isso. Se você olhar o código fonte de uma página gerada pelo Drupal verá que ele tem várias chamadas de arquivos CSS, uma para cada módulo que implementa isso. Em um futuro tutorial sobre construção de módulo veremos isso. Veja também, no código fonte gerado, que existe uma chamada para um estilo chamado style.css, esse é o style.css do nosso tema, que a gente copiou do template original, lembra?
  • $scripts - faz exatamente a mesma coisa que a $styles, mas, ao invés de fazer isso com os estilos, faz com os javascript do site.
  • Por último tem uma chamada vazia para um javascript, que não tem função, mas que deixamos apenas para exemplificar que nem tudo precisa tem uma função definida na hora de construir o template. Quando houver casos como esse, você pode remover aqui fica só de exemplo.

Agora vamos ver a parte do cabeçalho do nosso tema. Se você já deu uma olhada no tema que escolhemos como padrão, lembrará que ele tem um cabeçalho com o menu, em uma barra verde, e abaixo um título. Vamos então ver como fazer isso. Primeiro vemos como é no tema original, o bluemarine:

E depois como veio no template:

Por último vemos como ficou:

Vejamos o que é cada uma dessas variáveis:

  • $site_name - Contém o nome do site, que preenchemos nas configurações do site.
  • $base_path - O caminho até a raiz do nosso site. Suponhamos que nosso site seja http://site.com.br/drupal esse será o $base_path. É muito útil para poder construirmos links como é o caso acima.
  • $site_slogan - É o slogan que preenchemos nas configurações do site.
  • Vemos no original também a variável $logo que é a URL do logotipo do site. No caso do tema bluemarine é o Drupalicon (gota), no nosso caso não vamos usá-lo. Você, obviamente, pode usar o endereço da imagem diretamente no seu tema, mas é smpre bom utilizar a variável logo pois assim podemos alterar pela interface do Drupal sem precisar mexer no template.

Note ainda que mativemos a estrutura do HTML básico do nosso template. Isso porque podem haver elementos HTML que precisaremos para manter o estilo pretendido. No caso, deixamos o DIV com sua classe header que ele já possui.

Em seguida vamos para a seção que trata do menu. Vejamos como é o original no bluemarine

E como o template escolhido trata essa parte:

Por fim, como ficou com a alteração que fizemos:

Antes de mais nada, veja que cortamos algumas coisas no nosso código. O Drupal vem com dois níveis de menu, prontos para serem usados: o primário e o secundário. No nosso caso, só vamos usar o primário, e o secundário foi excluído. Outra coisa que excluímos foi a caixa de pesquisa, pois vamos usar um bloco para isso. Então vejamos o que significa cada uma dessas variáveis:

  • $secondary_links - Essa variável é que montaria o menu secundário, que no nosso caso não irá exisitr.
  • $primary_links - Essa é a variável que monta no menu principal. Não confunda com o menu de navegação lateral. O menu primário aqui é o menu que o dono do site irá para disponibilizar os itens para os seus usuários acessarem as várias partes do site. Veremos como inserir um link aqui, logo abaixo
  • $search_box - É a caixa de busca do site. Note que essa variável não carrega o bloco que contém a caixa de busca, mas sim monta uma outra caixa de busca, por isso não vamos usá-la, pois faremos isso com o bloco que conteém a caixa de busca.
  • Vemos também o uso da função theme com a constante links. Essa função monta um menu com os vários links contidos na variável que é passada para ele. No nosso caso final, temos a montagem do menu primário. Também nos é dada a oportunidade de personalizar a classe e o id utilizado nesse menu. Esse tutorial não cobre o uso dessa função.

Agora vamos para a parte principal do nosso tema. O tema nos permite personalizar a apresentação do conteúdo do site. O Drupal entende que o conteúdo é tudo que é exibido na parte principal do do seu site, assim nem tudo que é exibido nessa seção é de fato conteúdo, mas coisas como os formulários de edição, configuração e etc. também são exibidos nessa área. Vejamos como é o original no bluemarine:

Em seguida como veio no nosso template. Note que não está tudo que há no template, apenas uma parte.

Por último como ficou depois de alterarmos:

Novamente veja que mudamos apenas o que precisamos do Drupal. Parte da formatação original do template ficou. Vejamos o que é cada uma dessas variáveis:

  • $breadcrumb - Essa variável carrega o breadcrumb, que nada mais é do que a trilha ou caminho pelo qual você passou até chegar em uma determinada parte d site.
  • $title - É o título do conteúdo que você está vendo. Note aqui que não temos apenas o título de tipos de conteúdo, mas de toda página que acessamos.
  • $tabs - Quando logado temos algumas abas de edição, e é essa variável que as carrega.
  • $help - Mensagens de ajuda são exibidas em algumas partes do site, essa é a variável responsável por isso.
  • $messages - Toda vez que você realiza uma ação que é necessária alguma mensagem, seja de sucesso ou erro, é aqui que ela será carregada.
  • $content - Aqui é onde vem o conteúdo em si.
  • $feed_icons - Toda vez que uma página disponibiliza o conteúdo em RSS, essa variável é preenchida com um link com uma imagem para o RSS dessa página.

Veremos agora a nossa barra lateral da esquerda, que terá a caixa de busca, caixa de login, e, quando logado, o menu de administração (também conhecido como navegação). Vejamos então o original no bluemarine:

Como o template escolhido veio:

E como ficou no final:

Nesse caso temos apenas uma variável, $sidebar_left, que irá carregar todos os blocos que posicionarmos na esquerda. Nesse momento cabe uma explicação sobre como carregar os blocos no Drupal e quais variáveis são usadas para isso.
O Drupal trabalha com um conceito de região. Por padrão ele define 5 regiões onde podemos posicionar blocos. Essas regiões são mostradas no template page.tpl.php em forma de variáveis como abaixo:

  • $header - Variável que carrega os blocos posicionados no cabeçalho de um tema
  • $sidebar_left - Que já vimos e sabemos que carrega os blocos posicionados na barra lateral da esquerda
  • $sidebar_right - Que faz o mesmo que a $sidebar_left, mas ao invés carrega os blocos na barra lateral da direita
  • $content - Que carrega, por padrão, os blocos abaixo do conteúdo
  • $footer_message - Que carrega os blocos posicionados no rodapé.

É possível que se defina outras regiões, mas esse tutorial não irá cobrir isso. Num futuro tutorial falaremos disso.

Agora veremos a última parte do nosso tema, o rodapé. Abaixo a verão original no bluemarine:

E em seguida o template:

Por fim, a versão alterada no nosso tema:

Novamente, parte do template foi mantida, pois ela é fundamental para a formatação correta do site. Vejamos o que é cada uma dessas variáveis:

  • $footer_message - Já vimos essa variável, ela é responsável por carregar os blocos posicionados no rodapé.
  • $closure - Essa variável carrega algumas instruções, geralmente javascript, que devem ser executadas após o processamento total da página. Um bom exemplo é o código do Google Analytics. Cada módulo pode definir o que virá nessa variável. Por padrão ela vem vazia.

Pronto, para esse tema que escolhemos, isso é tudo que precisamos mexer com PHP/HTML. Veremos agora como deixar mais próximo do template original, pois ainda são necessários alguns pequenos ajustes de CSS.

Antes de mais nada, precisamos habilitar o nosso novo tema. Assim você deve se logar como administrador, e ir na parte de temas (Adminsitrar -> Construção do site -> Temas) e habilitar o nosso novo tema, e definí-lo como padrão:

Vejamos como ficou o site com essas mudanças que fizemos (clique na imagem para ampliar):

Veja que ainda existem coisas a serem feitas. Precisamos colocar o bloco de login, a caixa de busca e formatar o conteúdo.
Vamos criar um item que apareça no menu superior. Para isso crie uma página (Criar conteúdo -> Página) e preencha os campos que desejar e em opções de menu preencha como abaixo:

Isso fará com que apareça um menu na barra verde. Vejam que, como eu disse antes, o primary links é diferente do menu de navegação.

Agora nós temos um item no menu superior, podemos criar tantos quantos desejarmos.

Agora vamos habilitar a caixa de busca na barra lateral da esquerda, para isso vá até a página de adminstração de blocos (Administrar -> Construção do Site - > Blocos) e habilitamos o bloco da busca na esquerda conforme abaixo:

Para que usuários anônimos acessem a caixa de busca, precisamos dar a permissão correta:

Pronto, temos todos os elementos que precisamos no nosso site.
Nossa caixa de busca ficou assim:

Agora faltam os ajustes de CSS. Precisaremos identificar quais as classes que definem a cor das duas caixas, login e busca além dos botões e caixa de texto.

Olhando o código fonte do template, identifiquei que a caixa de login, no template, tem aplicada a classe boxA e a de busca boxB. Olhando o código gerado pelo site até o momento, pude identificar que o bloco de login possui a classe block-user e o bloco de busca possui a classe block-search.
Assim, tendo mapeado as classes de origem e destino, editamos o arquivo style.css e trocamos todas as ocorrências de uma classe (no caso boxA e boxB) por outra (no caso block-user e block-search). Assim temos o resultado para a caixa de busca:

Mas ainda ainda não está como esperávamos. Nem o botão nem a caixa de texto está como esperávamos, para isso precisaremos trocar mais uma parte do CSS pelas classes corretas.
Vejamos então. A caixa de texto padrão do template utiliza a classe text que vamos ter que trocar pela classe que o Drupal utiliza, chamada form-text. Para isso, editamos novamente o arquivo style.css e procuramos or todas as ocorrências de input.text e trocamos por input.form-text. Igualmente com o botão, que no template tem a classe button e no Drupal a classe é form-submit.

Pronto, com todas as classes trocadas, temos como resultado final:

Então até o momento temos o seguinte com usuário anônimo(clique para ampliar):

E com usuário administrador(clique para ampliar):

No entanto não está 100% igual ao que desejamos, pois acima de cada bloco temos um título, coisa que não há no nosso template original. Assim precisamos desabilitar isso. Para tanto acesse a área de adminstração dos blocos (Administrar -> Construção do site -> Blocos) e escolha a opção "configurar" dos dois blocos que queremos tirar o título e troque o nome do título do bloco para , como abiaxo:

Por fim, precisamos definir o nome do site, o slogan e a mensagem de rodapé. Para isso acesse a área de adminsitração do site na parte de informações (Administrar -> Configuração do site -> Informações do site) e altere os dados como abaixo e depois salve as informacões(clique para ampliar):

Isso por si só fará com que você tenha esses dados configurado. Porém o slogan do site depende do seu tema. Alguns desse elementos são controlados individualmente por cada tema, e o nosso tema está com o slogan desativado, então teremos que ativá-lo. Para isso acesse a área de configuração do tema (Administrar -> Construção do site -> Temas) e clique na opção "Configurar" do nosso tema e, em seguida, marque a caixa de "Slogan do site", conforme abaixo:

Pronto, isso termina com a configuração do nosso site, veja como ficará na versão final, com usuário anônimo(clique para ampliar):

E com o usuário logado(clique para ampliar):

Temos um template aplicado no nosso site. É bom lembrar novamente que esse não é o único método de fazer temas, e para algumas pessoas não é o melhor. Também deve-se lembrar que esse é um exemplo simples e que o Drupal te deixa fazer muito mais coisa do que foi mostrado nesse simples tutorial.

Abaixo você pode baixar o template pronto


Desenvolvendo Portais com o CMS Drupal

Desenvolvendo Portais com o CMS Drupal

Este é um tutorial, do tipo passo-a-passo que ensina a instalar, configurar e adicionar conteúdo no CMS Drupal.
Não requer conhecimento do Drupal, nem de PHP, mas com conhecimento da criação de sites ou disposto a aprender.
Algo forte no Drupal são seus conceitos. Ele trabalha com conceitos prórios, diferente de outros CMS, portanto
é importante se acostumar com eles. Vamos ao tutorial...

O Drupal é um dos mais populares CMS.

O que é o Drupal?

É um Sistema Gerenciador de Conteúdos (CMS) open source em PHP distribuído sob a licença GNU. É um CMS que
foca no desenpenho, segurança e recursos. A versão 5.5 tem apenas 736KB compactados, bem enxuto. Conta
atualmente com uma grande comunidade ao redor do planeta. Dos CMS populares é o único com um bom suporte
ao PostgreSQL.

Onde obter Ajuda?

Site oficial - http://drupal.org/handbooks
Site da comunidade Brasileira - http://drupal-br.org
Manual Traduzido pela comunidade brasileira - http://drupal-br.org/manual
Dicas no site Drupal Brasil - http://drupal-br.org/dicas
Online no site oficial - http://drupal.org/getting-started/5
Em PDF para Drupal5 - http://drupal.org/files/getting-started_2.pdf
Fórum em Inglês - http://drupal.org/forum
Fórum em Português (Brasil) - http://drupal-br.org/forum

Pré-requisitos

- Apache 1.3.x ou 2.x (se usar o mod_rewrite pode adotar URL limpas/amigáveis)
- PHP 4.3.3 ou superior ou 5.x. Para PHP 5.2 usar o Drupal 5.2 ou superior ou o 4.7.5 ou superior.
- MySQL - Com suporte redondo ao MySQL (4.5 ou 5.0). Requer no servidor de hospedagem os seguintes privilégios
para o usuário do banco no MySQL: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES.
- PostgreSQL - Suporte ainda com restrições ao PostgreSQL (7.3 ou superior). Atenção ao instalar alguns módulos.
Caso encontre problemas com alguns módulos, faça a migração do código que deve estar voltado para o MySQL.

- PHP XML extension
- PHP mbstring extension (processamento do texto em UTF-8)
- Biblioteca GD
- session.save_handler:user
- session.cache_limiter: none
- memory_limit: 24M (recomendado)
- Para PHP instalado como módulo o .htaccess deve ter AllowOverride None
- Banco com codificação UNICODE
- Servidor de e-mail: SMTP = localhost e smtp_port = 25

Downloads

4.x, 5.x ou 6.x (beta) - http://drupal.org/download

Criação do Banco de Dados

O banco de dados, idealmente, deve ser criado com suporte a UNICODE (UTF-8).

MySQL

Criar o banco com suporte a UTF-8.

PostgreSQL

Se num servidor de hospedagem, geralmente não terá opção para dar suporte a UNICODE.
Ainda por cima, nos servidores de hospedagem a versão do PostgreSQL já é bem antiga e com
suporte padrão a SQL_ASCII.
Em alguns testes, a codificação SQL_ASCII funciona bem com os módulos defaults nas versões
5.5 e 6.x.

A recomendação da equipe é que o banco tenha suporte a UNICODE (para evitar problemas com a acentuação),
pela linha de comando com:

createuser --pwprompt --encrypted --no-adduser --no-createdb drupal
createdb --encoding=UNICODE --owner=drupal drupal

Ou então na console do psql com:

CREATE ROLE drupal WITH ENCRYPTED PASSWORD 'drupal';
CREATE DATABASE drupal WITH ENCODING 'UNICODE' OWNER drupal;

No phppgadmin apenas escolhemos a codificação UNICODE.

Instalação

- Fazer o download da última versão e descompactar no servidor
- Criar o subdiretório "files" na pasta "drupal" e dar permissão de escrita se num UNIX
- Acessar via navegador http://localhost/drupal
- Interativamente instalar observando as recomendações.

Precisa ter cookies habilitados no navegador.

Versão 4.x

- Devemos criar o banco
- Importar o script que se encontra em database/database.pgsql ou database.mysql.
- Depois devemos configurar o script sites/default/settings.php com as informações do banco criado, na linha:
$db_url = 'mysql://nomeusuario:senha@localhost/nomebanco';

Versões 5.x e 6.x

- Apenas crie o banco
- E chame o navegador com http://localhost/drupal

Após instalado crie a sua conta de super usuário (UID1).

Instalação do Idioma Português do Brasil

- Faça o download do site oficial em
http://drupal.org/node/151248
- Descompacte localmente
- Abra o Drupal, Administrar, após ter habilitado o módulo de suporte, no Drupal 6 é Language, no 5 é Localization
- Clique em Add Language e indique português Brasil e Add
- Ative, coloque como default e Save
- Clique no link "Importing a translation" e indique o arquivo pt-br.po e clique em Import.

Instalação do Editor HTML WYSIWYG para ser usado nas textareas de conteúdo

- Baixar o módulo de http://ftp.drupal.org/files/projects/tinymce-5.x-1.9.tar.gz
- Faça o upload para a pasta modules do Drupal e descompacte
- Faça o download da versão 2.1.3 do tinymce de http://prdownloads.sourceforge.net/tinymce/tinymce_2_1_3.tgz?download
- Envie por upload para a pasta modules/tinymce do Drupal. Ficará assim: modules/tinymce/tinymce
- Faça o login como super usuário do Drupal
- Crie um perfil de usuário exclusivamente para acessar o TinyMCE (somente para acessar)
- Vá em Administrar - Configuração do site - TinyMCE (caso ainda não tenha um perfil crie) e faça algum usuário usar o tinymce
- Clique em Editar no perfil e em Basic Setup selecione o perfil e veja outras configurações
- Clique em Update profile abaixo
- Requer ainda Conteúdo do tipo HTML Full. Lembre de dar permissão de uso somente para usuários de confiança.

Para testar clique no menu Criar Conteúdo - Selecione um dos itens e verá o TinyMCE aparecer.

Obs.: Tive como base o tutorial do Drupal Brasil (Como instalar e configurar o TinyMCE no Drupal).

Ativação dos demais Módulos

O Drupal vem com vários outros módulos úteis, mas desativados.
Clique em Administrar - Módulos e selecione os que deseja ativar.

Atualização da versão atual

Clicar em Administrar - Módulos
Clicar no link "update.php" e seguir as instruções.

Configurações do Site

Existe uma grande quantidade de configurações que podemos alterar ou ajustar no Drupal:
Administrar - Configuração do site

Aí temos: data e hora, desempenho, idiomas, informações sobre o site e várias outras.

Informações do Site

Aqui definimos algumas coisas importantes sobre o site:

- Título do Site (que aparece na barra do navegador)
- E-mail do responsável
- Slogan do site
- Mensagem de rodapé
- Página inicial padrão (podemos escolher qualquer página como a inicial)

Alguns Conceitos do Drupal

- Blocos - são componentes da interface do Drupal, como o menu de navegação, como a área de login,
a área da enquete, o formulário de busca, etc. Podem aparecer ou não em todas ou várias páginas.

- Regiões - a página no Drupal divide-se nas seguintes regiões: cabeçalho, rodapé, conteúdo, barra lateral
esquerda e barra lateral direita.

- Taxonomia - através deste módulo temos como criar categorias e subcaegorias (termos) para poder organizar
melhor o conteúdo. Na versão 5.x temos Categoria e na 6.x já é Taxonomia.

- Termo - Este é uma subcategoria.

- Livro - é o tipo de conteúdo que pode ser desenvolvido em colaboração, por vários autores.

- Página - Page não posta autor, data ou comentário por default

- Story - posta autor, data ou comentário por default

Ao publicar uma página de conteúdo podemos escolher se ela irá ou não para front page.

Configurar Blocos

Administrar - Blocos

Podemos definir a região em que cada bloco ficará, como também podemos escolher se ele não será exibido.

Instalar Módulo de Terceiros

- Fazer o download do módulos
- Enviar por upload para o subdiretório modules do Drupal
- Extrair
- Acessar a seção Adrministrar - Módulos e ativar (ao final)
Observe que alguns módulos tem dependências, que devem ser instaladas antes para que seja ativado.

Instalar Temas

De forma semelhante à instalação dos módulos.
Após a instalação podemos marcar como padrão para que seja usado no site.

Instalação do módulo "nice menus"
Este módulo permite a exibição de menus com submenus em árvore.

- Faça o download do site do Drupal http://drupal.org/...
- Faça o upload para o diretório modules do Drupal no servidor e descompacte
- Vá em Administrar - Módulos e ative o novo módulo Nice Menus
- Vá em Administrar - Nice Menus e configure. Escolha quantos menus utilizará. Default são 3.
- Agora vá em Administrar - Blocos e selecione o(s) nice menus que irá usar escolhendo a região.
- Lembre de ocultar o menu de navegação para usar o Nice Menu.
- A região mais adequada para o Nice Menu é a lateral esquerda.

Adicionar Conteúdo

Neste exemplo iremos criar uma estrutura para exibição de autores e artigos. Ou seja, aparecerá um item do menu
de navegação chamado Artigos, que ao ser clicado abre o leque de autores. Ao clicar num autor serão exibidos
os seus artigos, como a seguir:

Artigos
--AutorA
----Artigo1
----Artigo2
----Artigo3
--AutorB
----Artigo1
----Artigo2
----Artigo3

Vamos Criar uma Categoria chamada Artigos

Lembre que se estiver no Drupal 6.x não é Categoria mas Taxonomia.

- Clique em Administrar - Categorias
- Acima clique em Novo Vocabulário
- Em Nome do Vocabulário digite "Artigos"
- Em Descrição digite "Artigos sobre o Drupal"
- Em Texto de Ajuda também digite "Artigos sobre o Drupal"
- Em Tipos vamos marcar aqueles que poderão usar esta categoria.
Como quero que esta seção seja criada em colaboração, podendo vários autores trabalhar num mesmo artigo,
vamos selecionar apenas "Página de Livro"
- Em Hierarquia vamos selecionar "Múltipla"
- Marcar "Termos Relacionados" e clicar em Enviar

Criar As SubCategorias/Termos

Agora vamos criar as subcategorias para cada autor
- Clicar no link "Adicionar termos" correspondente a Artigos
- Em Nome do termo digite "Autor A"
- Em Descrição digite "Artigos do Autor A"
- Em Peso selecione "1" e clique em Enviar

De forma semelhante crie o termo do Autor B.
- Clicar no link "Adicionar termos" correspondente a Artigos
- Em Nome do termo digite "Autor B"
- Em Descrição digite "Artigos do Autor B"
- Em Peso selecione "2" e clique em Enviar

Observe que o Autor B tem peso 2, isso para separar em ordem.

Criar o menu e os dois submenus para nossos dois termos

Lembre que a categoria e os termos são apenas capas que serão administradas via menu e exibirão o conteúdo, ou seja,
sua finalidade é de organização.

- Clique em Administrar - Menus
- Abaixo de Navegação clique em Novo item
- Em Título digite Artigos
- Em Descrição digite "Artigos sobre o Drupal"
- Em Endereço entre com ""
- Em Peso entre com o número da ordem desejada para o Menu
- Clique em Enviar

Agora vamos criar um novo item de menu, agora para abrigar o primeiro Termo (Autor A):

Antes de criar os submenus temos que conhecer os links dos termos criados (Autor A e Autor B).
Para isso vá em Categorias e clique em Listar termos dos Artigos.
Basta pousar o mouse sobre o link de cada um dos autores, Autor A e Autor B, que aparecerá um link
mais ou menos com taxonomy/term/3 ou coisa parecida, dependendo de quantos termos já criastes.

- Abaixo de Navegação clique em Novo item
- Em Título digite "Autor A"
- Em Descrição digite "Artigos do Autor A"
- Em Endereço entre com "taxonomy/term/3" sem as aspas
- Em Item superior selecione Artigos, que será o menu deste item
- Em Peso selecione 1, para ser o primeiro
- Clique em Enviar
Observe que tem uma opção Expandido, que pode ser usada para criar menus que já aparecem abertos

De forma semelhante crie o item para o Autor B, apenas alterando o Peso para 2.

Criando o Conteúdo a ser exibido no Menu

- Clique no menu Criar Conteúdo e selecione Página de Livro
- Em Título digite "Primeiro Artigo"
- Na combo Artigos selecione Autor A
- Em Corpo digite o texto do primeiro artigo do Autor A
- Em Formato de entrada podemos selecionar o formato. Caso este autor seja de confiança e use o TinyMCE devemos
selecionar FULL HTML
- Em Peso selecione 1
- Em Configurações do endereço digite "primeiro" ou o que desejar para endereço do artigo.
- Em Configurações do Menu digite para Título "Primeiro Artigo" e o mesmo para Descrição
- Em Item superior selecione Navegação - Artigos - Autor A
- Em Peso selecione 1
- Clique em Enviar

Criando Menu tipo o Tutoriais do Drupal Brasil e do Drupal Ribafs

- Criamos uma categoria com um nome como "Colaborações"
- Criamos vários termos para esta categoria e anotamos seus endereços:
taxonomy/term/3, taxonomy/term/4, taxonomy/term/5, etc.
- Criamos tantos itens de menu quantos forem os termos, no caso, do tipo Primary Links, para cada um atribuindo o respectivo endereço do termo
- Então criamos o conteúdo para cada item de menu. Lembrando que cada termo e cada item de menu e conteúdo deve ter pesos diferentes.
Os pesos correspondem à ordenação dos mesmos.

Adicionar conteúdo com Imagens

- Habilite módulo upload
- Configurar o usuário/grupo para poder fazer upload
- Ver configurações do upload
- Habilitar o tipo de conteúdo para upload
- Criar conteúdo
- Anexar o arquivo (copie o path do arquivo na caixa de upload)
- Use no conteúdo. Assumindo que o filtro permite usar .

Formatos de Entrada

O Drupal traz a opção de vários formatos de entrada:
- HTML Filtrado (padrão)
- Código PHP (onde o código digitado pode ser executado)
- HTML completo

Segurança

Atenção: qualquer direito que permita ao PHP administrar filtros deve ser delegado com extremo cuidado.

O HTML full só deve ser configurado para sites de extrema confiabilidade.

Caso tenhamos a segurança como importante para o site devemos assinar a lista de segurança do Drupal
http://drupal.org/security

Depois que o site estiver concluído é prudente criar uma outra conta para administrar o site, mas com restrições,
para evitar o uso como super usuário.

Gerenciamento de Usuários

Por default vem com dois grupos (roles, papéis) de usuários: anônimos e autenticados
O usuário UID1 é o super usuário, tem poderes para fazer qualquer coisa com o site.

Controle de Acessos - aqui temos acesso aos privilégios dos grupos de usuários atuais para cada seção do site.
Onde definimos as permissões dos grupos/papeis/roles de usuários.

Opções de Usuário - Onde decidimos como será o cadastro de usuários. Temos 3 alternativas:

- Apenas um administrador pode criar uma nova conta de usuário.
- Um visitante pode criar uma conta sem a aprovação de um administrador.
- Visitantes podem criar contas, mas será necessário a aprovação do administrador.

Papeis - Os papéis permitem que você regule e ajuste a administração do Drupal. Um papel define um
grupo de usuários que tem certos privilégios definidos nas permissões de usuário. Exemplos de papel
incluem: usuário anônimo, usuário autenticado, moderador, administrador, etc. Nesta área você pode
definir os nomes dos vários papéis. Para remover um papel, clique em "editar".

Perfis - aqui podemos personalizar o conteúdo visto pelos usuários, permitindo visualizar uns e ocultando outros.

Regras de acesso - Criar regras para nome de usuário e endereço de email, tanto para novas quanto para
aquelas previamente registradas (usuários que estiverem logados neste momento não serão deslogados).
Se um nome de usuário ou endereço de email for enquadrado em uma regra de proibição, então a conta não
será criada ou, se já registrada, não vai mais poder fazer login. Uma regra de host é efetiva para toda
requisição de página, não apenas para o registro de usuários.

Usuários - aqui podemos criar novos usuários e configurar os existentes.

Podemos criar usuários e grupos à vontade, passando ou retirando privilégios de acordo com nossas necessidades.

Para cada usuário podemos:
- escolher um ou mais grupos a que pertencerá
- idioma (ele até poderá escolher dependendo da configuração do site)
- escolher o tema
- além de outra opções como fuso horário, formulário de contato, etc

Observe que podemos criar um grupo de confiança, configurar o mesmo para usar o TinyMCE com HTML Full.
Para maior segurança permitir que apenas o administrador cadastre usuários.

Dicas extras

- Acesso ao site quando perdemos a página inicial, quando instalamos um template que não mostra o login (por não ter a região com o mesmo) ou por outro motivo qualquer:
http://localhost/drupal/?q=user


Passando argumentos para um bloco

Digamos que você construi um módulo para controle de produtos, nesse seu módulo você possui uma página construída através do módulo, com o hook_menu, por exemplo: http://localhost/drupal/produto

No hook_menu você tem um callback que aponta para a função produto_get_content, essa função é responsável por trazer o nome do produto no título da página, através da função drupal_set_title, ela não busca mais nenhuma informação.

O que queremos é quando o usuário acessar http://localhost/drupal/produto/10 passando o parâmetro 10 seja buscada todas informações referente ao produto, para fazer isso podemos construir views do tipo bloco, cada view fica responsável por mostrar um tipo de conteúdo, uma mostra a descrição do produto, outra mostra as fotos, e podemos criar as views conforme a necessidade.

A página http://localhost/drupal/produto/10 será composta de vários blocos, o problema que temos é passar o parâmetro 10 para cada view, as views do tipo bloco não consegue pegar de forma automática o parâmetro da url para usar como argumento na view.

Nós podemos forçar a passagem desse argumento para view, isso pode ser feito usando uma opção mais avançada de argumento no Drupal.

Na construção da view você deve ir até o fieldset Arguments, escolher o tipo do argumento que você irá passar, no nosso caso nós precisamos do argumento do tipo código do produto, esse tipo de argumento não existe por padrão, você precisa que o seu módulo crie esse argumento, para fazer isso você pode visitar http://drupal-br.org/prover-campos-personalizados-para-o-views e http://drupal.org/handbook/modules/views/api nesses endereços você pode descobrir como fazer isso.

Agora precisamos pegar o argumento 10 da url http://localhost/drupal/produto/10 podemos fazer isso através da função arg(x) do Drupal.

Para forçar a passagem do argumento 10 para view do tipo bloco bastar ir no fieldset Arguments abrir o fieldset Argument Handling Code e inserir o código abaixo na textarea:


$args[0] = arg(1);

return $args;

Esse código pega o parâmetro 10 da url insere no vetor $args e retorna o valor. Fazendo dessa forma a view do tipo bloco consegue obter o parâmetro.

Agora você consegue montar diversos blocos no seu site que trazem os conteúdos referente ao produto.

Você pode usar isso para as mais diversas funcionalidades.


Prover campos personalizados para o Views

Hoje vou mostrar como criar um pequeno módulo com um campo que é gravado em uma tabela própria, e em seguida disponibilizar esse campo para filtragem e ordenação no módulo Views.
Antes de começarmos, prcisamos nos ambientar. Para quem nunca criou um módulo para o Drupal, recomendo, antes de ler esse tutorial, ler essa documentação: http://drupal.org/node/508
Um outro requisito para entender plenamente esse tutorial(sua segunda parte, mais especificamente), é um pouco de conhecimento do módulo Views. Para baixar e testar esse módulo, acesse http://drupal.org/project/views Uma documentação inicial está disponível em http://drupal.org/node/47412
Ao final desse artigo, você poderá baixar o módulo de teste que vamos criar.
Sabendo essas coisas vamos lá.

Parte 1 - Criação do módulo

Para esse tutorial vamos assumir alguns padrões:

  • O nome do módulo será "modteste" (sem aspas, obviamente);
  • O nome do campo adicional será "meucampo" e seu label será "Meu campo";
  • O nome das tabelas que iremos criar são: modteste e modteste_options

Antes de mais nada precisamos criar um módulo e, para isso, precisamos criar uma pasta com o nome do nosso módulo.
Assim, acesse a pasta modules da sua instalação do Drupal e crie uma pasta chamada modteste. Dentro dessa pasta crie, a princípio, 3 arquivos: modteste.info modteste.install modteste.module
Cada arquivo desse tem um propósito:

  • modteste.info: Esse arquivo informa ao Drupal qual a versão, subgrupo e outras informações de instalação do seu módulo;
  • modteste.install: Aqui temos a criação e remoção de tabelas, parâmetros de configuração etc. Se você planeja alguma funcionalidade para o momento da instalação ou remoção do seu módulo, você deve definr aqui;
  • modteste.module: Esse é o módulo em sí. É aqui que toda a magia acontece;

Abaixo temos um exemplo do arquivo modteste.info (clique na imagem para ampliar)

Explicando:
name = modteste: Esse é o nome do módulo
description = Permite criar um tipo de teste: Essa é a descrição do módulo. Ela será mostrada na área de instalação de módulos do Drupal
package = Testes: Esse é o pacote do módulo. Na área de instalação de módulos do Drupal, esse será o nome do separador (fieldset) que conterá o seu módulo
version = VERSION: Aqui é a versão do seu módulo. Se você deixar VERSION ele pegará a versão atual do Drupal. É recomendável que você defina números de versões coerentes com o Drupal que você está utilizando. Assim, se a série do Drupal para a qual o seu módulo foi feito é a 5, utilize algo como 5.x-0.1, onde: 5.x é a série para a qual o seu módulo foi feito e 0.1 é efetivamente a versão do seu módulo. Uma coisa importante sobre as versões é notar que mesmo que você faça um módulo quando o Drupal estava na versão 5.3, utilize 5.x pois você está fazendo o módulo para essa série, e não para a versão específica, uma vez que o que vem depois do ponto é só o número de bugfixes da série.
A seguir o arquivo modteste.install (clique na imagem para ampliar):

Explicando:
Esse arquivo conta, essencialmente com duas funções:
modteste_install(): função que realiza o procedimento de instalação. É executada quando se marca o checkbox e envia o formulário na área de instalação de módulos do Drupal.
modteste_uninstall(): função que realiza o procedimento de desinstalação. É executada quando o módulo é desabilitado na área de instalação de módulos do Drupal, e em seguida marcado o checkbox e enviado o formulário na aba Desinstalar, também na área de instalação de módulos do Drupal.
Note que, no exemplo, só foram feitas a criação e exclusão de tabelas. No entanto pode-se realizar qualquer ação nesse momento. Isso vai depender do que o seu módulo precisa para cada momento. Esse arquivo só é necessário, efetivamente, se você vai realizar alguma configuração no momento da instalação/desinstalação.
Por fim temos o arquivo modteste.module. Vamos ver os pontos chave desse arquivo. Pretendo escrever um outro tutorial explicando, mais detalhadamente, como criar um módulo.
Primeiro a função modteste_uninstall() que montra o formulário em si:

/**
* Implementação do hook_form().
*/

function modteste_form(&$node) {
$type = node_get_types('type', $node);
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label) ,
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => -5
);
$form['meucampo'] = array(
'#type'=>'radios',
'#title'=> t('Um campo a mais'),
'#default_value' => $node->meucampo,
'#options'=> _modteste_options() );
$form['body_filter']['body'] = array(
'#type' => 'textarea',
'#title' => check_plain($type->body_label) ,
'#default_value' => $node->body,
'#rows' => 20,
'#required' => TRUE);
$form['body_filter']['filter'] = filter_form($node->format);
return $form;
}

Essa função implementa 3 campos. Dois desses campos são padrão para qualquer tipo de conteúdo no Drupal(node): o título e o corpo(title e body).
Todo tipo no Drupal possui um título e um copro. Esses dados são, por padrão, gravados na tabela node(somente o title) e node_revisions(title e body).
O terceiro campo do formulário é o nosso campo personalizado. Esse campo será, na verdade, um conjunto de radio buttons onde podemos escolher um valor.
Um princípio importante na hora de trabalhar com o Drupal é não mexer nos módulos e tabelas que ele cria, pois essas mudanças podem se perder quando você atualizar o Drupal na próxima vez. Só mexa no que o Drupal já traz se você estiver corrigindo um bug(correção que você deve enviar para os desenvolvedores do Drupal, para poder melhorá-lo para a sua próxima versão), caso contrário evite.
Tendo isso em mente, criamos uma tabela com o mesmo nome do nosso módulo (modteste). Essa tabela terá dois campos: um será o nosso campo efetivamente, e o segundo o nid(node id) que é o "elo"(foreign key) entre o nosso campo e o node dele.
Se você prestou atenção no arquivo modteste.install verá que ele cria uma segunda tabela, e já a popula. Essa é uma tabela auxiliar para o nosso módulo e será nela que iremos guardar os valores possíveis para o nosso campo.
Como já foi dito esse terceiro campo(meucampo) é um conjunto de radio buttons. Para tanto, a sua definição pede uma opção chamada "#options" que nada mais é que um array contendo o par chave/valor para cada um dos radio buttons.
No nosso caso, esses valores vêm de uma tabela auxiliar chamada modteste_options então fiz uma pequena função para carregar esses valores:

function _modteste_options(){
$result = db_query("SELECT * FROM {modteste_options}");
while ($option = db_fetch_array($result)) {
$options[$option['mid']] = $option['name'];
}
return $options;
}

Note que essa função começa com o caractere _ .Essa é uma convenção do Drupal que significa que é uma função interna para esse módulo.
Por fim temos as seguintes funções:

function modteste_insert($node) {
if (user_access('criar um teste')) {
db_query("INSERT INTO {modteste} (nid, meucampo) VALUES (%d, %d)", $node->nid, $node->meucampo);
}
}

function modteste_update($node) {
if (user_access('alterar seu próprio teste')) {
db_query("UPDATE {modteste} SET nid=%d, meucampo=%d WHERE nid=%d", $node->nid, $node->meucampo, $node->nid);
}
}

function modteste_delete($node) {
if (user_access('alterar seu próprio teste')) {
db_query("DELETE FROM {modteste} WHERE nid=%d", $node->nid);
}
}

Essas três funções fazem, respectivamente, a inserção, alteração e remoção do nosso campo na tabela auxiliar.
Note que não precisamos escrever nenhuma instrução SQL para a tabela node ou node_revisions. Isso é feito internamente pelo Drupal.
Esses são os pontos chave para o nosso módulo. Como dito antes, você pode baixar o módulo no final desse artigo e ver como é feito o restante do módulo.

Parte 2 - Integração com o módulo Views

Agora vamos ver como integrar nosso módulo com o módulo Views.
Nesse artigo não vamos cobrir o módulo Views, apenas a itegração do nosso módulo com ele.
O módulo Views permite criar visualizações personalizadas para determinadas situações. Existem diversas opções para criar Views, recomendo você dar uma olhada com mais calma nesse módulo. Em breve devo lançar um screencast só com o módulo views.
O módulo Views, assim como o Drupal inteiro, trabalha com hooks que nada mais são do que funções que podem ser extendidas.
Assim, o módulo Views implementa algumas funções que podemos extender para habilitar o nosso campo personalizado para construção de views. Vamos ver 2 dessas funções:
hook_views_tables(): Nessa função são definidas tabelas usadas para o relacionamento entr o módulo Views e o seu módulo
hook_views_arguments(): Nessa função são definidos os campos que podem ser usados como argumentos(via URL) para uma view.
Abaixo temos o código dessas duas funções:

function modteste_views_tables() {
$tables['modteste'] = array(
'name' => 'modteste',
'provider' => 'internal',
'join' => array(
'left' => array(
'table' => 'node',
'field' => 'nid'
),
'right' => array(
'field' => 'nid'
)
),
"filters" => array(
'meucampo' => array(
'name' => t('Teste: Meu campo'),
'list' => 'views_handler_filter_modteste_meu_campo',
'operator' => 'views_handler_operator_andor',
'help' => t('Permite você filtrar pelo Meu Campo'),
),
),
'sorts' => array(
'meucampo' => array(
'name' => t('Teste: Meu Campo'),
'handler' => 'views_handler_sort_modteste_sort',
'help' => t('Ordenar pelo meu campo'),
),
),
);
return $tables;
}
function modteste_views_arguments() {
$arguments = array(
'modteste_meucampo' => array(
'name' => t("Teste: Meu campo"),
'handler' => "views_handler_arg_modteste_meucampo",
),
);
return $arguments;
}

Na função modteste_views_tables() nós definimos qual o nome da tabela que vamos utilizar para o relacionamento e como esse relacionamento se dará(veja o array join nessa função). Também definimos os filtros(filters) e as ordenações(sorts). Para esses dois ultimos, o módulo faz uso de funções callback, que nada mais são funções que são chamadas para executar e retornar um valor(ou conjunto de valores) sem precisarmos escrevê-la no local onde a chamamos.
É nessas funções callback que está o código a ser executado quando filtrarmos ou ordenarmos um campo.
A função modteste_views_arguments() tem um funcionamento semelhante. Ela especifica o nome de um campo(no caso acima modteste_meucampo) e uma função callback que será usada para executar a filtragem. Aparentemente ela é semelhante ao filters da outra função, mas a diferença essêncial é que ela implementa o nosso campo como um argumento para filtragem pela URL. Assim, eu posso chamar minha view, passando por argumento na URL o valor(no caso) do Meu Campo e a view fará a filtragem por nodes que tenham Meu Campo com esse valor.
Por fim, para manter as coisas organizadas, criamos um arquivo chamado views_modteste.inc e colocamos todas as funções de view nesse arquivo(as duas funções que estamos extendendo e suas callback). No arquivo modteste.module criamos então um mecanismo para que o Drupal encontre esse arquivo, criando uma função hook_init() como a abaixo:

function modteste_init() {
if (module_exists('views')) {
include_once('./'. drupal_get_path('module', 'modteste') .'/views_modteste.inc');
}
}

Essa função irá carregar as nossas funções de views, somente se exisiter o módulo views (e esse estiver habilitado).
Assim concluímos esse tutorial.
Espero que ele sirva para você.
Esteja à vontade para comentar.
Abraço

Relatos individuais sobre a construção de sites

O objetivo desse tópico é que as pessoas façam relatos sobre como construíram seus sites (o que, como, de que jeito, etc.).

Muitos novatos não sabem como usar muitas funções e recursos do drupal e dessa forma sentem uma redobrada dificuldade no contato inicial com o cms. Existindo à disposição relatos individuais da construção de variados sites e diferentes módulos e recursos possam sentir-se mais seguros no caminho das pedras.

Para inaugurar a seção, apresento o site que estou construindo!




Tipos alternativos de criação de conteúdo

Ou "Quem não tem cão caça com gato"

Na minha atual limitação em trabalhar com o view's e com as permissões de acesso por taxonomias/categorias estou testando uma forma muito peculiar de tipos de conteúdo, criando um tipo para cada grupo de papéis de usuários, como se vê abaixo:

<>Permissões para criar conteúdo para cada local de publicação de conteúdo:

- Textos para Discussão:
> Criei um novo tipo de conteúdo para cada local de publicação de conteúdo;
>> "Texto individual": Página de livro que os professores só podem alocar no respectivo item de menu;
>> "Texto colaborativo": Página de livro que só pode ser alocada pelos autores no respectivo item de menu;

- Artigos:
> "Artigo individual": Página de livro onde o professor só pode alocar neste item de menu;
> "Artigo colaborativo": Pagina de livro onde os professores só podem alocar neste local;

- Grupos de Pesquisa:
> "Página X" (Com o nome do grupo) -> Os membros do grupo criam páginas estáticas vinculadas a este item de menu;
> "Texto X" (...) Página de livro que os membros do grupo publicam apenas neste item de menu;

- Disciplinas do Curso:
> "Cadastrar Disciplina": Página estática onde apenas o Coordenador do Curso e o Servidor (funcionário) têm acesso. A página criada não aparece em nenhum item de menu, mas em link na página "Grade Curricular", editada manualmente. Possui campos de categorias específicas (Semestre da disciplina, papel da disciplina [Núcleo do Curso, Complementar, Optativa] e Departamento a qual está vinculada [Deptos de Economia, Computação, Direito, Matemática, Sociologia, Contabilidade, Letras]);

- Agenda (event):
> Criei uma view para cada papel de usuário, mas ainda não sei como utilizá-las no site;

- Project:
> Defini que os professores podem criar um projeto. Defini também que podem selecionar quem fará parte do mesmo;



Creditos: http://drupal-br.org