Archive for the drupal Category

PHP como algumas outras linguagens, da ao programador uma liberdade maior na hora da programação, podendo ser feita a mesma coisa de várias maneiras. Porém nem sempre isso é bom, principalmente quando se trabalha em um projeto com multi programadores, cada programador desenvolvendo de uma maneira, escrevendo diferente um do outro, já viu o carnaval que é o resultado final.

Para solucionar isso, existem os code standard, padrões de código, normalmente um framework, um CMS, ou algum sistema segue 1 padrão de código (ou pelo menos se espera que siga), é o caso do Zend Framework, CakePHP e do Drupal.

Com base, nos padrões dos 2 frameworks, e do CMS citado acima, e com alguma experiencia que venho a ter, vou relatar em alguns posts algumas boas práticas de escrever o código PHP.

1 – Formatação do arquivo PHP:

1.1 – Tag de abertura:

O PHP tem suporte à short tag de abertura < ?, porém não é uma opção default em algumas configurações de servidor, logo é recomendado sempre usar a tag de abertura completa < ?php.

1.2 - Identação:

O padrão de identação varia nas referencias citadas acima, porém o mais comum de se achar, e ao mesmo tempo que da uma melhor visão é 4 espaços para cada identação. Ficando assim:

1
2
3
4
5
6
7
< ?php 
//primeiro nível
    //segundo nível
//primeiro nível
    //segundo nível
        //terceiro nível
?>

Na prática:

1
2
3
4
5
6
7
8
9
10
11
< ?php 
class Cobaia {
 
    public function __construct() {
        if (1 == 1) {
            print 'yeah';        
        }    
    }
 
}
?>

O uso da identação se da, para o programador ter uma melhor visão dos blocos, saber em que bloco se encontra a linha que ele está lendo, da um aspecto visual mais limpo ao código, logo melhora para achar o que é necessário.

1.3 - Tamanho da linha:

O tamanho de cada linha de código no PHP é relativo, mas visualmente falando uma linha pode ter no máximo 80 caracteres, pois é o máximo de visão que quem está lendo o código fonte vai ter, algumas IDE's como o Netbeans, tem uma linha vertical, que demarca essa posição, logo quando sua linha de código ultrapassar ela é melhor termos uma quebra de linha.

Por enquanto era isso no próximo post vamos falar de nomenclatura.

Drupal hook_theme()

| dezembro 17th, 2008

O Drupal por ser um CMS e largamente utilizado, possuí um sistema de temas,, ou seja, é possível trocar toda a camada de visão do drupal, assim como algumas funções do drupal que retornem html, podem ser implementadas dentro do tema, para fazer uma substituição do resultado final.

Tendo isso em conhecimento, os módulos, normalmente necessitam retornar algum resultado, seja ele o que for ( HTML, XML, RSS…), e uma maneira de possibilitar os temas sobrescreverem os resultados é implementando em seu módulo o hook_theme(). Seu uso é super simples:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function newspaper_theme() {
	return array(
    'newspaper' => array(
          'template' => 'newspaper',
          'arguments' => array('newspaper' => NULL),
	   ),
     'newspaper_archive' => array(
        'template' => 'newspaper_archive',
        'arguments' => array('newspapers' => NULL)
	   ),
     'newspaper_block' => array(
        'arguments' => array('path' => NULL),
        'file'  => 'newspaper.theme.inc',
	   ),
	   'teaser_block' => array(
	       'arguments' => array('path' => NULL),
	       'file' => 'teaser.theme.inc',
	   ),
     'teaser' => array(
         'arguments' => array('teaser' => NULL),
         'template' => 'teaser',
     )
  );
}

Como pode ser visto sua implementação é super simples, definimos o nome dos temas que queremos, no exemplo temos, o array newspaper. Nesse array, recebe outro array com algumas definições:

  • Arguments: Os argumentos que a função de tema tem que receber, por exemplo: theme(’newspaper’, 23);
  • File: Indicamos onde está implementada a função tema, por exemplo:
    file: newspaper.theme.inc e no arquivo temos a função theme_newspaper()
  • Template: Se passa 1 template, quando desejamos usar um arquivo de template, para exibir os resultados, salva o nome do template, tem que ser igual ao dado no theme.

