Escolar Documentos
Profissional Documentos
Cultura Documentos
Para Programadores
( Componentes)
V 1. 0
ndice
ndice .......................................................................................................................................iii
ndice de Figuras ..................................................................................................................... v
ndice de Tabelas.................................................................................................................... vii
1
1.2
1.3
Definindo a lgica............................................................................................................................ 20
1.4
iii
ndice de Figuras
Figura 9 Diagrama de do processamento de um pedido no Joomla. _________________________________ 11
Figura 10 Estrutura de ficheiros tpica de um componente ________________________________________ 18
ndice de Tabelas
Tabela 6 Principais ficheiros da raiz do site Joomla ______________________________________________ 9
Tabela 7 Variveis globais mais importantes usadas num programa Joomla __________________________ 10
Tabela 8 Nomenclatura usada nos principais ficheiros de um componente ____________________________ 17
vii
Descrio
Administrator
Components
Includes
Laguages
hugosoares2@gmail.com
Manbots
Modules
Templates
Index.php
Index2.php
Configuration.php
Globals.php
Agora uma nota sobre algumas variveis que nos iro acompanhar ao longo deste relatrio
bem como em qualquer programa desenvolvido na plataforma Joomla.
Descrio
$_VALID_MOS
URL ou POST
NO
excepto index.php
$option
SIM
$act
SIM
$task
$Itemid
SIM
SIM
NO
dados.
hugosoares2@gmail.com
10
$mainframe
NO
Na tabela em cima o modificador de url ou post significa que esta varivel iniciada
algures no cdigo a partir das variveis get ou post com o mesmo nome, recebidas no servidor
aps os pedidos pelo utilizador. Estas variveis so usadas para que o servidor execute as
tarefas que foram pedidas pelo utilizador.
11
No diagrama em cima cada passo da cor do ficheiro que est na realidade a executar o
cdigo, os ficheiros de cor branca indicam que executam apenas cdigo de apoio a algumas
tarefas. Para explicar cada passo iremos usar a letra D para representar o diagrama seguido do
ponto decimal e o nmero do passo (exemplo [D.3]).
Alguns passos foram omitidos por uma razo de simplicidade, pois correspondem apenas
garantia de compatibilidade com antigas verses do PHP e do Joomla.
Sempre que um utilizador visita o site, escrevendo o endereo ou carregando num link, o
Joomla recebe um pedido e executa uma srie de tarefas para determinar o tipo de utilizador
que fez o pedido, a seco pretendida e o contedo em particular a ser exibido.
Como seria de esperar o primeiro ficheiro a ser executado o index.php [D.1] encontrado no
directrio de raiz do site. Se examinarmos este ficheiro podemos ver que no tem nenhum
cdigo html prprio. Isto porque este ficheiro apenas executa uma quantidade de tarefas e
delega funes mas no gera nenhum contedo. Note que no diagrama a sua execuo s
termina quando o contedo apresentado ao utilizador. O contedo exibido recolhido e
hugosoares2@gmail.com
12
O prximo passo carregar o joomla.php [D.4]. Este um dos ficheiros com maior carga de
trabalhos da API do Joomla e contm muitas classes e funes que tornam o trabalho do
programador muito mais fcil. Algumas destas classes e funes sero descritas mais a frente
mas para j interessa saber que este ficheiro muito importante e aconselhvel perder algum
tempo a conhece-lo melhor.
Outro ficheiro muito importante para o programador database.php. Este ficheiro carregado
pelo Joomla [D.5] e contm todas as classes e funes necessrias para interagir com a base
de dados tornando estas capacidades acessveis a todos os ficheiros subsequentes. Entraremos
em pormenor mais a frente mas para j importante saber que este ficheiro oferece um vasto
leque de funes de query com diferentes tipos de retorno e funes de debugging.
hugosoares2@gmail.com
13
O prximo ficheiro de ncleo a ser carregado o frontend.php [D.6], que trabalha em srie
com Joomla.php para levar a cabo a maior parte das tarefas do Joomla como iniciar e carregar
mdulos ou carregar o contedo principal de uma pgina. Os templates interagem
directamente com este ficheiro pois ele est directamente ligado apresentao do contedo.
Depois de todos os ficheiros do ncleo do Joomla serem carregados o index.php tenta
identificar o estado de option e ItemId [D.7] que so passadas pela url query string ou pelo
post dependendo do tipo de pedido, para identificar qual o contedo pretendido pelo
utilizador. Se este passo falhar o Joomla simplesmente passa para o prximo passo.
De seguida criado um novo objecto de base de dados [D.8], criando uma instancia da classe
database que naturalmente se encontra em database.php. Como o HTTP no mantm uma
ligao permanente ao servidor sempre que feito um novo pedido necessrio criar um
novo objecto de conexo base de dados.
Em [D.9] o Joomla volta tratar da questo do option e Itemid. Se em [D.7] option no foi
definido mas foi definido um Itemid ento o Joomla tenta descobrir qual o componente a
carregar procurando na base de dados pelo item de menu especificado em itemid que, por
sua vez, contm toda a informao do contedo desse link. Se o anterior falhar ento o Joomla
baseia-se na option e Itemid do primeiro elemento do menu principal que se assume ser a
pgina inicial do site. Note que tudo isto s acontece se no for especificado um componente
atravs do option caso contrario o componente ser carregado e tratado no prximo passo.
hugosoares2@gmail.com
14
Neste momento, o Joomla ir preparar-se para executar o cdigo do componente que foi
determinado nos passos 7 ou 9. Apesar de tudo o contedo resultante desta execuo ainda
no ser apresentado, em vez disso guardado num buffer temporrio para que mais tarde
possa ser misturado com o HTML do template. No ficheiro index.php criado um array
chamando $_MOS_OPTION [D.11] e de seguida usada a capacidade de buffering do PHP
para capturar o contedo de sada do componente. Isto feito da seguinte forma:
- Chamar o comando PHP ob_start()
- Executar o cdigo do componente
- Retirar o contedo do buffer usando ob_get_contents()
- Colocar o contedo em $_MOS_OPTION para mais tarde ser usado
- Limpar o buffer com ob_end_clean()
Finalmente chega o momento de carregar o template [D.13]. Este dever ter chamadas a
procedimentos do frontend.php mosShowHead, mosLoadModules e mosMainBody. Para
carregar os mdulos para uma dada posio o ficheiro frontend.php primeiro carrega
frontend.html.php [D.14] e s depois inicia os mdulos escrevendo o HTML. O
frontend.html.php primeiro verifica se um mdulo em particular um mdulo instalado ou
um mdulo stored, sendo que a diferena que os mdulos instalados so ficheiros
separados no directrio dos mdulos e os mdulos stored so criados na rea de
administrao dos mdulos e guardados na base de dados. Depois de carregado o
frontend.html.php, a funo mosShowHead() [D.15] chama a funo do objecto
mosMainframe, getHead() que retorna a informao do header previamente tratada no
passo 10.
O mosLoadModules() poder ser chamado quantas vezes for necessrio dependendo das
regies definidas no template. O Joomla permite no mximo 26 posies com nomes como
Top, Left, Right, Bottom, user1, user2 Estas posies organizam os mdulos em grupos.
Quando no mosLoadModules() passado um parmetro(primeiro) indicando a posio, o
Joomla carrega todos os mdulos do grupo dessa posio.
Aps executar o cdigo do modulo o frontend.php envolve-o em cdigo HTML adicional
se for especificado um parmetro (segundo) adicional de estilo em mosLoadModules(). Por
exemplo mosLoadModules('left', -1) indica que 'left' a grupo de posio e -1 o estilo do
hugosoares2@gmail.com
15
mdulo. Neste caso -1 indica que no necessrio adicionar mais nenhum HTML e que o
ttulo no deve ser mostrado. O parmetro de estilo 0 o estilo por defeito e indica que o
mdulo deve ser envolvido numa tabela da classe moduletable.
A parte final do cdigo a ser executada o mosMainBody() [D.17] que uma funo muito
simples pois a sua nica tarefa ir buscar o contedo de sada do componente ao array
$_MOS_OPTION que foi por sua vez guardado em $GLOBALS no passo 12.
Neste momento todo o HTML de sada dos componentes, mdulos e Joomla junto para
mostrar a pgina gerada ao utilizador [D.18].
partes
encontram-se
separadas,
parte
de
administrao
encontra-se
em
16
Administrao
front-end
Lgica
admin.(*).php
(*).php
Apresentao
admin.(*).html.php
(*).html.php
Classes
admin.(*).class.php
(*).class.php
hugosoares2@gmail.com
17
Para instalar o componente o Joomla comea por procurar nos elementos do componente um
ficheiro xml com o mesmo nome do componente (na figura em cima podemos ver o ficheiro
gilt.xml). Este ficheiro contm a descrio de todos os ficheiros do componente, que usa para
copiar e criar os directrios na rea de font-end e de back-end, os comandos sql necessrios
para interagir com a base dados (criando assim a estrutura de dados usada pelo componente) e
outra informao acerca do componente.
hugosoares2@gmail.com
18
</install>
<uninstall><queries>
<query>DROP TABLE Pessoa_Events;</query></queries>
</uninstall>
<installfile>install.gilt.php</installfile>
<uninstallfile>uninstall.gilt.php</uninstallfile>
<administration>
<menu>GILT</menu>
<submenu><menu act="peo">People</menu></submenu>
<files><filename>admin.gilt.php</filename></files>
</administration>
</mosinstall>
Como podemos ver comea-mos por descrever alguma informao sobre o componente como
o autor a data, etc. De seguida temos uma lista de ficheiros que devem ser copiados para a
rea de front-end (files e images). Nas seces install e uninstall temos a possibilidade de
escrever os comandos sql necessrios para a instalao ou remoo do componente, que sero
hugosoares2@gmail.com
19
hugosoares2@gmail.com
20
Desta forma podemos direccionar a execuo do cdigo no sentido pretendido pelo pedido do
utilizador, fazendo as chamadas das respectivas funes que tratam da tarefa requerida.
Todas as funes que tenham como resultado final a apresentao de contedo devem fazer
chamadas a mtodos do ficheiro de apresentao. No entanto previamente chamada destes
mtodos toda a lgica deve ser tratada, incluindo leituras base de dados o que implica enviar
apenas os dados a serem mostrados. Isto feito usando a classe de acesso a dados database
que se encontra no ficheiro database.php e tem como varivel global $database. Nesta
camada temos a possibilidade de obter dados da base dados sob a forma de arrays de objectos
representativos das tabelas, que usaremos para enviar os dados para a camada de apresentao
do componente.
As funes que tenham como resultado apenas a interaco com a base de dados (gravar,
actualizar, apagar) apenas fazem chamadas camada de acesso a dados do Joomla e
geralmente no interagem com mais nenhum ficheiro. Estas Funes podem fazer uso das
classes do ficheiro de classes para facilitar a interaco com a base de dados. Geralmente so
chamadas em resposta a um envio de um formulrio usando o mtodo post.
hugosoares2@gmail.com
21
O atributo action da tag form dever ser index.php para o front-end e index2.php
para o back-end.
Neste caso quando o formulrio fosse submetido o Joomla iria carregar o componente
gilt e chamar o mtodo que trata de gravar os eventos.
Ter bastante cuidado com o uso de javascript para que no existam conflitos com o scripts
que o Joomla usa para o seu funcionamento.
Usar os mtodos do Joomla para criar as barras de ferramentas que se usam para as
tarefas de autoria, pois estas incluem automaticamente alguns scripts necessrios para
interagir com outros elementos do formulrio.
Quanto ao aspecto do contedo deveremos sempre que possvel usar os atributos class dos
elementos HTML para definirmos o seu estilo. Existem standards para os nomes de classes
css que os templates devem usar, logo se usarmos esses nomes para os atributos class,
temos a garantia de que o aspecto de toda a pgina ser homogneo. Para conhecermos estes
nomes temos de investigar o css do template que est ser usado.
hugosoares2@gmail.com
22
Este trabalho est licenciado sob uma Licena Creative Commons Atribuio-Uso NoComercial-Compartilhamento pela mesma Licena 2.5. Para ver uma cpia desta licena,
visite http://creativecommons.org/licenses/by-nc-sa/2.5/ ou envie uma carta para Creative
Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA
hugosoares2@gmail.com
23