SlideShare uma empresa Scribd logo
1 de 162
Baixar para ler offline
Desenvolvimento Web com
        Drupal 6




    Prof. Vinícius de Paula
Sociedade da Informação
Vivemos a chamada sociedade da informação, ou talvez
mais adequadamente, a sociedade do conhecimento.
 Nos países de economias mais dinâmicas, estima-se que
  cerca de 65% da capacidade de mão-de-obra esteja
  ocupada com a produção, o tratamento e a disseminação
  de informações.
 Cada vez mais, as organizações, sejam privadas ou
  públicas, dependem da informação para levar a cabo seus
  objetivos.
Informação como Estratégia
No mundo dos negócios, a informação assume uma
dimensão estratégica.
 A informação é a principal matéria prima para todo e
  qualquer processo decisório;
 Toda decisão, por mais simples que seja, envolve
  informações.
O que é CMS?
 CMS (Content Management System) é um sistema de
 gerenciamento de conteúdo, cujo objetivo é
 exatamente o de estruturar e facilitar a criação,
 administração,      distribuição, publicação    e
 disponibilidade da informação.
Principais Características
 Facilidade no Gerenciamento de Conteúdo
Não é necessário saber programar para criar, editar e
gerenciar conteúdo.
 Colaboratividade
Quem esta com a informação é o responsável por
publicá-la.
Vantagens
 Estruturação do processo de autoria;
 Harmonia estética com o resto do site e demais
    conteúdos;
   Melhor estruturação da navegação;
   Permissão granular de acesso às informações
    publicadas;
   Gerenciamento de versão dos conteúdos;
   Diminuição dos custos de manutenção.
Exemplos de CMS
Qual CMS Utilizar?

É a melhor escolha para sites simples,   É recomendado para jornais e portais de
sem grande complexidade.                 comunicação. Exige diversas
                                         configurações no sistema operacional.




                                         É a melhor escolha para sites complexos.
Não é a melhor escolha para sites com
grande número de editores de
conteúdo.
Comparativo

A idealware é uma conceituada organização que realiza pesquisas
sobre softwares sem fins lucrativos.
Em março de 2009, ela realizou uma pesquisa comparando as
principais ferramentas de CMS do mercado.
 Participaram da pesquisa mais de 20 especialistas;
 Foram utilizados 12 quesitos para avaliação.
Qual o significado de Drupal?

   {holandês} druppel          quer dizer   Drop {Inglês}




pronuncia-se Drupal {Inglês}
O que é Drupal?
 É um Sistema Gerenciador de Conteúdos;
 Escrito em PHP;
 Framework de desenvolvimento;
 Ênfase na colaboração entre os usuários;
 Open Source (GPL);
 Totalmente compatível com W3C (W3C compliant).
Breve Histórico
 Criado pelo belga Dries Buytaert;
 Lançado em 2001;
 Derivado do projeto drop.org;
 Versão 5 lançada em janeiro de 2007;
 Atualmente esta na versão 7.
Principais Características
 Confiável e Robusto;
 Eficiente;
 Flexível.
Drupal para os administradores
 Fácil de instalar e configurar;
 Intuitivo e auto-explicativo;
 Altamente configurável.
Drupal para os usuários
 Fácil de configurar;
 Intuitivo e auto-explicativo;
 Organizado.
Onde Utilizar o Drupal
 Portais Corporativos;
 Sites de Comunidades;
 Sites Pessoais;
 Sites Internacionais;
 Educação;
 Arte, Música e Multimídia.
Quem utiliza o
Drupal?
Conceitos e
Características
Tecnologias Envolvidas
Linguagem             PHP


Banco de Dados        MySQL, PostgreSQL


Servidor Web          Apache, lighttpd, IIS


Sistema Operacional   Linux, BSD, Mac OS X, Windows, Solaris
Requisitos para Instalação
Linguagem        PHP 4.3.5 ou superior
                 PHP 5.2.x (recomendado)

Banco de Dados   MySQL 4.1 ou 5.0 (recomendado)
                 PostgreSQL 7.4 ou superior

Servidor Web     Apache 1.3 ou 2.x
                 IIS 5, 6, e 7
Núcleo do Drupal (Drupal Core)
  Gerenciamento de   Gerenciamento de   Gerenciamento de   Pseudônimo de
     Conteúdo            Usuários           Sessão             URL




    Localização         Templates         Organização      Log de Eventos




                           Biblioteca de Funções
Módulos
O Drupal é um framework modular:
 Novas funcionalidades são incluídas em módulos;
 Módulos podem ser habilitados ou desabilitados;
 Módulos são plugins que extendem as funcionalidades
  do Drupal.
Módulos
        Galeria
                                                            Módulo
          de          E-commerce             AdSense
                                                          Customizado
       Imagens




                                             Calendário    Grupos
                       Editores
        Fóruns                                   de           de
                      WYSIWYG
                                              Eventos      Trabalho




     Gerenciamento
                     Gerenciamento        Gerenciamento   Pseudônimo
          de
                          de                   de             de
       Conteúdo
                       Usuários              Sessão          URL




                                                              Log
      Localização      Templates            Organização        de
                                                            Eventos




                            Biblioteca de Funções
Hooks (Ganchos)
 Permite que os módulos interajam com o núcleo do
  Drupal.
 A maneira mais comum de interagir com
  funcionalidades  do   núcleo   do    Drupal é
  implementando “ganchos” nos módulos.
Themes (Temas)
 Representa a aparência do site;
 O Drupal suporta diversas abordagens para a criação
 de templates: Smarty, Template Attribute Language
 for PHP (PHPTAL) e PHPTemplate.
Nodes (Nós)
 É uma unidade mínima de conteúdo;
 Cada conteúdo indexado pelo Drupal recebe um
  identificador de nó.
 Seja uma enquete, uma história, uma página de livro,
  uma imagem, etc.
Nodes (Nós)




        Tipos de conteúdo derivando de nó
Blocks (Blocos)
 Representa um tipo de conteúdo a ser apresentado na
  página;
 Tipicamente, são colocados no sidebar, header ou
  footer da página;
 As regiões onde os blocos podem ser posicionados são
  definidas nos temas.
Estrutura de Diretórios
    Contém as bibliotecas e funções utilizadas pelo Drupal.



    Armazena os arquivos JavaScript, ícones e imagens da instalação
    padrão do Drupal.



    Contém o núcleo dos módulos, cada módulo está em seu próprio
    diretório. .
Estrutura de Diretórios
    Contém os diferentes perfis de instalação para o site.




    Contém as modificações feitas no Drupal em formulários de
    configuração, módulos e temas.
Estrutura de Diretórios
    Contém scripts para a checagem de sintaxe, limpeza de código, executar
    comandos no Drupal via linha de comando e de manipulação com o
    Crontab.

    Contém os arquivos do tema do Drupal.
Estrutura de Arquivos
   Arquivo utilizado para executar tarefas periódicas. Ex.: cálculo de
   estatísticas, etc.



   Arquivo principal que responde as requisições feitas no diretório raiz.




   Arquivo responsável por iniciar a instalação do Drupal.
Estrutura de Arquivos
   Arquivo contendo a implementação padrão para robots exclusion standard.




   Arquivo responsável por atualizar o schema do banco de dados após
   uma atualização de versão do Drupal.



   Arquivo responsável por receber requisições XML-RPC.
Instalação do
Drupal
1) Acesse: http://127.0.0.1/
2) Copie o arquivo sitesdefaultdefault.settings.php e
o renomeie para settings.php. Em seguida de um refresh na página.
3) Acesse: http://127.0.0.1/phpmyadmin/
e crie um novo banco de dados chamado drupal
4) Clique no link Privilégios e em seguida
          Adicionar novo usuário
5) Informe o nome de usuário, servidor e senha.
         Em seguida clique em Executar
6) Selecione o banco de dados drupal e
          clique em executar.
7) Selecione todos os privilégios
      e clique em Executar.
8) Acesse a página de instalação do Drupal
e informe os dados de acesso ao banco de dados.
9) Informe os dados do site e do administrador.
Clique em Save and continue.
Acesse: http://127.0.0.1/
Pós Instalação
Após a instalação, crie os seguintes diretórios em
sitesall:
 modules
 themes
 libraries
Exercícios
1. Realize a instalação do Xamp.

2. Realize a instalação do Drupal.
Administração do
Drupal
Administração do Drupal
A administração do Drupal é dividida em 5 áreas:
 Content management: gerenciamento do conteúdo do site.
 Site building: controle da aparência do site. Qualquer alteração
  no layout pode ser realizada nesta área.
 Site configuration: configurações básicas do site como o
  comportamento do site, nome, configurações de email, cache,
  data e hora, etc.
 User management: gerenciamento de usuários do site, grupo e
  o acesso aos recursos do site.
 Reports: relatórios gerenciais sobre o site.
Fluxo Básico de Administração

         1. Configuração         2. Funcionalidades
         do site (Settings)     Adicionais (Modules)




      4. Postagem de conteúdo   3. Customização de
               (Nodes)             layout (Themes)
Principais
Configurações
Principais Configurações
 Error reporting
Por padrão, os logs de erro são gerados em arquivo e impressos na
tela. Quando o site estiver pronto para produção é recomendado
alterar esta configuração para que os logs de erro sejam gerados
somente no arquivo de logs.
 Input Format