Com o hook_theme, implementado e as funções de temas criadas, ou os templates, é possível ter diversos resultados, e dar visão as funcionalidades do seu modulo, sem perder a flexibilidade de sobreposição, ou seja continua sendo possível alterar a forma de exibir.

Uma dica preciosa, para quem esta criando módulos, ou fazendo algumas alterações no Drupal, é nunca se esquecer:

Limpar o cache, sempre que algo não esta funcionando, sem motivo aparente!

Isso é praticamente uma regra, por fazer muito cache, as vezes o drupal, pelo menos na versão 6, acaba se perdendo, e para o desenvolvedor da muita dor de cabeça, resolvi por um post-it, no monitor para sempre me lembrar disso, limpar o cache!

Criar permissões no drupal, para seus módulos é simples, basta implementar a função hook_perm(), e utilizar depois nos items do menu, ou algumas funções do drupal que nos ajuda na tarefa.

Implementando o hook_perm():

1
2
3
4
function meumodulo_perm() {
return array('meu modulo access', 'meu modulo view all'); //Criamos duas permissões, "meu modulo access" e "meu modulo view all"
 
}

Com isso já criamos 2 permissões, para usar agora temos algumas opções, no hook_menu do último post conhecemos o parâmetro dos items o ‘access arguments’, com ele é possível passar 1 array, com as permissões para acessar determinado item, vamos a um exemplo:

1
2
3
4
5
6
7
8
9
10
    $items['admin/novo_item/delete'] = array(
        'title' =&gt; 'Delete Titulo', //Título que vai aparecer
        'description' =&gt; 'A descrição de nosso Item', //Descrição de nosso Item
        'page callback' =&gt; 'minhafuncao_page', //A função que iremos chamar
        'page arguments' =&gt; array('edit'), //Parametros que desejamos passar para nossa função
        'file' =&gt; 'meumodulo.module', //O arquivo onde está sua função
        'access arguments' =&gt; array('meu modulo access'), //Definimos a permissão de acesso ao Item
        'type' =&gt; MENU_CALLBACK, //Definimos que o item vai ser acessado apenas por URL ou seja por links na página não no menu
 
    );

Acima definimos que para acessar o delete de 1 item, temos que ter a permissão meu “modulo access”.

Algumas outras funções que podem nos ajudar no desenvolvimento, para restringir acessos são:

  • user_access()
    • Checa se o usuário tem acesso a determinada função, como parâmetros recebe uma string com as permissões entre vírgulas, e pode receber também o id do usuário, porém sendo o segundo não obrigatório, caso não passado a função pega o usuário ativo no momento.
  • drupal_access_denied()

    • Gera uma página de erro 403, indicando assim que o usuário não está, habilitado para acesso a URL, em conjunto com a user_access(), onde verificamos se o usuário tem acesso, é uma boa maneira de indicar que o usuário não tem acesso a determina “feature”.

Existem algumas outras funções, que podem ajudar quanto as permissões, assim como módulos, vale dar uma olhada na documentação do drupal, assim como, nos projetos.

Drupal entendendo o hook_menu()

| dezembro 15th, 2008

