Desenvolvimento web com
           Drupal 7




Sérgio Santana de Lima
Drupal?

O Drupal é comumente descrito como um
 Framework de Gerenciamento de Conteúdo,
 pois além de oferecer as funcionalidades
 básicas de um CMS ele também implementa
 uma série de APIs robustas e apresenta uma
 estrutura modular que facilita o
 desenvolvimento de módulos extensivos.




Fonte: http://pt.wikipedia.org/wiki/Drupal
Vantagens

Comunidade
Funcionalidades
  Mais de 800 módulos estão disponíveis ou em
   desenvolvimento atual para o Drupal 7, incluindo
   Views, Pathauto, e WYSIWYG
Extensibilidade
Internacionalização
Usabilidade
Desvantagens

Documentação em inglês
Tudo vai para o banco de dados
Normas de codificação

Baseado no PEAR Coding standards
Recuo e espaço em branco
  2 espaços para recuo, sem tabulação
Operadores
  Espaço antes e depois de todos operadores binários
Normas de codificação

Estruturas de controle

 if (condicao1 || condicao2) {
   acao1;
 }
 elseif (condicao3 && condicao4) {
   acao2;
 }
 else {
   acaopadrao;
 }
Normas de codificação

Sintaxe de controle alternativa para templates


<?php if (!empty($item)): ?>
  <p><?php print $item; ?></p>
<?php endif; ?>

<?php foreach ($items as $item): ?>
  <p><?php print $item; ?></p>
<?php endforeach; ?>
Normas de codificação

 Comprimento e quebra de linha
    Em geral, as linhas não devem ultrapassar o
     tamanho de 80 caracteres
    Estrutura de controle podem exceder 80 caracteres
     se são simples de ler e entender

if ($something['with']['something']['else']['in']['here'] ==
mymodule_check_something($whatever['else'])) {
    ...
  }
Normas de codificação

Chamada de função

 $var = foo($bar, $baz, $quux);

 $short         = foo($bar);
 $long_variable = foo($baz);
Normas de codificação

Declaração de função

function funstuff_system($field) {
  $system["description"] = t("This module inserts...");
  return $system[$field];
}
Normas de codificação

Matriz

$some_array = array('hello', 'world', 'foo' => 'bar');

$form['title'] = array(
  '#type' => 'textfield',
  '#title' => t('Title'),
  '#size' => 60,
  '#maxlength' => 128,
  '#description' => t('The title of your node.'),
);
Normas de codificação

Concatenações de String

 <?php
    $string   =   'Foo' . $bar;
    $string   =   $bar . 'foo';
    $string   =   bar() . 'foo';
    $string   =   'foo' . 'bar';
 ?>

 <?php
    $string = "Foo $bar";
 ?>
Normas de codificação

Concatenações de String

 <?php
    $string   =   'Foo' . $bar;
    $string   =   $bar . 'foo';
    $string   =   bar() . 'foo';
    $string   =   'foo' . 'bar';
 ?>

 <?php
    $string = "Foo $bar";
 ?>
Conceitos gerais

Node
Módulo
Tema
Região, bloco e menu
Usuário, permissão e papel
Taxonomia
Node

Termo genérico para uma parte do conteúdo no
 site
Cada node tem um tipo de conteúdo
Módulo

Coleção de arquivos que contém funcionalidades
Pode usar funções e variáeis do núcle do Drupal
Como criar um módulo?

Criar pasta com nome do módulo
O nome deve conter apenas letras minúsculas e
 sublinhados
Nome do módulo será usado em todos os
 arquivos e funções
Criar arquivo com nome do módulo + sufixo
 .module
Criar arquivo .info para descrição do módulo
Módulos essenciais

Views
Token
Panels
Pathauto
Webform
Módulo - Views

Permite criar lista de conteúdo
Possui API própria que permite outros módulos
 interagirem
Módulo - Token

Pedaço de texto que pode ser colocado na
 marioria dos documentos via espaços
 reservados. Exemplo: %site-name
Módulo - Panels

Permite criar páginas em painéis diferentes com
 total controle do layout e de conteúdo
