SNIPPET: Criando páginas com conteúdo programático sem usar o filtro PHP
Feliz ano novo, pessoas!
O primeiro artigo do ano é da coluna SNIPPET, e vai explicar como criar uma página que executa um código PHP qualquer, sem a necessidade de usar o módulo PHP Filter.
Tudo começou com um post do Joel Wallis sugerindo uma solução para quando um bloco customizado com código PHP incorreto quebra o seu projeto.
O José da Chuva-inc, a publicou um texto sugerindo que o ideal é não utilizar o filtro PHP pois o mesmo pode acarretar problemas de segurança. Em vez disso, ele ensinou a criar os blocos diretamente com PHP, através de um módulo customizado.
O próximo passo natural é evitar usar o filtro PHP na criação de páginas, pelos mesmos motivos apresentados pelo post do Zé.
Começando
Primeiro, crie uma pasta dentro da pasta /sites/all/modules com o nome do módulo que desejamos criar. Eu chamei-o criativamente de "páginas" (mas não use acentos no nome da pasta).
Dentro desta pasta, crie dois arquivos de texto vazios e renomeie-os para paginas.info e paginas.php.
Dentro de paginas.info vamos escrever o seguinte código:
-
name = Páginas com código PHP -
description = Páginas customizadas para o meu projeto.
-
core = 7.x
-
package = Marcus VBP
Eu chamei o package de "Marcus VBP" porque é este o grupo em que o módulo irá aparecer na página de listagem de módulos. Você pode chamar do que quiser, obviamente.
E dentro do arquivos paginas.module vai o seguinte código:
-
<?php -
-
function paginas_menu() {
-
$items['custom/bazinga'] = array(
-
'title' => 'Bazinga!',
-
'page callback' => 'paginas_bazinga',
-
'access callback' => TRUE,
-
'type' => MENU_SUGGESTED_ITEM
-
);
-
return $items;
-
}
O primeiro passo é usar o hook_menu para criar o link para a página que iremos criar (o link em questão é custom/bazinga). As chaves utilizadas em cada array (onde cada array é o link que estamos criando) são os seguintes:
- title: o título da página.
- page callback: a função que irá construir o conteúdo da página (no nosso caso, é "paginas_bazinga").
- access callback: o valor TRUE significa que esta página não tem restrições de acesso.
- type: optei por usar a constante MENU_SUGGESTED_ITEM pois a mesma irá criar um item de menu, mas ele aparecerá desativado, dentro do menu "Navegação". Eu poderia omitir esta chave. O sistema utilizaria MENU_NORMAL_ITEM se for este o caso.
Eu poderia ainda especificar o menu onde o link apareceria, usando a chave menu_name. Como eu omiti, o Drupal utilizar o menu Navegação (Navigation) como padrão. Para mais detalhes sobre a função hook_menu, consulte a documentação.
O segundo e principal passo é criar a função paginas_bazinga, que conterá o conteúdo da página propriamente dito.
-
function paginas_bazinga() {
-
$conteudo = '';
-
$conteudo .= '<p>Esta é uma página com conteúdo customizado</p>';
-
$conteudo .= '<p>'. format_date(time(),'short') .'</p>';
-
$conteudo .= '<p>Proactively empower customer directed supply chains vis-a-vis enabled intellectual capital. Seamlessly supply strategic quality vectors rather than resource maximizing quality vectors. Distinctively extend web-enabled process improvements through user-centric markets. Synergistically integrate out-of-the-box portals after leading-edge opportunities. Objectively monetize professional leadership after proactive intellectual capital.</p>';
-
return $conteudo;
-
}
Utilize "return" para que o conteúdo da página seja exibido dentro da área de conteúdo do seu site. Caso você utilize "print $conteudo" no lugar de "return $conteudo" o conteúdo será exibido diretamente, sem ser incluído no tema ou em qualquer tipo de estrutura. Eu preparei exemplos:
Como podem ver, o processo é bem simples, e ainda deixa seu projeto mais seguro.
Use sem moderação. Até a próxima!