Tudo bem galera?
Vamos à segunda parte do nosso módulo custom_view. Veja aqui a primeira parte. Nessa etapa teremos que fazer algumas mudanças no nosso módulo.
Primeira mudança:
Iremos até o arquivo custom_view.admin.inc, no hook custom_view_form($form, &$form_state) e adicionaremos a função t($string, array $args = array(), array $options = array()) nos textos que queremos traduzir.
Fica dessa forma:
$form['title'] = array(
'#type' => 'checkbox',
'#title' => t('Title'),
'#description' => t('Let scheduled to appear the title'),
);
$form['capital'] = array(
'#type' => 'checkbox',
'#title' => t('Capital'),
'#description' => t('Let scheduled to appear in capital'),
);
$form['inhabitant'] = array(
'#type' => 'checkbox',
'#title' => t('Inhabitants'),
'#description' => t('Let scheduled to appear the number of inhabitants'),
);
Com essa função t($string, array $args = array(), array $options = array()) podemos traduzir os texto para qualquer idioma na interface do drupal.
Segunda mudança:
Ainda no arquivo custom_view.admin.inc, no hook custom_view_form($form, &$form_state), modificaremos o tipo do campo ‘pagination’.
Fica dessa forma:
$form['pagination'] = array(
'#type' => 'select',
'#title' => t('Items per page'),
'#options' => array(
5 => 5,
10 => 10,
15 => 15,
),
'#default_value' => 10,
'#description' => t('Number of items per page'),
);
O tipo do campo que antes era 'checkbox' alteramos para 'select'. Adicionamos a função t() nos texto. Criamos os '#options' com seus respectivos valores.
Agora iremos dar continuidade no desenvolvimento da segunda etapa. Só para relembrar, veja os passos que seguiremos:
1 – Criação de um modulo. OK
2 – Implementação do hook_menu(). OK
3 – Criação de um form na área administrativa. OK
4 – Criação do submit do form.
5 – Manipulação de variable_get($name, $default = NULL) e variable_set($name, $value).
6 – Implementação do hook_theme($existing, $type, $theme, $path).
7 – Criação de um template.
Já criamos o módulo custom_view (passo 1), implementamos o hook_menu() (passo 2), criamos o form (passo 3) e agora iremos desenvolver os demais passos.
Passo 4: manipulação de variable_set() e criação do submit do form.
Dentro do arquivo custom.view.admin.inc iremos criar o submit do form
/**
* Implements form submit
*/
function custom_view_form_submit($form, &$form_state) {
variable_set('form_values', $form_state['values']);
$form_state['redirect'] = "custom-view/view/brazilian_states";
}
4 – No Drupal essa função segue a seguinte nomenclatura, form ID + _submit. Dessa forma temos, custom_view_form seguido por _submit. O primeiro parâmetro é um array contendo as informações do próprio form. Ex: campos, action, method, theme, validate, id do form, etc. O segundo paramento é um array com o estado do form após o submit.
5 – Criação de uma variável persistente, cujo valor são as informações enviadas no form.
6 – Modificamos o redirect do form. Após o submit sermos direcionado para a url ‘custom-view/view/brazilian_states’.
7 – Fechamos o form submit.
Vamos voltar no arquivo custom_view.module e vamos criar a rota de menu para o redirect do form. Antes do return adicionem o seguinte trecho de código.
$items['custom-view/view/brazilian_states'] = array(
'title' => t('Listing'),
'page callback' => 'custom_view_views',
'access arguments' => array('administer custom view'),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
'file' => 'custom_view.admin.inc',
);
1 – Criaremos uma nova rota que irá nos direcionar para uma página com os resultados de uma consulta no banco de dados (iremos criar).
2 – Título para a pagina
3 – Função responsável por criar nossa pagina
4 – Permissão para acessar a rota do menu
5 – Permissão ao usuário para acessar o menu
6 – Registra uma caminho (url). Existem outros tipos de menu. Dê uma olhada emhttp://goo.gl/xa0s4 para maiores informações.
7 – Arquivo onde criaremos a nossa função callback.
8 – Fechamos a rota do menu.
Passo 5: Manipulação de variable_get($name, $default = NULL).
Agora iremos criar a função callback da rota de menu que acabamos de criar. Vamos para o arquivo custom_view.admin.inc
/**
* Function callback of menu
*/
function custom_view_views() {
$form_field = variable_get('form_field');
$content_view = array();
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'brazilian_states')
->pager($form_field['pagination']);
$result = $query->execute();
foreach ($result['node'] as $key => $node) {
$node_info = node_load($node->nid);
if ($form_field['title'] == 1) {
$content_view[$node_info->nid]['title'] = $node_info->title;
}
if ($form_field['capital'] == 1) {
$capital = entity_metadata_wrapper('node', $node_info);
$content_view[$node_info->nid]['capital'] = $capital->field_capital->value();
}
if ($form_field['inhabitant'] == 1) {
$inhabitant = entity_metadata_wrapper('node', $node_info);
$content_view[$node_info->nid]['inhabitant'] = $inhabitant->field_inhabitants->value();
}
}
$output = theme('custom_view_result', array(
'content_view' => $content_view,
));
$output .= theme('pager');
return $output;
}
4 – Criação da função.
5 – Recuperamos os valores da variável persistente, criada anteriormente no submit do form.
6 – Declaramos uma variável que receberá os valores que iremos passar para a função theme.
8 – Estanciamos o objeto responsável por listar o nosso conteúdo cadastrado.
9, 10 e 11 – Chamamos o método entityCondition($name, $value, $operator = NULL) e passamos algumas condições, primeiro o tipo de entidade e em seguida a própria entidade (node). Na segunda chamada do método passamos bundle e o tipo do bundle (brazilian_states).
12 – Adiciona a paginação e recebe como parâmetro a quantidade de itens por página.
13 – Executa a query e adiciona o resultado em uma variável
15 – Itera sobre a variável com os resultados da query
16 – Carrega as informações do(s) node(s).
18, 22 e 27 – Verifica se os campos ‘Título, Capital e Habitantes’ foram marcados no form. Assumindo que o valor 1 é para o checkbox marcado.
19, 24 e 29 – Adiciona os campos ao array que será passado para o template.
20, 25, 30– fecha a verificação.
23 e 28 – Utilizamos o método entity_metadata_wrapper($type, $data = NULL, array $info = array()) para abstrair o valor desse campo.
31 – fechamos o iterador
33 – Chamamos a função theme($hook, $variables = array()) onde informaremos o hook responsável pelo nosso theme.
34 – Passamos uma variável com os valores para hook_theme($existing, $type, $theme, $path).
35 – Fechamos o array e a função theme($hook, $variables = array()).
37 – Concatenamos mais um hook_theme($existing, $type, $theme, $path) a variável ‘$output’. Esse theme é responsável por renderizar a paginação.
38 – Retornamos a variável output.
39 – Finalizamos a função callback.
Passo 6: Implementação do hook_theme($existing, $type, $theme, $path)
Vamos realizar a implementação no arquivo custom_view.module
/**
* Implements hook_theme().
*/
function custom_view_theme($existing, $type, $theme, $path) {
return array(
'custom_view_result' => array(
'variables' => array('content_view' => NULL),
'template' => 'view_result',
'path' => drupal_get_path('module', 'custom_view') . '/themes',
),
);
}
4 – Implementação do hook_theme($existing, $type, $theme, $path)
5 – Retorna um array com as informações para criação do template
6 – Um sub array onde a chave é o nome do theme que chamamos na função callback.
7 – Onde passamos os valores das variáveis para o template.
8 – O nome do arquivo onde será o template. Não precisa adicionar extensão do arquivo.
9 – O caminho do arquivo. Utilizaremos a função drupal_get_path($type, $name) para retornar o caminho do módulo
10 – Fechamos o array do theme.
11 – Fechamos o array que será retornado.
12 – Fechamos o hook_theme($existing, $type, $theme, $path).
Passo 7: Criação de um template.
Agora vamos dentro da pasta custom_view e iremos criar uma pasta chamada themes. Dentro dessa pasta iremos criar um arquivo chamado view_result.tpl.php . Dentro desse arquivo vamos criar o template.
foreach ($content_view as $key => $value) {
if (isset($value['title'])) {
print($value['title']."<br>");
}
if (isset($value['capital'])) {
print($value['capital']."<br>");
}
if (isset($value['inhabitant'])) {
print($value['inhabitant']."<br>");
}
print("");
}
1 – Iremos iterar sobre a variável passada para o hook_theme($existing, $type, $theme, $path)
2, 5 e 8 – Iremos verificar se as variáveis existem
3, 6 e 9 – Aqui vamos imprimir as variáveis na tela caso elas passem pela verificação
4, 7 e 10 – Fechamos as verificações
11 – Vamos imprimir uma linha, apenas para separar os resultados da paginação
12 – Fechamos o iterador
Após isso limpem o CACHE.
Bom pessoal é isso, qualquer dúvida, critica, sugestão ou ameaça deixem um comentário. Lembrando que existem módulos que fazem esse trabalho de uma forma mais amigável. Mas para título de aprendizagem e conhecimento de hooks e funções do drupal essa sequencia de posts serve que é um beleza. Até a próxima.
Artigo publicado originalmente em Drupal de Elite http://drupaldeelite.com.br/blog/listando-conteudo-programaticamente-2