Módulo - Pathauto

Gera automaticamente caminho alternativo de
 URL para os tipos de conteúdo baseado em
 padrões facilmente ajustáveis (Token)
Módulo - Webform

Permite construir formulários via interface com
 validação dos dados
Gancho (hook)

Permite interagir com o núcleo do Drupal
Cada hook tem um conjunto de parâmetros e tipo
 especificado
Exemplo de gancho
function hook_node_insert($node) {
  db_insert('mytable')
    ->fields(array(
    'nid' => $node->nid,
    'extra' => $node->extra,
  ))
    ->execute();
}

function forum_node_insert($node) {
  if (_forum_node_check_node_type($node)) {
    if (!empty($node->forum_tid)) {
      // faz alguma coisa
    }
  }
}
Tema

Coleção de arquivos que define a camada de
 apresentação
Requer um arquivo .info, onde pode ser definido
 meta dados, folhas de estilo, javascripts,
 regiões dos blocos e outros
Usa arquivos de modelo (.tpl.php)
  Sugestões de modelo
Há um arquivo (template.php) para concentrar
 toda lógia e processamento dos dados
Suporta sub-temas
Sugestão de modelo

Drupal irá usar o modelo mais específico
Exemplo do modelo node.tpl.php

 node--[type|nodeid].tpl.php

 node--nodeid.tpl.php
 node--type.tpl.php
 node.tpl.php
Tema

Dentro do Drupal, a camada de apresentação
 utiliza a função theme(), o qual é passado o
 nome de um componente e uma matriz de
 variáveis

theme('table', array('header' => $header, 'rows' => $rows));




É possível criar uma saída customizada dentro
 do módulo com o gancho hook_theme
Estrutura de arquivo

Arquivos na pasta raíz:
  .htaccess
  authorize.php
  cron.php
  index.php
  install.php
  update.php
  xmlrpc.php
Estrutura de arquivos

Diretórios dentro da raíz:
  database
  files
  includes
  misc
  modules
  profiles
  scripts
  sites
  themes
Estrutura de pastas
Obrigado!
Bibliografia

http://www.drupal.org
http://www.redleafmedia.com/blog/drupal-7-file-struct
http://pt.wikipedia.org

