Beleza, galera?! Hoje irei mostrar aos senhores como criar um módulo que lista um determinado tipo de conteúdo.
“Putz… tem um monte de módulo pronto que faz isso ¬¬”. Mas a grande sacada é que irei mostrar como fazer isso programaticamente. Às vezes os módulos não atendem 100% as nossas necessidades e com esse simplório tutorial você irá entender como as coisas funcionam por trás da interface.
Então, sem mais delongas, segue o nosso guia para este tutorial:
- Criação de um módulo.
- Implementação do hook_menu().
- Criação de um form na área administrativa.
- Criação do submit do form.
- Manipulação de variable_get($name, $default = NULL) e variable_set($name, $value).
- Implementação do hook_theme($existing, $type, $theme, $path).
- Criação de um template.
Para o desenvolvimento desse tutorial, foi criado um tipo de conteúdo chamado “Estados brasileiros” (brazilian_states). Com os seguintes campos: Title (title), Capital (field_capital) e Habitantes (field_inhabitants). Após a criação do tipo de conteúdo, cadastre alguns estados.
Passo 1: Criação do modulo Custom_view
Estrutura de pastas: sites → all → modules → custom → custom_view
Caso as pastas não existam, criem.
Vamos criar o seguinte arquivo custom_view.info dentro da pasta cusom_view.
name = Custom View description = Provide custom view. package = Custom core = 7.x version = 7.x-1.x-dev
Aqui são as configurações básicas do módulo:
- 1 – nome do módulo.
- 2 – descrição de suas funcionalidades.
- 3 – o pacote do módulo, para deixar organizado na pagina de configurações dos módulos.
- 4 – a versão do core do Drupal.
- 5 – a versão do módulo.
Vamos testar?
Acessem o menu “Modules” ou “Módulos” e ativem o nosso módulo que acabamos de criar.
Passo 2: Implementação do hook_menu()
Agora vamos criar o nosso segundo arquivo. Dentro da pasta custom_view criaremos o arquivo custom_view.module responsável pelos intens de menu, que chamaremos de “rotas”, para melhor entendimento.
<?php /* * Implements hook_menu() */ function custom_view_menu() { $items['admin/config/custom-view'] = array( 'title' =?> 'Custom View', 'page callback' => 'system_admin_menu_block_page', 'access arguments' => array('access administration pages'), 'position' => 'right', 'file' => 'system.admin.inc', ); $items['admin/config/custom-view/manager'] = array( 'title' => 'Custom View Manager', 'description' => 'Customizing views', 'page callback' => 'drupal_get_form', 'page arguments' => array('custom_view_form'), 'access arguments' => array('administer custom view'), 'file' => 'custom_view.admin.inc', ); return $items; }
- 4 – Implementaremos o hook_menu(). Responsável pelas rotas (URL’S) do nosso módulo.
- 5 – Criaremos uma nova rota (url), para que apareça o link do nosso módulo, na tela de configuração.
- 6 – O título do bloco onde ficara o link.
- 7 – Função que criará a pagina do menu e retornará o HTML do menu na área administrativa.
- 8 – Permissão para acessar a rota do menu.
- 9 – Posição do menu.
- 10 – Arquivo responsável pela função do page_callback. É nesse arquivo que o Drupal irá procurar pela função system_admin_menu_block_page().
- 11 – Fechamos a descrição da rota do menu.
- 12 – Agora, criaremos uma nova rota para o formulário de gerenciamento do nosso módulo.
- 13 – O título do link e da página para onde seremos direcionados.
- 14 – Uma descrição.
- 15 – Função responsável por renderizar o nosso formulário na página.
- 16 – Função que contém os campos do nosso formulário. Que será passado por parâmetro para funçãodrupal_get_form($form_id) renderizá-lo na pagina.
- 17 – Permissão passada para acessar a rota do menu.
- 18 – É nesse arquivo (que iremos criar) que o Drupal irá procurar a função custom_view_form.
- 19 – Fechamos a descrição da rota do menu.
- 20 – Retornamos as rotas criadas.
- 21 – Fechamos o hook_menu().
Obs: Após escreverem o código acima limpem o CACHE.
Vamos testar?
Acessem no menu “Configuration” ou “Configurações”.
Passo 3: Criação do formulário na área administrativa
Lembram do tipo de conteúdo “Estados brasileiros” que criamos? Nele tem os seguintes campos: Title (title), Capital (field_capital) e Inhabitantes (field_inhabitants). Criaremos o nosso form com quatro checkbox: Title, Capital, Inhabitantes e Pager.
Quando marcamos um dos checkbox, a informação referente a ele deve ser listada na tela. Ex: marcamos somente o checkbox Inhabitantes. Após o submit do form, seremos direcionado para seguinte url custom-view/view/estados_do_brasil (uma das rotas de menu que criaremos posteriormente). Nessa tela deve aparecer somente os Habitantes de cada Node.
Agora criaremos um outro arquivo chamado custom_view.admin.inc. Dentro dele iremos implementar o hook_form($form, &$form_state) para criação do nosso formulário.
<?php /** * Create form */ function custom_view_form($form, &$form_state) { $form['title'] = array( '#type' =?> 'checkbox', '#title' => 'Title', '#description' => t('Let scheduled to appear the title'), ); $form['capital'] = array( '#type' => 'checkbox', '#title' => 'Capital', '#description' => t('Let scheduled to appear in capital'), ); $form['inhabitant'] = array( '#type' => 'checkbox', '#title' => 'Inhabitants', '#description' => t('Let scheduled to appear the number of inhabitants'), ); $form['pagination'] = array( '#type' => 'checkbox', '#title' => 'Pager', '#description' => t('Let scheduled to appear pagination'), ); $form['save'] = array( '#type' => 'submit', '#value' => 'Save', '#submit' => array('custom_view_form_submit'), ); $form['cancel'] = array( '#type' => 'markup', '#markup' => l('Cancel', 'custom-view/view/brazilian_states'), ); return $form; }
- 4 – Implementaremos o hook_form($form, &$form_state). Aqui criaremos o nosso formulário.
- 5, 10, 15, 20, 30 – Adicionaremos um novo elemento ao formulário.
- 6, 11, 16, 21, 26, 31 – O tipo desse elemento.
- 7, 12, 17, 22 – Um tipo para o elemento.
- 8, 13, 18, 23 – Uma breve descrição.
- 9, 14, 19, 24, 29, 33 – Fechamos o elemento.
- 27 – Texto para o botão.
- 28 – Função de submit do form.
- 32 – A função l($text, $path, array $options = array()) é responsável por criar um link HTML.
- 34 – Retornamos a variável form com os nossos elementos.
- 35 – Fechos o hook_form($form, &$form_state).
Nas linhas 30 a 34 adicionamos um elemento markup ao invés de um button. Ao clicar no Cancel, quero apenas que o form direcione o usuário para um determida url. Se fosse um button, teriamos que criar um submit para realizar o redirecionamento do form.
Vamos testar ?
Se você chegou nessa tela, meus parabéns!!
No próximo artigo iremos implementar os outros passos, qualquer duvida, crítica, sugestão, ameaça é deixar um comentário. Até lá!
Artigo publicado originalmente em Drupal de Elite http://drupaldeelite.com.br/blog/listando-conteudo-programaticamente-1