Criando Módulos XOOPS - 02: Constantes
Publicado por Luisx em 30-01-2011 (1517 leituras)Criando Módulos XOOPS - 02: Constantes
Olá pessoal, estamos aqui com mais uma etapa do nosso aprendizado sobre o desenvolvimento de módulos para XOOPS, hoje trataremos das constantes de linguagem.
02: Constantes no XOOPS
02.1. O XOOPS é um CMS programado na linguagem PHP orientado a objetos, inclusive é o significado dos dois ós da palavra XOOPS, como qualquer linguagem de programação é comum falar em variáveis, que no php são identificadas pelo cifrão "$" seguido do nome da variável, sabemos também que variável é uma espécie de cápsula em que se armazena algum dado, porém o mesmo pode ser mudado a qualquer tempo, definindo novo dado para a mesma variável ou eliminando ela.
02.2. Pois bem, constante é praticamente a mesma coisa que a variável, porém seu conteúdo é definido de modo fixo ou único, seu valor não pode mudar durante a execução do script, com exceção das "constantes mágicas" (que não são constantes de verdade). Outra diferença que a constante não é identificada com nenhum sinal, ela é definida e a partir daque ponto ela carrega o dado definido para ela, vale lembrar que o PHP é sensível ao formato da letra (case-sensitive).
02.3. No XOOPS temos particularmente dois tipos de constantes, vamos chamar de constantes de programação e constantes de linguagem ou idioma (que fica melhor de identificar), por padrão do desenvolvimento do CMS, as constantes devem sempre estar escritas com todas as letras em maiúsculo, ou seja, CONSTANTES. Ainda nessa padronização, as CONSTANTES de programação são escritas direta e naturalmente, enquanto as CONSTANTES de idioma devem começar com um traço de chão (underline) "_", ficando assim _CONSTANTE. Essa padronização ajuda principalmente a tornar o código mais legível.
02.4. Para se definir uma constante, basta usar o comando "define()" PHP:
< ?php
define("CONSTANTE","Valor da constante");
? > 02.5. De princípio pode parecer estranho, mas esse recurso da linguagem é muito útil e com o tempo você vai perceber, como é útil o XOOPS também se utilizou desse recurso.
02.6: Constantes de Programação no XOOPS
02.6.1. Na primeira lição deste nosso mini curso utilizamos uma constante duas vezes, não deveria, mas a força do hábito acaba automatizando as coisas e fazemos sem perceber, já identificou onde usamos a tal constante?
02.6.2. Exatamente, usamos no arquivo index.php para chamar dois arquivos o header.php e o footer.php.
02.6.3. A constante em questão foi a XOOPS_ROOT_PATH, que como o seu próprio nome sugere o seu valor é o caminho da raiz do XOOPS, ou seja, aquele diretório onde se encontram todos os arquivos e subdiretórios do nosso querido CMS.
02.6.4. Estas constantes estão espalhadas por todo o código do XOOPS, exercendo a sua finalidade, porém podemos neste ponto do mini curso observar algumas constantes muito importantes, as que estão definidas no arquivos mainfile.php, no diretório raiz do XOOPS.
02.6.5. (Não vou postar o código do arquivo aqui, pois não é o foco do nosso tuto, mas vamos analisar as constantes do arquivo:
a) XOOPS_MAINFILE_INCLUDED, se a constante se não estiver setada como verdadeira a mesma será setada naquele momento. Esta constante não nos serve muito, a finalidade dela é dizer para o XOOPS se o sistema já está instalado, através da inclusão do arquivo mainfile;
b) XOOPS_ROOT_PATH, esta é praticamente a constante mais utilizada do XOOPS, pois define o caminho físico para o diretório raiz do XOOPS, para exemplificar, aqui no meu pc é "G:/xampp/htdocs/xoops/250" (sim, estou usando vindóvis neste momento), observamos que sem a barra final;
c) XOOPS_PATH, armazena o caminho físico para as bibliotecas do XOOPS;
d) XOOPS_VAR_PATH, armazena o caminho físico para os arquivos de dados do XOOPS;
e) XOOPS_TRUST_PATH, armazena o caminho físico para as bibliotecas do XOOPS, obsevamos pelos comentários do código que é uma solução temporária para compatibilidade, não recomendamos usar essa constante no módulo, pois eventualmente numa nova versão do XOOPS ela será removida e o módulo necessitará ser revisado para manter a compatibilidade com o próprio XOOPS;
f) XOOPS_PROT, armazena o protocolo HTTP ou HTTPS já com os dois pontos e as duas barras "://";
g) XOOPS_URL, esta constante disputa com a XOOPS_ROOT_PATH o posto de mais utilizada no código do CMS e dos módulos, pois ela armazena o endereço eletronico da página inicial do XOOPS, no meu pc é "http://localhost/xoops/250", vale lembrar que embora levem para o mesmo lugar são diferentes, principalmente no uso.
02.6.6. O arquivo tem mais constantes, mas paramos por aqui, pois estão serão muito úteis no desenvolvimento. Mas como usamos? Na escrita do código incluímos a constante como se o seu valor estivesse escrito lá, por exemplo:
< ?php
define("CONSTANTE","Valor da constante");
echo "O ".CONSTANTE." é incluído no código ou na impressão como uma variável";
// Resultado: "O Valor da constante é incluído no código ou na impressão como uma variável"
echo XOOPS_URL."/modules/meumodulo/images/meumodulo_logo.png";
// Resultado: "http://localhost/xoops/250/modules/me ... /meumodulo_logo.png"
? > 02.6.7. No início deste item comentamos que utilizamos duas vezes a constante para chamar arquivos, mas vimos que chamamos três arquivos para o index.php, por que então não utilizamos três vezes a mesma constante? Está correto quem lembrou que a constante, assim como as variáveis, precisam ser definidas, sendo assim apenas após a execução do arquivo mainfile.php que as constantes começaram a existir para o nosso módulo.
02.6.8. Neste ponto a utilidade das constante já ficou mais clara.
02.7. Constantes de Idioma no XOOPS
02.7.1. As constantes de idioma têm a mesma função que as demais, porém específicas para propriciar a internacionalização do XOOPS e de seus módulos, para que o usuário possa num clique alterar todo o idioma do CMS.
02.7.2. Logicamente, dentro do diretório do módulo, as definições de linguagem ficam dentro do sub-diretório chamada "language" e o dentro de um novo sub-diretório com o nome do idioma a que se refere.
02.7.3. Para que um idioma funcione no XOOPS todos os diretórios que contiverem as traduções devem ter o mesmo nome, ou seja, se no diretório "language" principal do XOOPS o idioma português brasileiro estiver num sub-diretório chamado "pt-br_utf8" em todos os demais locais também deverão estar com o mesmo nome.
02.7.4. Aproveitamos para esclarecer que caso você obtenha um módulo com o diretório de linguagem chamado "portuguesebr" e o seu XOOPS usa "pt-br_utf8", basta alterar o nome do diretório para o mesmo do usado na sua instalação XOOPS. Observação: Não estou considerando a possibilidade dos arquivos estarem codificados em charsets diferentes.
02.7.5. Como já discutimos a função das constantes, sabemos que as constantes de idioma são definidas em um diretório próprio, que elas começam com um traço de chão, e queremos que nosso módulo tenha a capacidade de ser distribuido em várias línguas, vamos por a mão na massa e tornar nosso módulo multi idiomas. Vamos começar com o arquivo xoops_version.php, susbtituindo o nome, a descrição e a licença por constantes de idioma, que são os dados atuais do xoops_version que necessitariam e podem ser traduzidos, então o arquivo ficará assim:
< ?php
// $Id: xoops_version.php,v 1.0 2011/01/30 04:03 Luisx Exp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000-2011 XOOPS.org //
// //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// definimos o nome do módulo que aparecerá no sistema do XOOPS
$modversion['name'] = _MI_MEUMODULO_NAME;
// definimos o a versão atual do módulo
$modversion['version'] = 1.01;
// definimos o autor do módulo
$modversion['author'] = "GUX Brasil";
// definimos uma descrição do módulo, que aparecerá nas informações gerais do módulo
$modversion['description'] = _MI_MEUMODULO_NAMEDESC;
// definimos os créditos - colaboradores com o módulo
$modversion['credits'] = "Luisx e usuários do GUX Brasil";
// definimos o local do arquivo de ajuda (documentação) do módulo (o endereço é relativo ao root do módulo ou seja "..modulesmeumodulo"
$modversion['help'] = "ajuda.html";
// definimos o tipo de licença de distribuição do módulo - o XOOPS e todos os seus componentes, inclusive os módulos de terceiros devem ser distribuídos com a licença GPL
$modversion['license'] = _MI_MEUMODULO_LICENSE;
// definimos se o módulo é reconhecido pela nave mãe (xoops.org) ou não, ou seja, se faz parte de uma distribuição oficial, praticamente todos não são, se oficial marcamos 1 se não oficial marcamos 0
$modversion['official'] = 0;
// definimos a imagem (logo) do módulo, para identificarmos no sistema
$modversion['image'] = "images/meumodulo_logo.png";
// definimos o nome do diretório root do módulo
$modversion['dirname'] = "meumodulo";
// definimos se o módulo vai aparecer no menu principal, se sim marcamos 1, se não marcamos 0
$modversion['hasMain'] = 1;
? > 02.7.5.1. Observamos que na variável "version" alteramos para 1.01, pois neste momento estamos implementando alterações no nosso módulo.
02.7.6. Agora que substituímos os valores por constantes, temos que definí-las, então dentro do diretório "modules/meumodulo/" criaremos a sub-diretório "language" e dentro deste criaremos os sub-diretórios "pt-br_utf8" e "english".
02.7.6.1. Criaremos um arquivo chamado "modinfo.php" dentro do diretório "modules/meumodulo/language/pt-br_utf8/" com os defines de idioma:
< ?php
// $Id: modinfo.php,v 1.0 2011/01/30 02:17 Luisx Exp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000-2011 XOOPS.org //
// //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// _LANGCODE: pt-BR
// _CHARSET : UTF-8
// Module Info
// O nome do módulo
define("_MI_MEUMODULO_NAME","Meu Módulo Xoops");
// A descrição do módulo
define("_MI_MEUMODULO_NAMEDESC","Módulo resultado da série de tutoriais sobre desenvolvimento de módulos para XOOPS");
// A licença do módulo
define("_MI_MEUMODULO_LICENSE","GPL veja a LICENÇA");
? > 02.7.6.2. Agora criamos o mesmo arquivo, porém dentro do diretório "modules/meumodulo/language/english/" com os defines do idioma inglês:
< ?php
// $Id: modinfo.php,v 1.0 2011/01/30 02:17 Luisx Exp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000-2011 XOOPS.org //
// //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// _LANGCODE: pt-BR
// _CHARSET : UTF-8
// Module Info
// O nome do módulo
define("_MI_MEUMODULO_NAME","My Xoops Module");
// A descrição do módulo
define("_MI_MEUMODULO_NAMEDESC","Module result of the series of tutorials on module development for XOOPS");
// A licença do módulo
define("_MI_MEUMODULO_LICENSE","GPL see LICENSE");
? > 02.7.6.3. Agora vamos ao nosso gerenciamento de módulos e veremos que já está indicando que devemos atualizar o módulo, ao atualizar, observamos que corre tudo bem. Outra marca que utilizamos para identificar esta alteração está no nome, antes o nome do módulo era apenas "Meu Módulo" agora é "Meu Módulo Xoops", apenas com a atualização o XOOPS não modifica o nome já registrado, para conferirmos que as constantes estão funcionando, vamos desinstalar o módulo e instalar novamente.
02.7.6.4. Agora criamos um arquivo chamado "main.php" dentro do diretório "modules/meumodulo/language/pt-br_utf8/" com os defines do idioma português para o index do módulo, e, depois repetimos para o idioma inglês:
< ?php
// $Id: main.php,v 1.0 2011/01/30 02:25 Luisx Exp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000-2011 XOOPS.org //
// //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// _LANGCODE: pt-BR
// _CHARSET : UTF-8
// Module Data
// Saudação
define("_MD_MEUMODULO_HELLO",
"<h1>
Olá GUX, este é seu primeiro e mais simples módulo</h1>
");
// Parágrafo
define("_MD_MEUMODULO_PAR","
<p>
logo este módulo estará bem mais usável</p>
");
// Segundo Parágrafo
define("_MD_MEUMODULO_PAR2","
<p>
estes textos estão definidos em constantes!</p>
");
? > 02.7.6.5. Agora vamos ao nosso arquivo "index.php" para aplicar estas constantes:
< ?php
// $Id: index.php,v 1.0 2011/01/30 02:28 Luisx Exp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000-2011 XOOPS.org //
// //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// chamamos o arquivo mainfile.php
require_once('../../mainfile.php');
// chamamos o arquivo header.php
require_once(XOOPS_ROOT_PATH.'/header.php');
// adicionamos o código necessório ao funcionamento do módulo
echo _MD_MEUMODULO_HELLO;
echo _MD_MEUMODULO_PAR;
echo _MD_MEUMODULO_PAR2;
// chamamos o arquivo footer.php
require(XOOPS_ROOT_PATH.'/footer.php');
? > 02.7.6.6. Pronto, nosso módulo já pode falar inglês ou português.
02.7.7. Vamos agora entender um pouco do nome padronizado para as constantes:
02.7.7.1. Usamos o início _MI para "Module Information", ou seja, para quando lermos a constante saberemos que se trata de uma informação do módulo, _MD ou _MC para "Module Data" ou "Module Content", _MB para "Module Block", _AM para "Administration Module, e assim sucessivamente, sempre seguido pelo nome do módulo _MEUMODULO, e, depois pela identificação da função _NAME, etc.
02.7.7.2. Vejam que a sigla inicial é comum no XOOPS e toda a constante escrita em inglês, mas isso não obsta o programador a criar a constante da forma como ele quiser, porém dificultará a leitura e manutenção do código, bem como pode acabar criando um constante já existente e quando executar o módulo encontrar um conflito.
02.7.7.3. Todas as constantes de idioma para o xoops_version.php, ou seja, que tratem de informações do módulo e para o funcionamento do módulo ficam por padrão no arquivo modinfo.php, todas as constantes do conteúdo do módulo por padrão ficam no arquivo main.php, todas as constantes do consteúdo dos blocos ficam no arquivo blocks.php, e todas as constantes da administração do módulo ficam por padrão no arquivo admin.php, todos dentro do diretório "language/NomeDoIdioma/".
02.7.7.4. Estes arquivos são lidos automaticamente pelo XOOPS. Podemos também armazenar as constantes em outros arquivos caso achemos necessário, porém temos que chamar esses arquivos para dentro do script quando necessário.
02.8. Lembrem que as discussões e dúvidas estão no Fórum, no tópico Criando Módulos Xoops – 01: Constantes.
| Navegue pelos artigos | |
Criando Módulos XOOPS - 01: Fundamentos |
Criando Módulos XOOPS - 03: Templates
|
|
Os comentários são de propriedade de seus respectivos autores. Não somos responsáveis pelo seu conteúdo.
|
||||