Você pode configurar as formatações (xHTML e PHP) que serão
aceitas quando os usuários digitarem tags nos formulários. Como
boa prática de segurança é recomendado que esta configuração
seja Filtered HTML.
Principais Configurações
 Performance
Durante o desenvolvimento, é recomendado que o cache esteja
desativado. Quando o site estiver pronto para produção o cache
deve ser alterado para normal.
 Site information
Além do nome do site, podemos adicionar um slogan, a missão do
site e uma mensagem no rodapé do site.
 Site maintenance
Se o site precisar ficar indisponível por algum motivo, podemos
adicionar uma mensagem do tipo: “Site em manutenção” para os
usuários.
Exercícios
3. Realize a alteração das seguintes configurações:
a) Geração de logs de erro;
b) Formato de tags aceitas;
c) Performance;
d) Informações do site;
e) Coloque o site fora do ar, e apresente a seguinte mensagem: “Desculpe o transtorno...”.
Site “fora do ar”?
Para colocar o site “no ar” novamente, execute os
seguintes comandos via PHPMyAdmin:

UPDATE variable SET value = 's:1:"0";'
WHERE name='site_offline';

DELETE FROM cache WHERE cid = 'variables';
Instalação
de Módulos
Instalação de Módulos
1. Faça o download do módulo de sua preferência na página oficial
de módulos do Drupal: http://drupal.org/project/Modules
2. Descompacte o arquivo do módulo dentro do diretório: modules
Caso seja utilizado o recurso de multi-site, o arquivo deve ser
descompactado em: sites/all/modules
3. Leia as instruções de instalação do módulo no arquivo
INSTALL.txt
4. Ative o módulo em: Administrar › Construção do site > Módulos
5. Após ativado, as configurações do módulo podem ser realizadas
em: Administrar › Configuração do site
Módulos
Essenciais
Administration menu
Este módulo habilita um menu “drop down” de
navegação com todas as opções administrativas.
WYSIWYG API (What You See Is What You Get)
Este módulo habilita um editor HTML em modo visual
no lugar do campo textarea dos formulários.




             Exemplo utilizando o editor FCKeditor
Content Constructor Kit (CCK)
Este módulo auxilia na criação de:
 tipos de conteúdo (Content types);
 campos personalizados (Fields).
Content Types (Tipos de Conteúdo)
O que é um tipo de conteúdo?
 É a representação de algum tipo de informação.
Exemplos:
 Página;
 Postagem de blog;
 Eventos;
 Galeria de Imagens.
Content Types (Tipos de Conteúdo)
Estrutura padrão de campos de um tipo de conteúdo:
Content Types (Tipos de Conteúdo)
Campos podem ser adicionados aos tipos de conteúdo:
File field
Este módulo adiciona um campo personalizado para
o upload de arquivos.
Image field
Este módulo possibilita a validação das dimensões e o
upload de imagens via AJAX no formulário de criação
de conteúdo.



               Configuração do campo em Content Type




               Utilização do campo em Create Content
ImageCache
Este módulo permite o tratamento das imagens
enviadas pelos campos de upload. As imagens
poderão ser redimensionadas, cortadas, convertidas em
preto e branco, etc.
Lightbox2
Este módulo habilita a abertura de imagens em
elegantes janelas modais, de forma dinâmica.
Views
Este módulo possibilita a montagem listas, blocos e
tabelas apenas informando o tipo de conteúdo, campos,
ordenação, quantidade de itens por página, etc.
Galeria de Imagens
Módulos utilizados:
 CCK
 Filefield
 ImageApi
 ImageCache
 ImageField
 Lightbox2
 Views
Galeria de Imagens
1)   Adicionar o Tipo de Conteúdo "Galeria de Imagens“;
2)   Adicionar um presset com o módulo “Image Cache”:
     Administrar › Construção do site > ImageCache
     foto_miniatura: Add Scale 120 x 180
     foto_ampliada: Add Scale 800 x 600
1)   Adicionar em "manage fields" o campo File com o tipo Image.
     Administrar › Organizar conteúdo > Galeria_Imagens > Manage fields
     Label: Imagem
     Field name: field_imagem.
4)   Em: Content management › Galeria de Imagens > Manage fields > Display
     fields...
Gallery Assist
Este módulo permite a criação de galerias de imagens
customizáveis de forma simples e transparente.
Não possui nenhuma dependência dos módulos:
 CCK, Views, ImageCache e Image/Image Gallery.
Módulos adicionais:
 Gallery Assist Lightboxes;
 Gallery Assist for the Cooliris viewer.
Gallery Assist com HighSlide
Gallery Assist com FancyBox
Webform
Este módulo auxilia na criação de formulários dinâmicos.
Captcha
Este módulo permite a adição de um Captcha (imagem
ou cálculo matemático) nos formulários.
Taxonomy (Taxonomia)
Taxonomia é a ciência da identificação.
 O módulo Taxonomy permite categorizar os
  conteúdos a partir de uma lista de vocabulários;
 Podemos ter várias classificações diferentes para o
  mesmo tipo de conteúdo ou node;
 O uso da taxonomia facilita o acesso à informação.
Taxonomy (Taxonomia)
                               Notícias         Vocabulário




              Esporte          Cultura          Lazer
                                                              Termos




    Futebol             Basquete


                         Exemplo de Taxonomia
Taxonomy (Taxonomia)
Taxonomy (Taxonomia)
Taxonomy Blocks
Este módulo possibilita a exibição de um bloco contendo os
vocabulários e seus termos.
Panels
Este módulo capacita o site a ter uma visualização em painéis.
Ele é peça fundamental para a construção do layout da página.
Instalação
de Temas
Instalação de Temas
1. Faça o download do módulo de sua preferência na página oficial
de módulos do Drupal: http://drupal.org/project/Themes
2. Descompacte o arquivo do módulo dentro do diretório: themes
Caso seja utilizado o recurso de multi-site, o arquivo deve ser
descompactado em: sites/all/themes
3. Ative o tema em: Administrar > Construção do Site > Temas
Desenvolvimento
de Temas
O que é um tema?
 É uma coleção de arquivos utilizados para criar uma
 interface para o usuário final.
O que é um template?
 É a forma como os componentes ou elementos de um
  tema são distribuídos em um espaço limitado e
  definido previamente.
 Todo tema possui um template.
Definição do Layout para o Tema
 Com o Drupal é possível ativar ou desativar as colunas
  esquerda ou direita do layout.
 Caso o layout necessite de 3 ou 2 colunas é preciso
  projetar o site com suporte a 3 colunas.
Camadas do Layout
                    Legenda
                       HTML

                       BODY

                       CONTAINER

                       HEADER

                       SIDEBAR 1

                       MAIN CONTENT

                       SIDEBAR 2

                       FOOTER
Estrutura do Layout
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
Estrutura do Layout
<div id="container">
  <div id="header">
    <h1>Header</h1>
</div>
  <div id="sidebar1">
    <h3>Sidebar1 </h3>
    <p>Donec eu mi sed turpis feugiat feugiat. Integer turpis arcu, pellentesque   eget,
   cursus et, fermentum ut, sapien. </p>
  </div>
  <div id="sidebar2">
    <h3>Sidebar2 </h3>
    <p>Donec eu mi sed turpis feugiat feugiat. Integer turpis arcu, pellentesque   eget,
   cursus et, fermentum ut, sapien. </p>
  </div>
Estrutura do Layout
 <div id="mainContent">
    <h1> Main Content </h1>
    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent aliquam, justo
   convallis luctus rutrum, erat nulla fermentum diam, at nonummy quam ante ac quam. Maecenas
   urna purus, fermentum id, molestie in, commodo porttitor, felis. Nam blandit quam ut lacus.
   Quisque ornare risus quis ligula. Phasellus tristique purus a augue condimentum adipiscing.
   Aenean sagittis. Etiam leo pede, rhoncus venenatis, tristique in, vulputate at, odio. Donec
   et ipsum et sapien vehicula nonummy. Suspendisse potenti. </p>
    <h2>H2 level heading </h2>
    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent aliquam, justo
   convallis luctus rutrum, erat nulla fermentum diam, at nonummy quam ante ac quam. Maecenas
   urna purus, fermentum id, molestie in, commodo porttitor, felis. Nam blandit quam ut lacus.
   Quisque ornare risus quis ligula. Phasellus tristique purus a augue condimentum adipiscing.
   Aenean sagittis. Etiam leo pede, rhoncus venenatis, tristique in, vulputate at, odio.</p>
  </div>
  <br class="clearfloat" />
  <div id="footer">
    <p>Footer</p>
  </div>
</div>
</body>
</html>
Temas no Drupal
 O Drupal possui um motor de temas interno e uma
  ferramenta de templates (PHPTemplate).
 Outras ferramentas de templates podem ser
  utilizadas: Smarty, PHPTAL, XTemplate, etc.
Estrutura de um Tema
Estrutura de um Tema
 .info
   Este arquivo com extensão ".info" e com o nome do tema
   é necessário para que o Drupal encontre seu tema, e é ele
   quem vai gerar o nome interno do tema.
 .tpl.php
   São os arquivos de templates processados pelo motor do
   tema. Cada arquivo .tpl.php é responsável por aplicar
   temas a fragmentos de dados.
Estrutura de um Tema
 template.php
   Este é o arquivo que contém a parte lógica do tema,
     ou
   seja o código PHP, para não misturá-lo com a parte de
   processamento e controle do layout. Nele podemos
   sobrescrever as funções usadas nos temas.
 logo.png
   É a logomarca utilizado pelo tema.