Workshop - Desenvolvimento web com Drupal 7

  • 1.
    Desenvolvimento web com Drupal 7 Sérgio Santana de Lima
  • 2.
    Drupal? O Drupal écomumente descrito como um Framework de Gerenciamento de Conteúdo, pois além de oferecer as funcionalidades básicas de um CMS ele também implementa uma série de APIs robustas e apresenta uma estrutura modular que facilita o desenvolvimento de módulos extensivos. Fonte: http://pt.wikipedia.org/wiki/Drupal
  • 3.
    Vantagens Comunidade Funcionalidades Maisde 800 módulos estão disponíveis ou em desenvolvimento atual para o Drupal 7, incluindo Views, Pathauto, e WYSIWYG Extensibilidade Internacionalização Usabilidade
  • 4.
  • 5.
    Normas de codificação Baseadono PEAR Coding standards Recuo e espaço em branco 2 espaços para recuo, sem tabulação Operadores Espaço antes e depois de todos operadores binários
  • 6.
    Normas de codificação Estruturasde controle if (condicao1 || condicao2) { acao1; } elseif (condicao3 && condicao4) { acao2; } else { acaopadrao; }
  • 7.
    Normas de codificação Sintaxede controle alternativa para templates <?php if (!empty($item)): ?> <p><?php print $item; ?></p> <?php endif; ?> <?php foreach ($items as $item): ?> <p><?php print $item; ?></p> <?php endforeach; ?>
  • 8.
    Normas de codificação Comprimento e quebra de linha Em geral, as linhas não devem ultrapassar o tamanho de 80 caracteres Estrutura de controle podem exceder 80 caracteres se são simples de ler e entender if ($something['with']['something']['else']['in']['here'] == mymodule_check_something($whatever['else'])) { ... }
  • 9.
    Normas de codificação Chamadade função $var = foo($bar, $baz, $quux); $short = foo($bar); $long_variable = foo($baz);
  • 10.
    Normas de codificação Declaraçãode função function funstuff_system($field) { $system["description"] = t("This module inserts..."); return $system[$field]; }
  • 11.
    Normas de codificação Matriz $some_array= array('hello', 'world', 'foo' => 'bar'); $form['title'] = array( '#type' => 'textfield', '#title' => t('Title'), '#size' => 60, '#maxlength' => 128, '#description' => t('The title of your node.'), );
  • 12.
    Normas de codificação Concatenaçõesde String <?php $string = 'Foo' . $bar; $string = $bar . 'foo'; $string = bar() . 'foo'; $string = 'foo' . 'bar'; ?> <?php $string = "Foo $bar"; ?>
  • 13.
    Normas de codificação Concatenaçõesde String <?php $string = 'Foo' . $bar; $string = $bar . 'foo'; $string = bar() . 'foo'; $string = 'foo' . 'bar'; ?> <?php $string = "Foo $bar"; ?>
  • 14.
    Conceitos gerais Node Módulo Tema Região, blocoe menu Usuário, permissão e papel Taxonomia
  • 15.
    Node Termo genérico parauma parte do conteúdo no site Cada node tem um tipo de conteúdo
  • 16.
    Módulo Coleção de arquivosque contém funcionalidades Pode usar funções e variáeis do núcle do Drupal
  • 17.
    Como criar ummódulo? Criar pasta com nome do módulo O nome deve conter apenas letras minúsculas e sublinhados Nome do módulo será usado em todos os arquivos e funções Criar arquivo com nome do módulo + sufixo .module Criar arquivo .info para descrição do módulo
  • 18.
  • 19.
    Módulo - Views Permitecriar lista de conteúdo Possui API própria que permite outros módulos interagirem
  • 20.
    Módulo - Token Pedaçode texto que pode ser colocado na marioria dos documentos via espaços reservados. Exemplo: %site-name
  • 21.
    Módulo - Panels Permitecriar páginas em painéis diferentes com total controle do layout e de conteúdo
  • 22.
    Módulo - Pathauto Geraautomaticamente caminho alternativo de URL para os tipos de conteúdo baseado em padrões facilmente ajustáveis (Token)
  • 23.
    Módulo - Webform Permiteconstruir formulários via interface com validação dos dados
  • 24.
    Gancho (hook) Permite interagircom o núcleo do Drupal Cada hook tem um conjunto de parâmetros e tipo especificado
  • 25.
    Exemplo de gancho functionhook_node_insert($node) { db_insert('mytable') ->fields(array( 'nid' => $node->nid, 'extra' => $node->extra, )) ->execute(); } function forum_node_insert($node) { if (_forum_node_check_node_type($node)) { if (!empty($node->forum_tid)) { // faz alguma coisa } } }
  • 26.
    Tema Coleção de arquivosque define a camada de apresentação Requer um arquivo .info, onde pode ser definido meta dados, folhas de estilo, javascripts, regiões dos blocos e outros Usa arquivos de modelo (.tpl.php) Sugestões de modelo Há um arquivo (template.php) para concentrar toda lógia e processamento dos dados Suporta sub-temas
  • 28.
    Sugestão de modelo Drupalirá usar o modelo mais específico Exemplo do modelo node.tpl.php node--[type|nodeid].tpl.php node--nodeid.tpl.php node--type.tpl.php node.tpl.php
  • 29.
    Tema Dentro do Drupal,a camada de apresentação utiliza a função theme(), o qual é passado o nome de um componente e uma matriz de variáveis theme('table', array('header' => $header, 'rows' => $rows)); É possível criar uma saída customizada dentro do módulo com o gancho hook_theme
  • 30.
    Estrutura de arquivo Arquivosna pasta raíz: .htaccess authorize.php cron.php index.php install.php update.php xmlrpc.php
  • 31.
    Estrutura de arquivos Diretóriosdentro da raíz: database files includes misc modules profiles scripts sites themes
  • 32.
  • 33.
  • 34.