Você está na página 1de 13

19

CAPTULO 1
Conceitos de extenses Joomla!
Entendendo o que extenso
Extenso pode ser entendida como uma pequena aplicao desenvolvida com
regras de construo estabelecidas pelo ambiente Joomla!. um produto
instalvel que tem por nalidade adicionar novas caractersticas ao Joomla!.
As extenses so classicadas em componentes, mdulos, plug-ins, temas
(templates) e idioma:

Componente: um tipo de aplicao responsvel por apresentar conte-
do na pgina principal. Somente um componente pode ser executado
ou exibido por pgina carregada. Entre os demais tipos de extenses
o mais complexo no que se refere ao esforo de desenvolvimento e
administrao. Cada componente em uma instalao Joomla! tem um
nome nico. Em geral, seu cdigo dividido em duas partes, frontend
e backend. Cada parte ca situada em pastas (diretrios) distintas.

Mdulo: uma pequena poro de software que normalmente apre-
sentada como parte de um contedo de uma pgina. Mais de um
mdulo pode ser apresentado em uma pgina na forma de uma barra
lateral, menu, cabealho ou rodap. A congurao de um mdulo
consiste basicamente em denio de parmetros de apresentao,
incluindo a sua posio na pgina.

Plug-in: uma pequena poro de cdigo contido em uma funo ou
mtodo que pode ser executado em resposta a eventos que ocorrem
no Joomla!. Como exemplo, possvel desenvolver um plug-in que
coloca parte do texto de um artigo em negrito durante a sua apre-
sentao na pgina.
Joomla! Avanado 20

Template: responsvel pela forma com que o site ser apresentado ao
usurio, incluindo: cores, fontes de caracteres, estilos etc. ele quem
determina a organizao dos objetos de uma pgina no navegador web.