Estrutura de um Tema
 style.css
   É a folha de estilos a ser utilizada pelo tema.
 screenshot.png
   É uma miniatura para dar uma visualização prévia na
     área
   de administração de temas.
Estrutura de um Tema
 page.tpl.php
   Template responsável por definir o esqueleto do
    tema.
 block.tpl.php
   Template responsável por definir o layout dos blocos.
 node.tpl.php
   Template responsável por definir o layout de um
    node.
Desenvolvimento
de Módulos
Desenvolvimento de Módulos
 Um módulo é uma coleção de arquivos contendo um
  conjunto de rotinas escritas em PHP.
 Os módulos possuem como características boa
  práticas de design e programação, além da
  modularidade.
Informações sobre o Módulo
 Todo módulo possui um arquivo modulename.info
  contendo informações sobre o módulo.

; $Id: taxonomia_em_bloco.info,v 1.0 2010/01/09 10:00:00
name = Taxonomia em Bloco
description = "Este m&oacute;dulo &eacute; utilizado para listar as
  Taxonomias em um Bloco em uma determinada regi&atilde;o do site."
dependencies[] = taxonomy
package = "M&oacute;dulos Personalizados"
core = "6.x"
project = "taxonomia_em_bloco"
Informações sobre o Módulo
 Help Hook: este hook fornece um texto de ajuda e
  informações adicionais sobre o módulo,
  disponibilizadas no Help (/admin/help/). A função a
  ser implementada é a hook_help().

function taxonomia_em_bloco_help($section) {
  switch ($section) {
    case 'admin/help#taxonomia_em_bloco':
      $output = "Este m&oacute;dulo &eacute; utilizado para listar as
  Taxonomias em um determinado Bloco do site.";
  return $output;
  }
}
        Função integrante do arquivo taxonomia_em_bloco.module
Permissões de Acesso
 Perm Hook: com este hook podemos definir quais
  permissões serão disponibilizadas para o módulo. A
  função a ser implementada é a hook_perm.
 Uma vez definidas as permissões do módulo, o admin
  pode definir as roles que possuem estas permissões
  em: Administer » User management » Permissions