Para criarmos menus no drupal, o mesmo tem a função hook_menu, que pode ser implementada em nossos módulos. Seu uso é bem simples:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
function meumodulo_menu() {
	$items = array();
	$items['admin/novo_item'] = array(
		'title' => 'Titulo', //Título que vai aparecer
		'description' => 'A descrição de nosso Item', //Descrição de nosso Item
		'page callback' => 'minhafuncao_page', //A função que iremos chamar
		'page arguments' => array('list'), //Parametros que desejamos passar para nossa função
		'file' => 'meumodulo.module', //O arquivo onde está sua função
		'access arguments' => array('meu modulo access'), //Definimos a permissão de acesso ao Item
		'type' => MENU_NORMAL_ITEM, //Definimos que o item é normal ou seja ele ira aparecer no menu de navegação
	);
	$items['admin/novo_item/add'] = array(
		'title' => 'Add Titulo', //Título que vai aparecer
		'description' => 'A descrição de nosso Item', //Descrição de nosso Item
		'page callback' => 'minhafuncao_page', //A função que iremos chamar
		'page arguments' =&gt; array('add'), //Parametros que desejamos passar para nossa função
		'file' => 'meumodulo.module', //O arquivo onde está sua função
		'access arguments' => array('meu modulo access'), //Definimos a permissão de acesso ao Item
		'type' => MENU_CALLBACK, //Definimos que o item vai ser acessado apenas por URL ou seja por links na página não no menu
	);
	$items['admin/novo_item/list'] = array(
		'title' => 'Titulo', //Título que vai aparecer
		'description' => 'A descrição de nosso Item', //Descrição de nosso Item
		'page callback' => 'minhafuncao_page', //A função que iremos chamar
		'page arguments' => array('list'), //Parâmetros que desejamos passar para nossa função
		'file' => 'meumodulo.module', //O arquivo onde está sua função
		'access arguments' => array('meu modulo access'), //Definimos a permissão de acesso ao Item
		'type' => MENU_DEFAULT_LOCAL_TASK, //Definimos que o item é a tarefa principal com isso criamos tabs para navegação e a tab principal é essa
	);
	$items['admin/novo_item/add'] = array(
		'title' => 'Add Titulo', //Título que vai aparecer
		'description' => 'A descrição de nosso Item', //Descrição de nosso Item
		'page callback' => 'minhafuncao_page', //A função que iremos chamar
		'page arguments' => array('list'), //Parâmetros que desejamos passar para nossa função
		'file' => 'meumodulo.module', //O arquivo onde está sua função
		'weight' => 1, //Definimos a posição da tab
		'access arguments' => array('meu modulo access'), //Definimos a permissão de acesso ao Item
		'type' => MENU_LOCAL_TASK, //Definimos que o item é a tarefa principal com isso criamos tabs para navegação e a tab principal é essa
	);
	$items['admin/novo_item/edit'] = array(
		'title' => 'Edit Titulo', //Título que vai aparecer
		'description' => 'A descrição de nosso Item', //Descrição de nosso Item
		'page callback' => 'minhafuncao_page', //A função que iremos chamar
		'page arguments' => array('edit'), //Parâmetros que desejamos passar para nossa função
		'file' => 'meumodulo.module', //O arquivo onde está sua função
		'access arguments' =&gt; array('meu modulo access'), //Definimos a permissão de acesso ao Item
		'type' => MENU_CALLBACK, //Definimos que o item vai ser acessado apenas por URL ou seja por links na página não no menu
	);
	$items['admin/novo_item/delete'] = array(
		'title' => 'Delete Titulo', //Título que vai aparecer
		'description' => 'A descrição de nosso Item', //Descrição de nosso Item
		'page callback' => 'minhafuncao_page', //A função que iremos chamar
		'page arguments' => array('edit'), //Parâmetros que desejamos passar para nossa função
		'file' => 'meumodulo.module', //O arquivo onde está sua função
		'access arguments' => array('meu modulo access'), //Definimos a permissão de acesso ao Item
		'type' => MENU_CALLBACK, //Definimos que o item vai ser acessado apenas por URL ou seja por links na página não no menu
	);
	$items['listagem'] = array(
	    'title' => 'Página dos dados',
	    'page callback' => 'minhafuncao_frontend',
	    'access callback' => TRUE, //Definimos que o acesso é liberado
	    'type' => MENU_CALLBACK,
	);
 
	return $items;
}

Com isso podemos ver que a estrutura é bem simples, o hash passado para o array é a url de acesso, e alguns parâmetros são pré-definidos, assim como constantes que definem o tipo de ação de cada item. Para mais informações acesse a documentação.

BuscaPé, líder em comparação de preços na América Latina