Idioma: permite o desenvolvimento de sites para vrios idiomas. Ao
instalar esse tipo de extenso e selecion-lo como padro, todas as
mensagens, menu e textos pertencentes do Joomla! sero apresentados
no novo idioma.
A gura 1.1 ilustra uma pgina disponvel aos visitantes destacando as
extenses mencionadas anteriormente.
Figura 1.1 Exemplo de disposio de componente, mdulos e plug-in em uma pgina
Joomla! (frontend).
Entendendo componentes do Joomla!
Um componente dividido em duas partes, frontend e backend. O frontend
a parte responsvel pela apresentao do contedo para o pblico usurio
em geral. Frontend pode ser entendido tambm como website. O backend
parte responsvel pela manuteno do componente. Geralmente, usamos o
backend para administrar componentes no Joomla! e denir quando, onde,
de que forma e com qual contedo um componente deve ser apresentado
no site. As guras 1.2a e 1.2b ilustram melhor esse conceito.
21 Captulo 1 Conceitos de extenses Joomla!
Figura 1. 2a Apresentao do frontend do Joomla!.
Figura 1.2b Apresentao do backend do Joomla!.
Joomla! Avanado 22
Estrutura de arquivo de um componente
Um componente em Joomla! consiste em um ou mais arquivos (scripts PHP,
HTML, JavaScript, CSS, mdia etc.) divididos em basicamente duas pastas
principais: administrator/components/, para efetuar operaes de administrao
(backend), e components/, para executar operaes de apresentao ao usurio
nal (frontend). A gura 1.3 ilustra a estrutura de diretrio do Joomla!.
Figura 1.3 Estrutura de pastas do Joomla! destacando backend e frontend.
Ainda em relao gura 1.3, observe que o Joomla! foi instalado na
pasta /opt/lampp/htdocs/joomla-teste. As linhas destacadas representam as pastas
utilizadas para os componentes. No Windows, utilizando o XAMPP, a ins-
talao equivalente seria no diretrio c:\xampp\htdocs\joomla-teste.
Como ponto de partida, vamos iniciar com o desenvolvimento de um
componente cuja nica funo ser apresentar a mensagem Al na rea de
contedo da pgina principal. Para tanto, crie um script PHP conforme
mostrado a seguir.
Arquivo alo.php:
<?php
echo 'Al!'
?>
Usando como referncia a pasta de instalao do Joomla!, entre no
diretrio components, crie a pasta com_alo e grave o script alo.php. A gura 1.4
ilustra essa operao.
23 Captulo 1 Conceitos de extenses Joomla!
Figura 1.4 Apresentao do script alo.php gravado em components/com_alo.
muito importante que o leitor no confunda as pastas administrator/
components/ e components/. A primeira est relacionada administrao e no
objeto deste captulo.
Para execuo do componente, digite a URL http://localhost/joomla-teste/
index.php?option=com_alo em seu navegador web. O resultado dever se
parecer com o contedo da gura 1.5:
Figura 1.5 Execuo do componente Al (frontend).
Observe que a execuo do componente delegada ao Joomla! via URL
com o parmetro "?option=com_alo". Isso suciente para que o script alo.php seja
executado. Contudo, da forma que o componente foi construdo, possvel
burlar o sistema e execut-lo sem o controle do Joomla!. Para vericar isso,
Joomla! Avanado 24
execute o script alo.php usando a URL http://localhost/joomla-teste/components/
com_alo/alo.php. O resultado dessa operao simplesmente uma pgina limpa
contendo a mensagem 'Al!'. A gura 1.6 ilustra esse procedimento.
Figura 1.6 Execuo direta do script alo.pho.
claro que o comportamento mostrado na gura 1.6 no desejvel.
Qualquer pessoa com conhecimento da estrutura de pastas do Joomla! po-
deria ter acesso direto ao componente. Para evitar isso, recomendado que
todo script PHP escrito para o Joomla! inicie com o cdigo "defned('_JEXEC')
or die('Acesso restrito ao Joomla!')", conforme indicado no cdigo a seguir.
Arquivo alo.php protegido do acesso direto:
<?php
defined('_JEXEC') or die('Acesso restrito ao Joomla!');
echo 'Al!'
?>
Faa a alterao indicada no script alo.php e tente executar a URL http://
localhost/joomla-teste/components/com_alo/alo.php novamente. O resultado
dever parecer com a gura 1.7.
Figura 1.7 Evitando acesso direto ao componente.
25 Captulo 1 Conceitos de extenses Joomla!
Explicao: a constante _JEXEC denida no script index.php existente no
diretrio raiz da instalao do Joomla!. Se o leitor abrir esse script ver o
comando defne('_JEXEC',1). importante que o leitor perceba que index.php o
ponto de entrada para execuo de qualquer componente. O que determina
qual componente ser executado o contedo do argumento option (por
exemplo: index.php?option=com_alo). Dessa forma, possvel vericar no script alo.
php se a constante _JEXEC foi denida, caso contrrio a execuo ser cancelada.
Interao com o componente
Vamos fazer uma pequena alterao no cdigo alo.php de forma a deix-lo
mais amigvel. Isto , vamos interagir com o componente enviando par-
metros via URL.
Altere o cdigo alo.php conforme mostrado a seguir.
<?php
defined('_JEXEC') or die('Acesso restrito ao Joomla!');
$task = JRequest::getVar('task',' ');
$nome = JRequest::getVar('nome',' ');
switch ($task) {
case 'show':
echo 'Al ' . $nome . '. Seja bem vindo ao Joomla!';
break;
default:
echo 'Al visitante desconhecido. Seja bem vindo ao Joomla!';
break;
}
?>
A alterao sugerida apresenta alguns elementos novos. A chamada
JRequest::getVar obtm de $_REQUEST, $_POST ou $_GET os parmetros desejados. Des-
sa forma, eliminamos a possibilidade de utilizao de tcnicas de invaso
como code injection.
Se a URL http://localhost/joomla-teste/index.php?option=com_alo&task=show&nome=Ricardo
for executada, $task receber o valor show e $nome receber o valor Ricardo,
respectivamente. O parmetro option informa ao Joomla! a pasta do com-
ponente a ser executado. Em nosso caso, a pasta com_alo e o script alo.php.
Continuando com o uxo de execuo, quando os parmetros task e nome
no so includos na URL, uma string vazia atribuda tanto a varivel $task
como $nome. Dessa forma, o comando switch desvia o uxo de execuo para
Joomla! Avanado 26
a clusula default e uma mensagem genrica apresentada no navegador. Se
$task e $nome contiverem show e Ricardo, respectivamente, uma mensagem
personalizada ser apresentada.
No navegador web digite a URL http://localhost/joomla-teste/index.
php?option=com_alo e em seguida a URL http://localhost/joomla-teste/index.
php?option=com_alo&task=show&nome=Ricardo. As guras 1.8a e 1.8b ilustram os respec-
tivos resultados.
Figura 1.8a Apresentao de mensagem genrica na rea de contedo.
Figura 1.8b Apresentao de mensagem personalizada na rea de contedo.
27 Captulo 1 Conceitos de extenses Joomla!
Joomla! um sistema de cdigo aberto. Das vrias vantagens nessa mo-
dalidade de distribuio, destaca-se a possibilidade de aprender analisando
o prprio cdigo-fonte do sistema. Em particular, o Joomla! vem com um
conjunto bsico de extenses. Uma maneira interessante de aprender a
desenvolver estudar o cdigo dos componentes, mdulos e plug-ins ins-
talados. Comece observando como os arquivos esto organizados, tanto
no lado administrador (backend) como no site (frontend). Se necessrio,
utilize J!Dump, apresentado a seguir, para inspecionar variveis.
Uso de J!Dump para mostrar dados em uma janela pop-up
J!Dump uma verso avanada das funes do PHP var_dump e print_r. Essa
ferramenta torna o desenvolvimento de extenses, incluindo templates, mais
fcil. J!Dump dividido e distribudo em duas extenses, um componente
e um plug-in. Tanto o componente como o plug-in devem ser instalados,
caso contrrio ocorrer erro ao tentar us-lo. O processo de instalao o
mesmo utilizado para instalar qualquer extenso.
Baixando o componente e o plug-in do J!Dump
Entre no site http://extensions.joomla.org/ e localize J!Dump ou v direto a http://
joomlacode.org/gf/project/jdump/frs. Na elaborao deste livro os arquivos baixados
foram jdump_v1.1.0_component.zip (componente) e jdump_v1.1.0_plugin.zip (plug-in).
Importante: aps a instalao, no menu Extenses selecione Administrar
plug-in e altere o status de J!Dump para habilitado.
Inspeo de variveis com J!Dump
Uma vez instalado e congurado corretamente o J!Dump, inspecionar
variveis se torna uma tarefa to simples quanto usar as funes print_r() e
var_dump(), bastando, para tanto, fazer a chamada da funo dump() em qualquer
lugar do cdigo. Em tempo de execuo, uma janela pop-up aparecer, mos-
trando o contedo da varivel ou variveis inspecionadas. Para ilustrar essa
funcionalidade vamos fazer uma alterao no cdigo de nosso componente
conforme mostrado a seguir.
Joomla! Avanado 28
Alterao do script alo.php para inspecionar variveis.
<?php
defined('_JEXEC') or die('Acesso restrito ao Joomla!');
$task = JRequest::getVar('task',' ');
$nome = JRequest::getVar('nome',' ');
dump($task,'Valor de task:');
dump($nome,'Valor de Nome:');
switch ($task) {
case 'show':
echo 'Al ' . $nome . '. Seja bem vindo ao Joomla!';
break;
default:
echo 'Al visitante desconhecido. Seja bem vindo ao Joomla!';
break;
}
?>
Insi ra a URL h t t p : / / l o c a l h o s t / j o o m l a - t e s t e / i n d e x . p h p ? o p t i o n = c o m _
alo&task=XYZ&nome=Fulano.
Uma janela pop-up ser aberta conforme ilustra a gura 1.9.
Figura 1.9 Janela pop-up do J!Dump.
Alm da funo dump(), voc poder usar dumpMessage(), dumpSysinfo(), dumpTrace()
e dumpTemplate(). A tabela 1.1 detalha essas funes.
29 Captulo 1 Conceitos de extenses Joomla!
Tabela 1.1 Funes do J!Dump
Funo Descrio
dump()
Conforme visto anteriormente, apresenta o contedo de uma varivel (simples,
array ou objeto).
dumpMessage()
Apresenta uma mensagem em uma janela pop-up (por exemplo,
dumpMessage('inclua sua mensagem aqui').
dumpSysinfo() Mostra informaes importantes sobre o sistema.
dumpTrace() Apresenta a pilha de execuo efetuadas at o momento.
dumpTemplate()
Deve ser usada dentro de um template (arquivo index.php). Apresenta contedo de
parmetros.
Separao da lgica do componente de sua apresentao
Em desenvolvimento de aplicaes PHP em geral, comum encontrar tre-
cho de cdigo em PHP misturado com cdigo HTML, ou seja, a lgica e
a apresentao esto em um mesmo arquivo. O fato que essa abordagem
de desenvolvimento deixa a aplicao por demais complexa no que tange
visibilidade ou ao entendimento do cdigo. Para fazer uma aplicao
mais legvel buscamos separar o cdigo responsvel pela lgica do cdigo
responsvel pela apresentao. Para tanto, usamos dois arquivos diferentes
conforme podemos ver a seguir.
Efetue as modicaes em alo.php destacadas no cdigo a seguir.
<?php
defined('_JEXEC') or die('Acesso restrito ao Joomla!');
jimport('joomla.application.helper');
require_once(JApplicationHelper::getPath('front_html', 'com_alo'));
$task = JRequest::getVar('task',' ');
$nome = JRequest::getVar('nome',' ');
switch ($task) {
case 'show':
HTML_alo::mostraNome($nome);
break;
default:
HTML_alo::mostraPadrao();
break;
}
?>
Joomla! Avanado 30
Crie um novo script alo.html.php e grave na mesma pasta do script alo.php.
<?php
defined('_JEXEC') or die('Acesso restrito ao Joomla!');
class HTML_alo {
function mostraNome($nome) {
echo 'Al ' . $nome . '. Seja bem vindo ao Joomla!';
}
function mostraPadrao() {
echo 'Al visitante desconhecido. Seja bem vindo ao Joomla!';
}
}
?>
Pela anlise do cdigo-fonte anterior, o leitor pode observar que no
h alterao no comportamento do componente. Isto , ele apresenta
exatamente a mesma coisa que a verso anterior. O leitor pode achar que
essa estratgia deixou a codicao mais complexa e extensa. Contudo,
na proporo que a aplicao evolui, essa abordagem se mostra bem mais
legvel que a anterior.
Uma observao importante a ser feita no cdigo a incluso da cha-
mada require_once(JApplicationHelper::getPath('front_html','com_alo')). Ela usada
para determinar o caminho do arquivo alo.html.php. JapplicationHelper uma
classe que fornece um conjunto de funes que ajudam o desenvolvedor a
obter informaes sobre o ambiente, tais como cliente, caminhos de pas-
tas, parse XML etc. Em nosso caso, a chamada JapplicationHelper::getPath('fr
ont_html','com_alo') retornar uma string com o contedo lampp\htdocs\joomladev\
components\com_alo\alo.html.php. Com isso, require_once incluir o arquivo alo.html.php.
A alterao mais signicante do script alo.php foi a substituio do comando
echo pelas chamadas HTML_alo::mostraNome($nome) e HTML_alo::mostraPadrao(). Toda a
API oferecida pelo Joomla! ca localizada na pasta libraries/. O comando
jimport carrega o script helper.php existente na pasta libraries/joomla/application.
Embora em primeira anlise essa abordagem seja mais complexa que
a anterior, ca clara a separao entre lgica e apresentao. Veremos no
decorrer deste livro que essa abordagem deixa, na realidade, a soluo mais
simples de ser entendida na proporo em que a soluo ca mais complexa.
A gura 1.10 ilustra a disposio da estrutura de pastas e arquivos de
nosso componente.
31 Captulo 1 Conceitos de extenses Joomla!
Figura 1.10 Estrutura do frontend (verso nal do captulo 1).
Resumo do captulo
Este captulo conceituou extenses e iniciou a construo de um pequeno
componente. Mostrou como o Joomla! organiza suas pastas separando-as em
administrao de extenses (backend) e site (frontend). Introduziu tcnicas
de segurana para evitar injeo de cdigo via URL. Abordou a importncia
do desenvolvimento do componente separando-o em lgica e apresentao.
Por m, apresentou o J!Dump como ferramenta de inspeo de variveis.
O que foi feito neste captulo?
Criamos uma pequena parte de um componente Joomla! (um frontend).
Instalamos o componente com procedimento manual. Isto , seguindo
as regras de formao de nomes de componentes, criamos manualmente a
pasta com_alo no diretrio components/ e um arquivo alo.php.
Vimos que possvel interagir com o componente usando parmetros
na URL.
Como o componente ainda no foi registrado formalmente no Joomla!,
o acesso a ele ocorre usando a URL da seguinte forma:
index.php?option=nome_componente&param1=valor1&param2=valor2
Para no deixar o componente vulnervel a ataques de hackers adicio-
namos o cdigo: defned('_JEXEC') or die('Acesso restrito ao Joomla!') no incio de
cada script.
Inspecionamos variveis usando a ferramenta J!Dump.
Separamos o componente em dois scripts, um para cuidar da lgica e
outro responsvel pela apresentao.

Você também pode gostar