function taxonomia_em_bloco_perm() {
  return array('access taxonomia_em_bloco', 'administer
  taxonomia_em_bloco');
}
        Função integrante do arquivo taxonomia_em_bloco.module
Declaração do Bloco
 Block Hook: com este hook podemos definir um
  bloco para o módulo. A função a ser implementada é a
  hook_block.

function taxonomia_em_bloco_block($op = 'list', $delta = 0) {
...
}
       Função integrante do arquivo taxonomia_em_bloco.module
Declaração do Bloco
 A função do bloco recebe como parâmetro:
  $op (operação): hook_block() fornece 4 tipos de
  operações:
   list: lista os blocos definidos no módulo e como ele será visto na página:
    Administer >> Site Building >> Blocks
   view: processa o bloco quando habilitado em alguma região
    apresentando o seu conteúdo.
   configure: formulário de configuração para o bloco.
   save: salva as opções de configuração.
Declaração do Bloco
 $delta: um módulo pode definir mais de um bloco na
 operação “list”. Cada bloco possui um código “delta”
 definido. O código “delta” é que identificará qual bloco
 do módulo será executado pela operação.
 O módulo user (Drupal core) é um exemplo de módulo
 contendo múltiplos blocos.
Construção do Módulo
if ($op == 'list')
 {
   $blocks[0]['info'] = 'Taxonomia em Bloco';
 return $blocks;
 }
             Arquivo taxonomia_em_bloco.module
Construção do Módulo
 $blocks: variável utilizada para armazenar alguma informação referente
  ao bloco antes de retorná-la.
 $blocks[0]: a variável $blocks é um array. Cada item do array representa
  um bloco fornecido pelo módulo. O item do array corresponde ao
  código “delta” a ser utilizado pelas operações.
 $block[0]["info"]: é o título do bloco a ser apresentado na página
  Administer >> Site Building >> Blocks
Construção do Módulo
if ($op == 'view')
 {
   $vid        = variable_get('taxonomia_em_bloco_settings_vid',1);
   $node_count =
 variable_get('taxonomia_em_bloco_settings_node_count',0);
   $num_term   =
 variable_get('taxonomia_em_bloco_settings_max_term',0);
   $order_by   =
 variable_get('taxonomia_em_bloco_settings_order_by', 0)==0 ? 'name'
 : 'weight';
   $order_type =
 variable_get('taxonomia_em_bloco_settings_order_type', 0)==0 ?
 'ASC' : 'DESC';




                Arquivo taxonomia_em_bloco.module
Construção do Módulo
 $vid: representa o ID do vocabulário.
 $node_count: total de nodes.
 $num_term: número de termos a serem apresentados.
 $order_by: forma de ordenação.
 $order_type: tipo de ordenação.
Construção do Módulo
 A função variable_get recupera o valor de uma
 determinada variável na tabela variable. Caso a
 variável não exista, um valor padrão é atribuído.

$vid = variable_get('taxonomia_em_bloco_settings_vid',1);


 Caso a variável taxonomia_em_bloco_settings_vid ainda
  não tenha sido “setada”, o valor 1 é atribuído à variável
 $vid.
Construção do Módulo
switch($delta) {
     case 0:
       $block['subject'] = t('Taxonomia em Bloco');
       $output = '';

    if ($num_term == 0) {
      $sql = " SELECT td.tid, td.name, th.parent from {term_data} td "
          ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid "
          ." WHERE vid='%d' AND th.parent=0 ORDER BY %s %s";
    } else {
      $sql = " SELECT td.tid, td.name, th.parent from {term_data} td "
          ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid "
          ." WHERE vid='%d' AND th.parent=0 ORDER BY %s %s LIMIT %d";
    }
    $term_parents = db_query($sql, $vid, $order_by, $order_type, $num_term );
    $output .= '<ul class="menu">';



                   Arquivo taxonomia_em_bloco.module
Construção do Módulo
 $block['subject']: representa o título do bloco.
 $output: variável que representará o conteúdo do
  bloco a ser visualizado pelo usuário.
 db_query(): função que executa uma instrução SQL
  no banco de dados. Caso ocorra algum problema na
  execução do SQL, é retornado FALSE.
Construção do Módulo
while ($term_parent = db_fetch_object($term_parents)) {
       $tid_parent = $term_parent->tid;
       $name_parent= $term_parent->name;
       $output .= '<li>';
       $term_parent = taxonomy_get_term($tid_parent);

       $output .= l(t($name_parent), taxonomy_term_path($term_parent));

      if ($node_count) {
        $total_parent = db_result(db_query("SELECT COUNT(nid) FROM
 {term_node} WHERE tid = %d", $tid_parent));
        $output .= " ($total_parent)";
      }
      $output .= "</li>";

                  Arquivo taxonomia_em_bloco.module
Construção do Módulo
 db_fetch_object(): função que recupera o resultado
  de uma linha da query executada como um objeto.
 taxonomy_get_term(): função que retorna um
  objeto Termo com base no ID do Termo.
 taxonomy_term_path(): função que recupera o
  caminho do termo, podendo ser utilizado na URL do
  link.
 db_result(): função que retorna o total de registros
  afetados por uma query.
Construção do Módulo
 t(): traduz uma string para a página de linguagens.
  Todo texto que será apresentado ao usuário fora de
  uma página deve ser executado através desta função.
 l(): formata um link interno. Recebe como parâmetro
  o texto do link e o seu caminho.
Construção do Módulo
$sql_count_childs = " SELECT count(td.tid) from {term_data} td "
                    ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid "
                    ." WHERE td.vid='%d' AND th.parent='%d'";
$count_child = db_result(db_query($sql_count_childs, $vid, $tid_parent));

if ($count_child) {
 if ($num_term == 0) {
    $sql_term_childs = " SELECT td.tid, td.name from {term_data} td "
                      ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid "
                      ." WHERE vid='%d' AND th.parent='%d' ORDER BY %s %s";
 } else {
   $sql_term_childs = " SELECT td.tid, td.name from {term_data} td "
                   ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid "
                   ." WHERE vid='%d' AND th.parent='%d' ORDER BY %s %s LIMIT %d";

}
$term_childs = db_query($sql_term_childs, $vid, $tid_parent, $order_by,
   $order_type, $num_term );
                     Arquivo taxonomia_em_bloco.module
Construção do Módulo
$output .= '<ul>';
while ($term_child = db_fetch_object($term_childs)) {
   $tid_child = $term_child->tid;
   $name_child = $term_child->name;

  $output .   = '<li>';
  $term_child = taxonomy_get_term($tid_child);

  $output .= l(t($name_child), taxonomy_term_path($term_child));

  if ($node_count) {
     $total_child = db_result(db_query("SELECT COUNT(nid) FROM {term_node} WHERE
        tid = %d", $tid_child));
        $output .= " ($total_child)";
  }
  $output .= "</li>";
}
$output .= "</ul>";

                      Arquivo taxonomia_em_bloco.module
Construção do Módulo
 $output .= "</ul>";

            $block['content'] = $output;

            break;
        }

        return $block;
    }

}
                         Arquivo taxonomia_em_bloco.module
Construção do Módulo
 $block['content']: representa o código HTML a ser
 gerado para o bloco.
Página de Configuração
 Após a construção do módulo, para deixá-lo mais
  flexível, se faz necessário a construção de uma página
  onde o módulo possa ser personalizado.
 Uma página contendo um formulário de “system
  settings” pode ser definida utilizando a API de Forms
   do Drupal.
 Por boa prática, a função que permitirá a construção
  de um formulário “system settings” deverá estar
  localizada no arquivo: modulename.settings.inc
Construção da Página
<?php
// $Id: taxnomia_em_bloco.settings.inc

function taxonomia_em_bloco_admin_settings() {
  $form = array();

  $form['taxonomia_em_bloco_settings'] = array(
     '#type' => 'fieldset',
     '#weight' => -30,
     '#title' => t('Configura&ccedil;&otilde;es B&aacute;sicas'),
     '#collapsible' => TRUE,
     '#collapsed' => FALSE
  );

                 Arquivo taxonomia_em_bloco.settings.inc
Construção da Página
$vocabs = db_query("SELECT vid, name from {vocabulary} order by name");
 $vocab_array = array();
 while ($term_parent = db_fetch_object($vocabs)) {
    $vocab_array[$term_parent->vid] = $term_parent->name;
 }

 $form['taxonomia_em_bloco_settings']['taxonomia_em_bloco_settings_vid'] =
  array(
    '#type' => 'select',
    '#title' => t("Selecione um vocabul&aacute;rio"),
    '#default_value' => variable_get('taxonomia_em_bloco_settings_vid', 1),
    '#description' => t("Selecione um vocabul&aacute;rio para ser utilizado
  pelo Taxonomia em Bloco."),
    '#options' => $vocab_array
 );
                 Arquivo taxonomia_em_bloco.settings.inc
Construção da Página
$form['taxonomia_em_bloco_settings']
   ['taxonomia_em_bloco_settings_max_term'] = array(
    '#type' => 'textfield',
    '#size' => 3,
    '#title' => t("N&uacute;mero m&aacute;ximo de termos a serem
   exibidos"),
    '#default_value' =>
   variable_get('taxonomia_em_bloco_settings_max_term', 0),
    '#description' => t("Informe 0 para exibir todos os termos.")
);

                 Arquivo taxonomia_em_bloco.settings.inc
Construção da Página
$form['taxonomia_em_bloco_settings']
   ['taxonomia_em_bloco_settings_node_count'] = array(
     '#type' => 'checkbox',
     '#title' => t('Mostrar a quantidade de nodos'),
     '#default_value' =>
   variable_get('taxonomia_em_bloco_settings_node_count', 0)
  );

                 Arquivo taxonomia_em_bloco.settings.inc
Construção da Página
$form['taxonomia_em_bloco_settings']
   ['taxonomia_em_bloco_settings_order_by'] = array(
    '#type' => 'select',
    '#title' => t("Ordenar por"),
    '#default_value' =>
   variable_get('taxonomia_em_bloco_settings_order_by', 0),
    '#options' => array(t("Nome"), t("Peso"))
 );
                 Arquivo taxonomia_em_bloco.settings.inc
Construção da Página
$form['taxonomia_em_bloco_settings']
   ['taxonomia_em_bloco_settings_order_type'] = array(
  '#type' => 'select',
  '#title' => t('Tipo de ordena&ccedil;&atilde;o'),
  '#default_value' =>
   variable_get('taxonomia_em_bloco_settings_order_type', 0),
  '#options' => array(t("ASC"), t("DESC"))
  );

    return system_settings_form($form);
}

                   Arquivo taxonomia_em_bloco.settings.inc
Construção da Página
 $form: array que define os elementos o formulário,
  fornecido pela API de Forms do Drupal. Cada
  elemento do array corresponde a um elemento do
  formulário.
 system_settings_form(): função que adiciona os
  botões padrões (submit/reset) ao formulário.
Adicionando a Página ao Menu
 Uma vez definida a página de configuração,
  precisamos definir uma URL de acesso para ela.
 Para isso a função hook_menu deve ser
  implementada.
  Ela retorna uma array contendo:
Adicionando a Página ao Menu
 title: título que aparecerá no menu.
 description: descrição do módulo.
 access arguments: role que poderá acessar a opção no menu.
 page callback: função que será chamada para apresentar a página
  quando o usuário acessar a URL.
 page arguments: argumentos a serem enviados para a página de callback.
 type: propriedade do item do menu.
 file: arquivo que será incluído antes dos callbacks serem requisitados.
Adicionando a Página ao Menu
function taxonomia_em_bloco_menu() {
  $items = array();

    $items['admin/settings/taxonomia_em_bloco'] = array(
       'title' => 'Taxonomia em Bloco',
       'description' => 'Este m&oacute;dulo &eacute; utilizado para listar as
     Taxonomias em um Bloco em uma determinada regi&atilde;o do site.',
       'access arguments' => array('administer taxonomia_em_bloco'),
       'page callback' => 'drupal_get_form',
       'page arguments' => array('taxonomia_em_bloco_admin_settings'),
       'type' => MENU_NORMAL_ITEM,
       'file' => 'taxonomia_em_bloco.settings.inc',
    );

    return $items;
}

                      Arquivo taxonomia_em_bloco.module

Mais conteúdo relacionado

Destaque

O corpo e a expressão artística e cultural
O corpo e a expressão artística e culturalO corpo e a expressão artística e cultural
O corpo e a expressão artística e culturalaluisiobraga
 
Les enjeux du numérique à l'Ecole (mars 2014)
Les enjeux du numérique à l'Ecole (mars 2014)Les enjeux du numérique à l'Ecole (mars 2014)
Les enjeux du numérique à l'Ecole (mars 2014)Elie ALLOUCHE
 
congenital anomalies of renal system
congenital anomalies of renal systemcongenital anomalies of renal system
congenital anomalies of renal systemRia Saira
 
Cell block and liquid based cytology
Cell block and liquid based cytologyCell block and liquid based cytology
Cell block and liquid based cytologyDr Neha Mahajan
 
Journée Agilité à Ei.Cesi (17 avril 2013)
Journée Agilité à Ei.Cesi (17 avril 2013)Journée Agilité à Ei.Cesi (17 avril 2013)
Journée Agilité à Ei.Cesi (17 avril 2013)Fabrice Aimetti
 
GMAT Math Flashcards
GMAT Math FlashcardsGMAT Math Flashcards
GMAT Math FlashcardsGMAT Prep Now
 
Spectralis oct normal anatomy & systematic interpretation.
Spectralis oct normal anatomy & systematic interpretation.Spectralis oct normal anatomy & systematic interpretation.
Spectralis oct normal anatomy & systematic interpretation.oxfordshireloc
 
The Ultimate Guide to Creating Visually Appealing Content
The Ultimate Guide to Creating Visually Appealing ContentThe Ultimate Guide to Creating Visually Appealing Content
The Ultimate Guide to Creating Visually Appealing ContentNeil Patel
 
Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.Emiland
 
What I Carry: 10 Tools for Success
What I Carry: 10 Tools for SuccessWhat I Carry: 10 Tools for Success
What I Carry: 10 Tools for SuccessJonathon Colman
 
Governança Corporativa_Pós Mackenzie
Governança Corporativa_Pós MackenzieGovernança Corporativa_Pós Mackenzie
Governança Corporativa_Pós Mackenzieamandasouzasantos
 

Destaque (20)

O corpo e a expressão artística e cultural
O corpo e a expressão artística e culturalO corpo e a expressão artística e cultural
O corpo e a expressão artística e cultural
 
Motores
MotoresMotores
Motores
 
100 esl-games
100 esl-games100 esl-games
100 esl-games
 
Soft tissue tumor
Soft tissue tumorSoft tissue tumor
Soft tissue tumor
 
Obsessão e desobsessão
Obsessão e desobsessãoObsessão e desobsessão
Obsessão e desobsessão
 
Les enjeux du numérique à l'Ecole (mars 2014)
Les enjeux du numérique à l'Ecole (mars 2014)Les enjeux du numérique à l'Ecole (mars 2014)
Les enjeux du numérique à l'Ecole (mars 2014)
 
Propriété intellectuelle nov 2012
Propriété intellectuelle nov 2012Propriété intellectuelle nov 2012
Propriété intellectuelle nov 2012
 
L’e mailing2012
L’e mailing2012L’e mailing2012
L’e mailing2012
 
congenital anomalies of renal system
congenital anomalies of renal systemcongenital anomalies of renal system
congenital anomalies of renal system
 
Cell block and liquid based cytology
Cell block and liquid based cytologyCell block and liquid based cytology
Cell block and liquid based cytology
 
Journée Agilité à Ei.Cesi (17 avril 2013)
Journée Agilité à Ei.Cesi (17 avril 2013)Journée Agilité à Ei.Cesi (17 avril 2013)
Journée Agilité à Ei.Cesi (17 avril 2013)
 
GMAT Math Flashcards
GMAT Math FlashcardsGMAT Math Flashcards
GMAT Math Flashcards
 
J2 me
J2 meJ2 me
J2 me
 
Spectralis oct normal anatomy & systematic interpretation.
Spectralis oct normal anatomy & systematic interpretation.Spectralis oct normal anatomy & systematic interpretation.
Spectralis oct normal anatomy & systematic interpretation.
 
Artifacts in eeg final
Artifacts in eeg finalArtifacts in eeg final
Artifacts in eeg final
 
The Ultimate Guide to Creating Visually Appealing Content
The Ultimate Guide to Creating Visually Appealing ContentThe Ultimate Guide to Creating Visually Appealing Content
The Ultimate Guide to Creating Visually Appealing Content
 
Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.
 
What I Carry: 10 Tools for Success
What I Carry: 10 Tools for SuccessWhat I Carry: 10 Tools for Success
What I Carry: 10 Tools for Success
 
Governança Corporativa_Pós Mackenzie
Governança Corporativa_Pós MackenzieGovernança Corporativa_Pós Mackenzie
Governança Corporativa_Pós Mackenzie
 
Draws youth
Draws youthDraws youth
Draws youth
 

Semelhante a Desenvolvimento Web com Drupal 6

Overview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalOverview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalJust Digital
 
Desenvolvimento web com (cms) Drupal
Desenvolvimento web com (cms) DrupalDesenvolvimento web com (cms) Drupal
Desenvolvimento web com (cms) DrupalEmerson Barros
 
Drupal e o seu ecossistema
Drupal e o seu ecossistemaDrupal e o seu ecossistema
Drupal e o seu ecossistemaDrupal Portugal
 
Overview sobre o CMS Drupal
Overview sobre o CMS DrupalOverview sobre o CMS Drupal
Overview sobre o CMS DrupalRafael Cichini
 
Colóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do MinhoColóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do Minhointrofini
 
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresDrupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresPedro Rocha
 
Drupal a escolha certa para o seus próximos projetos
Drupal   a escolha certa para o seus próximos projetosDrupal   a escolha certa para o seus próximos projetos
Drupal a escolha certa para o seus próximos projetosRenato Vasconcellos Gomes
 
Gestão de conteúdos com aplicações instaladas em servidores
Gestão de conteúdos com aplicações instaladas em servidoresGestão de conteúdos com aplicações instaladas em servidores
Gestão de conteúdos com aplicações instaladas em servidoresHenriqueta Sofia Djalo
 
Drupal workshop fcul_2014
Drupal workshop fcul_2014Drupal workshop fcul_2014
Drupal workshop fcul_2014Ricardo Amaro
 
Drupal, a escolha certa para os seus projetos.
Drupal, a escolha certa para os seus projetos.Drupal, a escolha certa para os seus projetos.
Drupal, a escolha certa para os seus projetos.Taller Negócio Digitais
 
Drupal a escolha certa para os seus projetos
Drupal   a escolha certa para os seus projetosDrupal   a escolha certa para os seus projetos
Drupal a escolha certa para os seus projetosRenato Vasconcellos Gomes
 
The Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressThe Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressJackson F. de A. Mafra
 
Criando comunidades com Drupal Commons
Criando comunidades com Drupal CommonsCriando comunidades com Drupal Commons
Criando comunidades com Drupal CommonsPedro Rocha
 
Workshop: Drupal para Bioinformática
Workshop: Drupal para BioinformáticaWorkshop: Drupal para Bioinformática
Workshop: Drupal para Bioinformáticaintrofini
 
Case Drupal: Todeschini
Case Drupal: TodeschiniCase Drupal: Todeschini
Case Drupal: TodeschiniMMDA
 

Semelhante a Desenvolvimento Web com Drupal 6 (20)

Overview de Drupal pela Just Digital
Overview de Drupal pela Just DigitalOverview de Drupal pela Just Digital
Overview de Drupal pela Just Digital
 
Desenvolvimento web com (cms) Drupal
Desenvolvimento web com (cms) DrupalDesenvolvimento web com (cms) Drupal
Desenvolvimento web com (cms) Drupal
 
Drupal e o seu ecossistema
Drupal e o seu ecossistemaDrupal e o seu ecossistema
Drupal e o seu ecossistema
 
Overview sobre o CMS Drupal
Overview sobre o CMS DrupalOverview sobre o CMS Drupal
Overview sobre o CMS Drupal
 
Colóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do MinhoColóquio Drupal na Universidade do Minho
Colóquio Drupal na Universidade do Minho
 
Drupal - WEG
Drupal - WEGDrupal - WEG
Drupal - WEG
 
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedoresDrupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
Drupal 4 Dev: aprendendo Drupal do ponto de vista de desenvolvedores
 
Drupal a escolha certa para o seus próximos projetos
Drupal   a escolha certa para o seus próximos projetosDrupal   a escolha certa para o seus próximos projetos
Drupal a escolha certa para o seus próximos projetos
 
Gestão de conteúdos com aplicações instaladas em servidores
Gestão de conteúdos com aplicações instaladas em servidoresGestão de conteúdos com aplicações instaladas em servidores
Gestão de conteúdos com aplicações instaladas em servidores
 
Drupal workshop fcul_2014
Drupal workshop fcul_2014Drupal workshop fcul_2014
Drupal workshop fcul_2014
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Novas Funcionalidades Liferay 6
Novas Funcionalidades Liferay 6Novas Funcionalidades Liferay 6
Novas Funcionalidades Liferay 6
 
Drupal, a escolha certa para os seus projetos.
Drupal, a escolha certa para os seus projetos.Drupal, a escolha certa para os seus projetos.
Drupal, a escolha certa para os seus projetos.
 
Drupal a escolha certa para os seus projetos
Drupal   a escolha certa para os seus projetosDrupal   a escolha certa para os seus projetos
Drupal a escolha certa para os seus projetos
 
marketing digital aula 6
marketing digital aula 6marketing digital aula 6
marketing digital aula 6
 
The Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressThe Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPress
 
Criando comunidades com Drupal Commons
Criando comunidades com Drupal CommonsCriando comunidades com Drupal Commons
Criando comunidades com Drupal Commons
 
Apresentação Drupal como LMS
Apresentação Drupal como LMSApresentação Drupal como LMS
Apresentação Drupal como LMS
 
Workshop: Drupal para Bioinformática
Workshop: Drupal para BioinformáticaWorkshop: Drupal para Bioinformática
Workshop: Drupal para Bioinformática
 
Case Drupal: Todeschini
Case Drupal: TodeschiniCase Drupal: Todeschini
Case Drupal: Todeschini
 

Desenvolvimento Web com Drupal 6

  • 1. Desenvolvimento Web com Drupal 6 Prof. Vinícius de Paula
  • 2. Sociedade da Informação Vivemos a chamada sociedade da informação, ou talvez mais adequadamente, a sociedade do conhecimento.  Nos países de economias mais dinâmicas, estima-se que cerca de 65% da capacidade de mão-de-obra esteja ocupada com a produção, o tratamento e a disseminação de informações.  Cada vez mais, as organizações, sejam privadas ou públicas, dependem da informação para levar a cabo seus objetivos.
  • 3. Informação como Estratégia No mundo dos negócios, a informação assume uma dimensão estratégica.  A informação é a principal matéria prima para todo e qualquer processo decisório;  Toda decisão, por mais simples que seja, envolve informações.
  • 4. O que é CMS?  CMS (Content Management System) é um sistema de gerenciamento de conteúdo, cujo objetivo é exatamente o de estruturar e facilitar a criação, administração, distribuição, publicação e disponibilidade da informação.
  • 5. Principais Características  Facilidade no Gerenciamento de Conteúdo Não é necessário saber programar para criar, editar e gerenciar conteúdo.  Colaboratividade Quem esta com a informação é o responsável por publicá-la.
  • 6. Vantagens  Estruturação do processo de autoria;  Harmonia estética com o resto do site e demais conteúdos;  Melhor estruturação da navegação;  Permissão granular de acesso às informações publicadas;  Gerenciamento de versão dos conteúdos;  Diminuição dos custos de manutenção.
  • 8. Qual CMS Utilizar? É a melhor escolha para sites simples, É recomendado para jornais e portais de sem grande complexidade. comunicação. Exige diversas configurações no sistema operacional. É a melhor escolha para sites complexos. Não é a melhor escolha para sites com grande número de editores de conteúdo.
  • 9. Comparativo A idealware é uma conceituada organização que realiza pesquisas sobre softwares sem fins lucrativos. Em março de 2009, ela realizou uma pesquisa comparando as principais ferramentas de CMS do mercado.  Participaram da pesquisa mais de 20 especialistas;  Foram utilizados 12 quesitos para avaliação.
  • 10.
  • 11. Qual o significado de Drupal? {holandês} druppel quer dizer Drop {Inglês} pronuncia-se Drupal {Inglês}
  • 12. O que é Drupal?  É um Sistema Gerenciador de Conteúdos;  Escrito em PHP;  Framework de desenvolvimento;  Ênfase na colaboração entre os usuários;  Open Source (GPL);  Totalmente compatível com W3C (W3C compliant).
  • 13. Breve Histórico  Criado pelo belga Dries Buytaert;  Lançado em 2001;  Derivado do projeto drop.org;  Versão 5 lançada em janeiro de 2007;  Atualmente esta na versão 7.
  • 14. Principais Características  Confiável e Robusto;  Eficiente;  Flexível.
  • 15. Drupal para os administradores  Fácil de instalar e configurar;  Intuitivo e auto-explicativo;  Altamente configurável.
  • 16. Drupal para os usuários  Fácil de configurar;  Intuitivo e auto-explicativo;  Organizado.
  • 17. Onde Utilizar o Drupal  Portais Corporativos;  Sites de Comunidades;  Sites Pessoais;  Sites Internacionais;  Educação;  Arte, Música e Multimídia.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 25. Tecnologias Envolvidas Linguagem PHP Banco de Dados MySQL, PostgreSQL Servidor Web Apache, lighttpd, IIS Sistema Operacional Linux, BSD, Mac OS X, Windows, Solaris
  • 26. Requisitos para Instalação Linguagem PHP 4.3.5 ou superior PHP 5.2.x (recomendado) Banco de Dados MySQL 4.1 ou 5.0 (recomendado) PostgreSQL 7.4 ou superior Servidor Web Apache 1.3 ou 2.x IIS 5, 6, e 7
  • 27. Núcleo do Drupal (Drupal Core) Gerenciamento de Gerenciamento de Gerenciamento de Pseudônimo de Conteúdo Usuários Sessão URL Localização Templates Organização Log de Eventos Biblioteca de Funções
  • 28. Módulos O Drupal é um framework modular:  Novas funcionalidades são incluídas em módulos;  Módulos podem ser habilitados ou desabilitados;  Módulos são plugins que extendem as funcionalidades do Drupal.
  • 29. Módulos Galeria Módulo de E-commerce AdSense Customizado Imagens Calendário Grupos Editores Fóruns de de WYSIWYG Eventos Trabalho Gerenciamento Gerenciamento Gerenciamento Pseudônimo de de de de Conteúdo Usuários Sessão URL Log Localização Templates Organização de Eventos Biblioteca de Funções
  • 30. Hooks (Ganchos)  Permite que os módulos interajam com o núcleo do Drupal.  A maneira mais comum de interagir com funcionalidades do núcleo do Drupal é implementando “ganchos” nos módulos.
  • 31. Themes (Temas)  Representa a aparência do site;  O Drupal suporta diversas abordagens para a criação de templates: Smarty, Template Attribute Language for PHP (PHPTAL) e PHPTemplate.
  • 32. Nodes (Nós)  É uma unidade mínima de conteúdo;  Cada conteúdo indexado pelo Drupal recebe um identificador de nó.  Seja uma enquete, uma história, uma página de livro, uma imagem, etc.
  • 33. Nodes (Nós) Tipos de conteúdo derivando de nó
  • 34. Blocks (Blocos)  Representa um tipo de conteúdo a ser apresentado na página;  Tipicamente, são colocados no sidebar, header ou footer da página;  As regiões onde os blocos podem ser posicionados são definidas nos temas.
  • 35. Estrutura de Diretórios Contém as bibliotecas e funções utilizadas pelo Drupal. Armazena os arquivos JavaScript, ícones e imagens da instalação padrão do Drupal. Contém o núcleo dos módulos, cada módulo está em seu próprio diretório. .
  • 36. Estrutura de Diretórios Contém os diferentes perfis de instalação para o site. Contém as modificações feitas no Drupal em formulários de configuração, módulos e temas.
  • 37. Estrutura de Diretórios Contém scripts para a checagem de sintaxe, limpeza de código, executar comandos no Drupal via linha de comando e de manipulação com o Crontab. Contém os arquivos do tema do Drupal.
  • 38. Estrutura de Arquivos Arquivo utilizado para executar tarefas periódicas. Ex.: cálculo de estatísticas, etc. Arquivo principal que responde as requisições feitas no diretório raiz. Arquivo responsável por iniciar a instalação do Drupal.
  • 39. Estrutura de Arquivos Arquivo contendo a implementação padrão para robots exclusion standard. Arquivo responsável por atualizar o schema do banco de dados após uma atualização de versão do Drupal. Arquivo responsável por receber requisições XML-RPC.
  • 42. 2) Copie o arquivo sitesdefaultdefault.settings.php e o renomeie para settings.php. Em seguida de um refresh na página.
  • 43. 3) Acesse: http://127.0.0.1/phpmyadmin/ e crie um novo banco de dados chamado drupal
  • 44. 4) Clique no link Privilégios e em seguida Adicionar novo usuário
  • 45. 5) Informe o nome de usuário, servidor e senha. Em seguida clique em Executar
  • 46. 6) Selecione o banco de dados drupal e clique em executar.
  • 47. 7) Selecione todos os privilégios e clique em Executar.
  • 48. 8) Acesse a página de instalação do Drupal e informe os dados de acesso ao banco de dados.
  • 49.
  • 50. 9) Informe os dados do site e do administrador.
  • 51. Clique em Save and continue.
  • 52.
  • 54. Pós Instalação Após a instalação, crie os seguintes diretórios em sitesall:  modules  themes  libraries
  • 55. Exercícios 1. Realize a instalação do Xamp. 2. Realize a instalação do Drupal.
  • 57. Administração do Drupal A administração do Drupal é dividida em 5 áreas:  Content management: gerenciamento do conteúdo do site.  Site building: controle da aparência do site. Qualquer alteração no layout pode ser realizada nesta área.  Site configuration: configurações básicas do site como o comportamento do site, nome, configurações de email, cache, data e hora, etc.  User management: gerenciamento de usuários do site, grupo e o acesso aos recursos do site.  Reports: relatórios gerenciais sobre o site.
  • 58. Fluxo Básico de Administração 1. Configuração 2. Funcionalidades do site (Settings) Adicionais (Modules) 4. Postagem de conteúdo 3. Customização de (Nodes) layout (Themes)
  • 60. Principais Configurações  Error reporting Por padrão, os logs de erro são gerados em arquivo e impressos na tela. Quando o site estiver pronto para produção é recomendado alterar esta configuração para que os logs de erro sejam gerados somente no arquivo de logs.  Input Format Você pode configurar as formatações (xHTML e PHP) que serão aceitas quando os usuários digitarem tags nos formulários. Como boa prática de segurança é recomendado que esta configuração seja Filtered HTML.
  • 61. Principais Configurações  Performance Durante o desenvolvimento, é recomendado que o cache esteja desativado. Quando o site estiver pronto para produção o cache deve ser alterado para normal.  Site information Além do nome do site, podemos adicionar um slogan, a missão do site e uma mensagem no rodapé do site.  Site maintenance Se o site precisar ficar indisponível por algum motivo, podemos adicionar uma mensagem do tipo: “Site em manutenção” para os usuários.
  • 62. Exercícios 3. Realize a alteração das seguintes configurações: a) Geração de logs de erro; b) Formato de tags aceitas; c) Performance; d) Informações do site; e) Coloque o site fora do ar, e apresente a seguinte mensagem: “Desculpe o transtorno...”.
  • 63. Site “fora do ar”? Para colocar o site “no ar” novamente, execute os seguintes comandos via PHPMyAdmin: UPDATE variable SET value = 's:1:"0";' WHERE name='site_offline'; DELETE FROM cache WHERE cid = 'variables';
  • 65. Instalação de Módulos 1. Faça o download do módulo de sua preferência na página oficial de módulos do Drupal: http://drupal.org/project/Modules 2. Descompacte o arquivo do módulo dentro do diretório: modules Caso seja utilizado o recurso de multi-site, o arquivo deve ser descompactado em: sites/all/modules 3. Leia as instruções de instalação do módulo no arquivo INSTALL.txt 4. Ative o módulo em: Administrar › Construção do site > Módulos 5. Após ativado, as configurações do módulo podem ser realizadas em: Administrar › Configuração do site
  • 67. Administration menu Este módulo habilita um menu “drop down” de navegação com todas as opções administrativas.
  • 68. WYSIWYG API (What You See Is What You Get) Este módulo habilita um editor HTML em modo visual no lugar do campo textarea dos formulários. Exemplo utilizando o editor FCKeditor
  • 69. Content Constructor Kit (CCK) Este módulo auxilia na criação de:  tipos de conteúdo (Content types);  campos personalizados (Fields).
  • 70. Content Types (Tipos de Conteúdo) O que é um tipo de conteúdo?  É a representação de algum tipo de informação. Exemplos:  Página;  Postagem de blog;  Eventos;  Galeria de Imagens.
  • 71. Content Types (Tipos de Conteúdo) Estrutura padrão de campos de um tipo de conteúdo:
  • 72. Content Types (Tipos de Conteúdo) Campos podem ser adicionados aos tipos de conteúdo:
  • 73. File field Este módulo adiciona um campo personalizado para o upload de arquivos.
  • 74. Image field Este módulo possibilita a validação das dimensões e o upload de imagens via AJAX no formulário de criação de conteúdo. Configuração do campo em Content Type Utilização do campo em Create Content
  • 75. ImageCache Este módulo permite o tratamento das imagens enviadas pelos campos de upload. As imagens poderão ser redimensionadas, cortadas, convertidas em preto e branco, etc.
  • 76. Lightbox2 Este módulo habilita a abertura de imagens em elegantes janelas modais, de forma dinâmica.
  • 77. Views Este módulo possibilita a montagem listas, blocos e tabelas apenas informando o tipo de conteúdo, campos, ordenação, quantidade de itens por página, etc.
  • 78.
  • 79. Galeria de Imagens Módulos utilizados:  CCK  Filefield  ImageApi  ImageCache  ImageField  Lightbox2  Views
  • 80. Galeria de Imagens 1) Adicionar o Tipo de Conteúdo "Galeria de Imagens“; 2) Adicionar um presset com o módulo “Image Cache”: Administrar › Construção do site > ImageCache foto_miniatura: Add Scale 120 x 180 foto_ampliada: Add Scale 800 x 600 1) Adicionar em "manage fields" o campo File com o tipo Image. Administrar › Organizar conteúdo > Galeria_Imagens > Manage fields Label: Imagem Field name: field_imagem. 4) Em: Content management › Galeria de Imagens > Manage fields > Display fields...
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94. Gallery Assist Este módulo permite a criação de galerias de imagens customizáveis de forma simples e transparente. Não possui nenhuma dependência dos módulos:  CCK, Views, ImageCache e Image/Image Gallery. Módulos adicionais:  Gallery Assist Lightboxes;  Gallery Assist for the Cooliris viewer.
  • 95. Gallery Assist com HighSlide
  • 96. Gallery Assist com FancyBox
  • 97. Webform Este módulo auxilia na criação de formulários dinâmicos.
  • 98. Captcha Este módulo permite a adição de um Captcha (imagem ou cálculo matemático) nos formulários.
  • 99. Taxonomy (Taxonomia) Taxonomia é a ciência da identificação.  O módulo Taxonomy permite categorizar os conteúdos a partir de uma lista de vocabulários;  Podemos ter várias classificações diferentes para o mesmo tipo de conteúdo ou node;  O uso da taxonomia facilita o acesso à informação.
  • 100. Taxonomy (Taxonomia) Notícias Vocabulário Esporte Cultura Lazer Termos Futebol Basquete Exemplo de Taxonomia
  • 103. Taxonomy Blocks Este módulo possibilita a exibição de um bloco contendo os vocabulários e seus termos.
  • 104. Panels Este módulo capacita o site a ter uma visualização em painéis. Ele é peça fundamental para a construção do layout da página.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 115. Instalação de Temas 1. Faça o download do módulo de sua preferência na página oficial de módulos do Drupal: http://drupal.org/project/Themes 2. Descompacte o arquivo do módulo dentro do diretório: themes Caso seja utilizado o recurso de multi-site, o arquivo deve ser descompactado em: sites/all/themes 3. Ative o tema em: Administrar > Construção do Site > Temas
  • 117. O que é um tema?  É uma coleção de arquivos utilizados para criar uma interface para o usuário final.
  • 118. O que é um template?  É a forma como os componentes ou elementos de um tema são distribuídos em um espaço limitado e definido previamente.  Todo tema possui um template.
  • 119. Definição do Layout para o Tema  Com o Drupal é possível ativar ou desativar as colunas esquerda ou direita do layout.  Caso o layout necessite de 3 ou 2 colunas é preciso projetar o site com suporte a 3 colunas.
  • 120. Camadas do Layout Legenda HTML BODY CONTAINER HEADER SIDEBAR 1 MAIN CONTENT SIDEBAR 2 FOOTER
  • 121. Estrutura do Layout <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <link href="css/style.css" rel="stylesheet" type="text/css" /> </head> <body>
  • 122. Estrutura do Layout <div id="container"> <div id="header"> <h1>Header</h1> </div> <div id="sidebar1"> <h3>Sidebar1 </h3> <p>Donec eu mi sed turpis feugiat feugiat. Integer turpis arcu, pellentesque eget, cursus et, fermentum ut, sapien. </p> </div> <div id="sidebar2"> <h3>Sidebar2 </h3> <p>Donec eu mi sed turpis feugiat feugiat. Integer turpis arcu, pellentesque eget, cursus et, fermentum ut, sapien. </p> </div>
  • 123. Estrutura do Layout <div id="mainContent"> <h1> Main Content </h1> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent aliquam, justo convallis luctus rutrum, erat nulla fermentum diam, at nonummy quam ante ac quam. Maecenas urna purus, fermentum id, molestie in, commodo porttitor, felis. Nam blandit quam ut lacus. Quisque ornare risus quis ligula. Phasellus tristique purus a augue condimentum adipiscing. Aenean sagittis. Etiam leo pede, rhoncus venenatis, tristique in, vulputate at, odio. Donec et ipsum et sapien vehicula nonummy. Suspendisse potenti. </p> <h2>H2 level heading </h2> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent aliquam, justo convallis luctus rutrum, erat nulla fermentum diam, at nonummy quam ante ac quam. Maecenas urna purus, fermentum id, molestie in, commodo porttitor, felis. Nam blandit quam ut lacus. Quisque ornare risus quis ligula. Phasellus tristique purus a augue condimentum adipiscing. Aenean sagittis. Etiam leo pede, rhoncus venenatis, tristique in, vulputate at, odio.</p> </div> <br class="clearfloat" /> <div id="footer"> <p>Footer</p> </div> </div> </body> </html>
  • 124. Temas no Drupal  O Drupal possui um motor de temas interno e uma ferramenta de templates (PHPTemplate).  Outras ferramentas de templates podem ser utilizadas: Smarty, PHPTAL, XTemplate, etc.
  • 126. Estrutura de um Tema  .info Este arquivo com extensão ".info" e com o nome do tema é necessário para que o Drupal encontre seu tema, e é ele quem vai gerar o nome interno do tema.  .tpl.php São os arquivos de templates processados pelo motor do tema. Cada arquivo .tpl.php é responsável por aplicar temas a fragmentos de dados.
  • 127. Estrutura de um Tema  template.php Este é o arquivo que contém a parte lógica do tema, ou seja o código PHP, para não misturá-lo com a parte de processamento e controle do layout. Nele podemos sobrescrever as funções usadas nos temas.  logo.png É a logomarca utilizado pelo tema.
  • 128. Estrutura de um Tema  style.css É a folha de estilos a ser utilizada pelo tema.  screenshot.png É uma miniatura para dar uma visualização prévia na área de administração de temas.
  • 129. Estrutura de um Tema  page.tpl.php Template responsável por definir o esqueleto do tema.  block.tpl.php Template responsável por definir o layout dos blocos.  node.tpl.php Template responsável por definir o layout de um node.
  • 131. Desenvolvimento de Módulos  Um módulo é uma coleção de arquivos contendo um conjunto de rotinas escritas em PHP.  Os módulos possuem como características boa práticas de design e programação, além da modularidade.
  • 132. Informações sobre o Módulo  Todo módulo possui um arquivo modulename.info contendo informações sobre o módulo. ; $Id: taxonomia_em_bloco.info,v 1.0 2010/01/09 10:00:00 name = Taxonomia em Bloco description = "Este m&oacute;dulo &eacute; utilizado para listar as Taxonomias em um Bloco em uma determinada regi&atilde;o do site." dependencies[] = taxonomy package = "M&oacute;dulos Personalizados" core = "6.x" project = "taxonomia_em_bloco"
  • 133. Informações sobre o Módulo  Help Hook: este hook fornece um texto de ajuda e informações adicionais sobre o módulo, disponibilizadas no Help (/admin/help/). A função a ser implementada é a hook_help(). function taxonomia_em_bloco_help($section) { switch ($section) { case 'admin/help#taxonomia_em_bloco': $output = "Este m&oacute;dulo &eacute; utilizado para listar as Taxonomias em um determinado Bloco do site."; return $output; } } Função integrante do arquivo taxonomia_em_bloco.module
  • 134. Permissões de Acesso  Perm Hook: com este hook podemos definir quais permissões serão disponibilizadas para o módulo. A função a ser implementada é a hook_perm.  Uma vez definidas as permissões do módulo, o admin pode definir as roles que possuem estas permissões em: Administer » User management » Permissions function taxonomia_em_bloco_perm() { return array('access taxonomia_em_bloco', 'administer taxonomia_em_bloco'); } Função integrante do arquivo taxonomia_em_bloco.module
  • 135. Declaração do Bloco  Block Hook: com este hook podemos definir um bloco para o módulo. A função a ser implementada é a hook_block. function taxonomia_em_bloco_block($op = 'list', $delta = 0) { ... } Função integrante do arquivo taxonomia_em_bloco.module
  • 136. Declaração do Bloco  A função do bloco recebe como parâmetro: $op (operação): hook_block() fornece 4 tipos de operações:  list: lista os blocos definidos no módulo e como ele será visto na página: Administer >> Site Building >> Blocks  view: processa o bloco quando habilitado em alguma região apresentando o seu conteúdo.  configure: formulário de configuração para o bloco.  save: salva as opções de configuração.
  • 137. Declaração do Bloco $delta: um módulo pode definir mais de um bloco na operação “list”. Cada bloco possui um código “delta” definido. O código “delta” é que identificará qual bloco do módulo será executado pela operação. O módulo user (Drupal core) é um exemplo de módulo contendo múltiplos blocos.
  • 138. Construção do Módulo if ($op == 'list') { $blocks[0]['info'] = 'Taxonomia em Bloco'; return $blocks; } Arquivo taxonomia_em_bloco.module
  • 139. Construção do Módulo  $blocks: variável utilizada para armazenar alguma informação referente ao bloco antes de retorná-la.  $blocks[0]: a variável $blocks é um array. Cada item do array representa um bloco fornecido pelo módulo. O item do array corresponde ao código “delta” a ser utilizado pelas operações.  $block[0]["info"]: é o título do bloco a ser apresentado na página Administer >> Site Building >> Blocks
  • 140. Construção do Módulo if ($op == 'view') { $vid = variable_get('taxonomia_em_bloco_settings_vid',1); $node_count = variable_get('taxonomia_em_bloco_settings_node_count',0); $num_term = variable_get('taxonomia_em_bloco_settings_max_term',0); $order_by = variable_get('taxonomia_em_bloco_settings_order_by', 0)==0 ? 'name' : 'weight'; $order_type = variable_get('taxonomia_em_bloco_settings_order_type', 0)==0 ? 'ASC' : 'DESC'; Arquivo taxonomia_em_bloco.module
  • 141. Construção do Módulo  $vid: representa o ID do vocabulário.  $node_count: total de nodes.  $num_term: número de termos a serem apresentados.  $order_by: forma de ordenação.  $order_type: tipo de ordenação.
  • 142. Construção do Módulo  A função variable_get recupera o valor de uma determinada variável na tabela variable. Caso a variável não exista, um valor padrão é atribuído. $vid = variable_get('taxonomia_em_bloco_settings_vid',1);  Caso a variável taxonomia_em_bloco_settings_vid ainda não tenha sido “setada”, o valor 1 é atribuído à variável $vid.
  • 143. Construção do Módulo switch($delta) { case 0: $block['subject'] = t('Taxonomia em Bloco'); $output = ''; if ($num_term == 0) { $sql = " SELECT td.tid, td.name, th.parent from {term_data} td " ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid " ." WHERE vid='%d' AND th.parent=0 ORDER BY %s %s"; } else { $sql = " SELECT td.tid, td.name, th.parent from {term_data} td " ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid " ." WHERE vid='%d' AND th.parent=0 ORDER BY %s %s LIMIT %d"; } $term_parents = db_query($sql, $vid, $order_by, $order_type, $num_term ); $output .= '<ul class="menu">'; Arquivo taxonomia_em_bloco.module
  • 144. Construção do Módulo  $block['subject']: representa o título do bloco.  $output: variável que representará o conteúdo do bloco a ser visualizado pelo usuário.  db_query(): função que executa uma instrução SQL no banco de dados. Caso ocorra algum problema na execução do SQL, é retornado FALSE.
  • 145. Construção do Módulo while ($term_parent = db_fetch_object($term_parents)) { $tid_parent = $term_parent->tid; $name_parent= $term_parent->name; $output .= '<li>'; $term_parent = taxonomy_get_term($tid_parent); $output .= l(t($name_parent), taxonomy_term_path($term_parent)); if ($node_count) { $total_parent = db_result(db_query("SELECT COUNT(nid) FROM {term_node} WHERE tid = %d", $tid_parent)); $output .= " ($total_parent)"; } $output .= "</li>"; Arquivo taxonomia_em_bloco.module
  • 146. Construção do Módulo  db_fetch_object(): função que recupera o resultado de uma linha da query executada como um objeto.  taxonomy_get_term(): função que retorna um objeto Termo com base no ID do Termo.  taxonomy_term_path(): função que recupera o caminho do termo, podendo ser utilizado na URL do link.  db_result(): função que retorna o total de registros afetados por uma query.
  • 147. Construção do Módulo  t(): traduz uma string para a página de linguagens. Todo texto que será apresentado ao usuário fora de uma página deve ser executado através desta função.  l(): formata um link interno. Recebe como parâmetro o texto do link e o seu caminho.
  • 148. Construção do Módulo $sql_count_childs = " SELECT count(td.tid) from {term_data} td " ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid " ." WHERE td.vid='%d' AND th.parent='%d'"; $count_child = db_result(db_query($sql_count_childs, $vid, $tid_parent)); if ($count_child) { if ($num_term == 0) { $sql_term_childs = " SELECT td.tid, td.name from {term_data} td " ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid " ." WHERE vid='%d' AND th.parent='%d' ORDER BY %s %s"; } else { $sql_term_childs = " SELECT td.tid, td.name from {term_data} td " ." INNER JOIN {term_hierarchy} th ON th.tid=td.tid " ." WHERE vid='%d' AND th.parent='%d' ORDER BY %s %s LIMIT %d"; } $term_childs = db_query($sql_term_childs, $vid, $tid_parent, $order_by, $order_type, $num_term ); Arquivo taxonomia_em_bloco.module
  • 149. Construção do Módulo $output .= '<ul>'; while ($term_child = db_fetch_object($term_childs)) { $tid_child = $term_child->tid; $name_child = $term_child->name; $output . = '<li>'; $term_child = taxonomy_get_term($tid_child); $output .= l(t($name_child), taxonomy_term_path($term_child)); if ($node_count) { $total_child = db_result(db_query("SELECT COUNT(nid) FROM {term_node} WHERE tid = %d", $tid_child)); $output .= " ($total_child)"; } $output .= "</li>"; } $output .= "</ul>"; Arquivo taxonomia_em_bloco.module
  • 150. Construção do Módulo $output .= "</ul>"; $block['content'] = $output; break; } return $block; } } Arquivo taxonomia_em_bloco.module
  • 151. Construção do Módulo  $block['content']: representa o código HTML a ser gerado para o bloco.
  • 152. Página de Configuração  Após a construção do módulo, para deixá-lo mais flexível, se faz necessário a construção de uma página onde o módulo possa ser personalizado.  Uma página contendo um formulário de “system settings” pode ser definida utilizando a API de Forms do Drupal.  Por boa prática, a função que permitirá a construção de um formulário “system settings” deverá estar localizada no arquivo: modulename.settings.inc
  • 153. Construção da Página <?php // $Id: taxnomia_em_bloco.settings.inc function taxonomia_em_bloco_admin_settings() { $form = array(); $form['taxonomia_em_bloco_settings'] = array( '#type' => 'fieldset', '#weight' => -30, '#title' => t('Configura&ccedil;&otilde;es B&aacute;sicas'), '#collapsible' => TRUE, '#collapsed' => FALSE ); Arquivo taxonomia_em_bloco.settings.inc
  • 154. Construção da Página $vocabs = db_query("SELECT vid, name from {vocabulary} order by name"); $vocab_array = array(); while ($term_parent = db_fetch_object($vocabs)) { $vocab_array[$term_parent->vid] = $term_parent->name; } $form['taxonomia_em_bloco_settings']['taxonomia_em_bloco_settings_vid'] = array( '#type' => 'select', '#title' => t("Selecione um vocabul&aacute;rio"), '#default_value' => variable_get('taxonomia_em_bloco_settings_vid', 1), '#description' => t("Selecione um vocabul&aacute;rio para ser utilizado pelo Taxonomia em Bloco."), '#options' => $vocab_array ); Arquivo taxonomia_em_bloco.settings.inc
  • 155. Construção da Página $form['taxonomia_em_bloco_settings'] ['taxonomia_em_bloco_settings_max_term'] = array( '#type' => 'textfield', '#size' => 3, '#title' => t("N&uacute;mero m&aacute;ximo de termos a serem exibidos"), '#default_value' => variable_get('taxonomia_em_bloco_settings_max_term', 0), '#description' => t("Informe 0 para exibir todos os termos.") ); Arquivo taxonomia_em_bloco.settings.inc
  • 156. Construção da Página $form['taxonomia_em_bloco_settings'] ['taxonomia_em_bloco_settings_node_count'] = array( '#type' => 'checkbox', '#title' => t('Mostrar a quantidade de nodos'), '#default_value' => variable_get('taxonomia_em_bloco_settings_node_count', 0) ); Arquivo taxonomia_em_bloco.settings.inc
  • 157. Construção da Página $form['taxonomia_em_bloco_settings'] ['taxonomia_em_bloco_settings_order_by'] = array( '#type' => 'select', '#title' => t("Ordenar por"), '#default_value' => variable_get('taxonomia_em_bloco_settings_order_by', 0), '#options' => array(t("Nome"), t("Peso")) ); Arquivo taxonomia_em_bloco.settings.inc
  • 158. Construção da Página $form['taxonomia_em_bloco_settings'] ['taxonomia_em_bloco_settings_order_type'] = array( '#type' => 'select', '#title' => t('Tipo de ordena&ccedil;&atilde;o'), '#default_value' => variable_get('taxonomia_em_bloco_settings_order_type', 0), '#options' => array(t("ASC"), t("DESC")) ); return system_settings_form($form); } Arquivo taxonomia_em_bloco.settings.inc
  • 159. Construção da Página  $form: array que define os elementos o formulário, fornecido pela API de Forms do Drupal. Cada elemento do array corresponde a um elemento do formulário.  system_settings_form(): função que adiciona os botões padrões (submit/reset) ao formulário.
  • 160. Adicionando a Página ao Menu  Uma vez definida a página de configuração, precisamos definir uma URL de acesso para ela.  Para isso a função hook_menu deve ser implementada. Ela retorna uma array contendo:
  • 161. Adicionando a Página ao Menu  title: título que aparecerá no menu.  description: descrição do módulo.  access arguments: role que poderá acessar a opção no menu.  page callback: função que será chamada para apresentar a página quando o usuário acessar a URL.  page arguments: argumentos a serem enviados para a página de callback.  type: propriedade do item do menu.  file: arquivo que será incluído antes dos callbacks serem requisitados.
  • 162. Adicionando a Página ao Menu function taxonomia_em_bloco_menu() { $items = array(); $items['admin/settings/taxonomia_em_bloco'] = array( 'title' => 'Taxonomia em Bloco', 'description' => 'Este m&oacute;dulo &eacute; utilizado para listar as Taxonomias em um Bloco em uma determinada regi&atilde;o do site.', 'access arguments' => array('administer taxonomia_em_bloco'), 'page callback' => 'drupal_get_form', 'page arguments' => array('taxonomia_em_bloco_admin_settings'), 'type' => MENU_NORMAL_ITEM, 'file' => 'taxonomia_em_bloco.settings.inc', ); return $items; } Arquivo taxonomia_em_bloco.module