Livro Joomla
Livro Joomla
Livro Joomla
Júlio Coutinho
4ª Edição
AMCGuedes
2017
Página 2
Direitos Reservados
Júlio Coutinho
Revisão
Juliano Augusto
ISBN: 978-85-64374-65-2
Página 3
Agradecimentos
Agradeço em primeiro lugar à Deus, pela oportunidade da vida e a vontade de
compartilhar o pouco que sei, com toda a comunidade Joomla!
Agradeço a minha esposa Rosana e meu filho Bruno, pela paciência e compreensão
em virtude das horas e horas, debruçado sobre o computador.
Agradeço ao Egídio Carlos por criar esta bela capa para o livro.
Agradeço a toda comunidade Joomla! que acredita no meu trabalho e prestigia meus
tutoriais, cursos e artigos, desde 2006.
Página 4
Dedicatória
Dedico este livro às minha querida mãe, Maria da Penha e irmã Renata Coutinho. “in
memoriam”.
Página 5
Sumário
Introdução...........................................................................................................8/1 1
Página 6
Capítulo 21 – Override de Templates ..................................................................408/ 428
Referências
Página 7
Introdução
A fronteira entre o profissional e o amador está reduzida e cada vez mais, novos web
sites são publicados na rede mundial de computadores, Internet. Rede mundial de
computadores ou pessoas? O advento das redes sociais mudou drasticamente este
conceito tão defendido pelos especialistas, quando nos deu o poder de sermos ouvidos.
Somos formigas com megafone!
Projetos de qualidade, com custo e prazo reduzidos, é isto que o cliente deseja. Ele não
tem tempo, aliás, ninguém tem tempo para nada, apesar do grande livro pregar que
“existe tempo para tudo na face da terra”.
Sou do tempo em que fazer o “site” na unha era sinônimo de conhecimento, hoje
reflete a ignorância e falta de perícia com ferramentas modernas que nos ajudam no
desenvolvimento web e o Joomla! surge enquanto melhor CMS open source da
atualidade. Mas, e a essência do webdesign, aonde fica? Design de página, site,
conteúdo e navegação web, usabilidade, acessibilidade, persuasão e segurança, são
desconhecidos por “pseudo-profissionais” que aventuram-se na arte de criar, publicar e
manter na Internet, projetos web que refletem muitas vezes, o sonho de vida do
cliente. Tenho saudades do tempo em que todo mundo era “técnico em informática”,
hoje, todos são webdesigners.
Muitas pessoas pensam que o Joomla! é a solução para seus problemas financeiros e
como um passe de mágica ele fará lindos websites dinâmicos, modernos e funcionais.
Tenho uma novidade para você: “Joomla! não faz nada.” Ele gerencia o que você faz.
Aliás, isto está intrínseco na própria nomenclatura do mesmo. CMS (Content
Management System), no bom português: Sistema Gerenciador de Conteúdos.
Neste contexto temos o CMS Joomla! (pronuncia-se Jumla), que utiliza ambiente
baseado no acrônimo “LAMP” (Linux Apache Mysql Php). Surgiu a partir de um fork
entre os desenvolvedores do projeto Mambo, com a empresa detentora da patente.
Atualmente, o Joomla é um dos CMS open source mais utilizados no mundo. Este fato
permitindo que qualquer pessoa sem conhecimento técnico, possa gerenciar web sites
O lado ruim? Vários web sites em desacordo com as webstandards e com potencial
Então o Joomla é inseguro? Lógico que não. Joomla em sua última versão STABLE,
seja 2.5.x ou 3.x, é extremamente seguro. A maioria dos ataques são resultantes da
Página 9
desatualizadas e permissões equivocadas para os diretórios e arquivos. Poderiam ser
facilmente evitados com medidas básicas relativas ao uso do CMS, dentre elas:
Este livro não tem o intuito de ensinar programação nem tão pouco está cheio de
códigos, na verdade, pretende ser um guia, quase um manual de utilização do Joomla!
3.x. Mas não se iluda, está recheado de dicas e atalhos que irão ajudá-lo(a) na
caminhada rumo ao sucesso! Marque-o e encha-o de orelhas. Torne-o seu livro de
cabeceira e lembre-se que os insumos para realização do projeto proposto, estão
disponíveis em http://www.livrodejoomla.com.br/insumos/joomla35
Vale lembrar que as imagens das telas demonstradas neste livro podem ser diferentes
das visualizadas por você quando da utilização do CMS. Entretanto, em nada irá
atrapalhar sua experiência com o livro e com o CMS Joomla!
Joomla! – http://youtube.com/cout45
Página 10
Conheça e-Cursos Brasil, os melhores cursos gratuitos sobre webdesign e Joomla! –
http://e-cursosbrasil.com.br
Página 11
Capítulo 1 – Noções Básicas
O objetivo deste capítulo é apresentar as atividades a serem desenvolvidas antes de
pensarmos em prancheta e ou planejamento de desenvolvimento, podendo ser desem-
penhadas pelo próprio cliente ou pelo desenvolvedor contratado.
Registro de domínio
Registrar um domínio e editar o DNS é bem mais simples do que parece e todas as
pessoas que possuem um negócio ou desempenham um serviço diretamente ligado a
seu nome, devem fazê-lo antes que seja tarde.
O nome do domínio pode ser registrado por qualquer pessoa ou empresa e a menos
que seu nome esteja relacionado a uma marca registrada no INPI, devidamente reco-
nhecida, você terá problemas sérios se quiser de volta.
Página 12
mesmo e propunha que eu negociasse a venda do domínio. Eu receberia 10%. Quanto
ele queria pelo domínio ? R$120.000,00.
Ok, vou satisfazer sua curiosidade a respeito de ter ou não negociado. Não, na verdade
nem respondi o e-mail dele e continuei o desenvolvimento do projeto.
O http é o identificador de protocolos, poderia ser https, por exemplo. Não é “case
sensitive”, você pode digitar HTTP, http ou hTtp vai funcionar;
Página 13
Análise feita chegamos a conclusão que o domínio juliocoutinho.com.br é um domínio
comercial do Brasil.
Página 14
Mais informações
Domínio: dancei.com.br
Servidor DNS: ns1.kinghost.com.br
Servidor DNS: ns2.kinghost.com.br
Expiração: 2011-06-04
Status: Publicado
As informações completas podem ser acessadas através do hiperlink Whois.
% Copyright (c) Nic.br
% A utilização dos dados abaixo é permitida somente conforme
% descrito no Termo de Uso (http://registro.br/termo), sendo
% proibida a sua distribuição, comercialização ou reprodução,
% em particular para fins publicitários ou propósitos
% similares.
% 2011-02-25 09:39:06 (BRT -03:00)
domínio: dancei.com.br
entidade: julio cesar de paula coutinho
documento: 825.144.886-72
país: BR
ID entidade: JCC827
ID admin: JCC827
ID técnico: JCC827
ID cobrança: JCC827
servidor DNS: ns1.kinghost.com.br
status DNS: 24/02/2011 AA
último AA: 24/02/2011
servidor DNS: ns2.kinghost.com.br
status DNS: 24/02/2011 AA
último AA: 24/02/2011
criado: 04/06/2008 #4533865
expiração: 04/06/2011
alterado: 30/11/2010
status: publicado
ID: JCC827
Página 15
nome: julio cesar de paula coutinho
e-mail: webmaster@joomlabrasilia.org
criado: 09/11/2005
alterado: 04/08/2009
Estando o domínio liberado basta acessar sua área para dar continuidade ao
registro.
A primeira parte do cadastro é relacionada aos dados do domínio e seus dados pesso-
ais. Perceba que o custo anual de manutenção do domínio é R$30,00.
A próxima parte está relacionada os ID's responsáveis pelo domínio. O mais importan-
te é o ID Administrativo tendo em vista que ele tem precedência sobre o técnico e de
cobrança. Tenha cuidado com profissionais e empresas que se oferecem para registrar
o domínio para você. Além de cobrar de R$10,00 a R$20,00 pelo serviço, infelizmen-
te, uma minoria mal intencionada registra o domínio sob o ID Administrativo dela,
delegando a você apenas o ID de cobrança. Quando você tenta mudar a hospedagem
ou mesmo cancelar o contrato com o profissional começam os problemas e a dor de
cabeça é certa.
Página 16
Um dos casos que mais me chamou a atenção a respeito de registro de domínio, foi o
de uma artista aqui de Brasília que ligou-me desesperada pois tinha contratado um cara
para fazer o site e já haviam se passado seis meses sem que o mesmo ficasse pronto.
Ela entrou em contato e o cara não deu atenção, então, ela fez o óbvio e foi atrás de
outro: “eu”. Minha primeira pergunta foi relativa ao domínio, ela afirmou que ele
havia registrado, que ela pagou o boleto e etc... nessa hora pensei: Game Over. Con-
sultei o domínio no CGI e não deu outra, ele havia registrado no nome da empresa
dele, delegando a ela apenas o ID de cobrança, ou seja: “O domínio era dele”. A única
coisa que pude fazer foi orientá-la no sentido de entender-se com ele pois de nada
adiantaria fazer outro website se não teríamos acesso a edição do DNS que é determi-
nante para apontar a máquina em que o mesmo está hospedado.
Por último, temos o DNS que vai “ligar” o domínio a máquina do provedor que você
contratou. Geralmente o master é ns1.dominiodoprovedor, o slave 1
ns2.dominiodoprovedor e sucessivamente.
Esses dados são informados a você via e-mail, pelo provedor contratado.
Provedor de hospedagem
Página 17
Existem várias empresas que hospedam “websites” no Brasil a um valor mensal médio
de R$20,00. Não indico nenhuma e sugiro que faça uma busca por hospedagem de
sites na google e escolha seu plano de hospedagem, preferencialmente Linux. Muitos
usuários têm medo de escolher o plano Linux por nunca terem usado o sistema opera-
cional do pinguim e acabam optando por Windows, o que via de regra acarretará em
problemas futuros.
A montagem do servidor fica por conta da empresa contratada cabendo a você a utili-
zação de forma transparente. Após escolher o plano e concluir o cadastro, você recebe-
rá via e-mail, dados para acesso FTP (File Transfer Protocol) que é o protocolo usado
para transferência de arquivos e diretórios entre sua máquina local e a máquina hospe-
deira e dados para acesso ao painel de controle do provedor.
Quando você contratar o provedor ele irá sugerir o registro de domínio e edição de
DNS, com custo obviamente. Em média cobram R$10,00 para digitar as duas linhas
relacionadas ao DNS. Fechando a conta, o custo final do registro de domínio e edição
do DNS chega a R$50,00. É mole ou quer mais? Fuja disso e faça você mesmo.
Uma vez contratada a empresa que cuidará da hospedagem do website, você receberá
via email, todos os dados necessários a publicação do projeto na Internet. Levando-se
em conta que você contratou um plano de hospedagem GNU/LINUX, os dados serão
parecidos com os abaixo discriminados:
Página 18
Senha de FTP – uma senha padrão será atribuída e você deve trocá-la no
painel de controle do provedor
Página 19
MAILTO – O provedor informará ainda, todos os dados necessários para configurar o
email de seu website, seja pela função “mail” do PHP, seja usando o Sendmail ou
SMTP.
Página 20
Capítulo 2 - Joomla! 3
O projeto Joomla é dividido em Framework (utilizado atualmente pela Amazon e E-
Bay) e CMS, que é o foco deste livro.
Página 21
Joomla! 3.7
1. Campos Customizados
Página 22
semelhante a categorias, tags ou histórico.
Um novo grupo de plugins, "Fields", permite definir novos tipos de campos
personalizados. Por exemplo, um plugin do Twitter pode mostrar Tweets na
página do artigo para uma determinada hashtag.
2. Sites multi-idiomas
A criação e gerenciamento de websites multi-idiomas continua simplificada e
fácil desde que o usuário mantenha o planejamento. Ou seja, a definição de
multi-idiomas deve ser no início do projeto e sem utilizar exemplos de
conteúdo na instalação do Joomla!
3. Melhoria do Workflow
O conteúdo é o fator mais importante do CMS Joomla e o fluxo de trabalho
sofreu significativa melhora.
Na versão 3.7 você cria seu item de menu e seu tipo de conteúdo em uma
única etapa!
Em versões anteriores você deveria passar por várias etapas, gerando
categorias e artigos e, em seguida, criando o menu. Agora, é possível vincular
itens de menu com categorias e artigos.
Joomla! 3.7 torna isto muito mais rápido e significativamente mais intuitivo.
A “tríade” item de menu, artigo e categoria pode ser criada em uma única
etapa, sem saltar entre conteúdo, categoria e gerenciador de menus.
Ao criar um item de menu do tipo "artigo único", clique no botão "criar", para
escrever o seu artigo, salvá-lo e, em seguida, criar uma categoria! Você
também pode criar contato, newsfeed e apelidos de item de menu “on the
fly”.
4. Gerenciamento de Menus
Agora você pode criar, editar e organizar as ligações do menu pelo back-end
da maneira que quiser! Você tem liberdade para ter menus de administração
diferentes no nível de acesso de grupo para seus grupos de usuários.
Se preferir, você ainda pode usar o "menu predefinido" padrão do Joomla!
5. Editor TinyMCE
As melhorias do editor de texto continuaram na versão 3.7 e novos botões
foram adicionados à barra de ferramentas para tornar seu fluxo de trabalho
ainda mais fácil.
Você pode adicionar links de menu, contatos e newsfeeds diretamente aos
seus artigos e módulos.
A personalização foi melhorada para que o usuário possa usar o editor de
acordo com seu gosto. O processo é auto-explicativo como a edição baseada
em arrastar e soltar.
Também podem ser atribuídos conjuntos múltiplos de definições de acordo
Página 23
com os grupos de usuários.
6. Gerenciamento de Extenões
Os desenvolvedores de extensões agora podem definir um sinalizador no
manifesto do pacote de sua extensão!
Ele permite que você bloqueie administradores de desinstalar o componente,
módulos e plugins separadamente.
Ele protege você de excluir por acaso partes importantes de uma extensão, já
que você terá que desinstalar o pacote para desinstalar a extensão.Você cria
um novo ítem e se dá conta que esqueceu da categoria, por ser hierárquico o
Joomla te barra. Por mais que seja correto isso pode ser frustrante e por isso,
agora, você pode criar a categoria para artigos, contatos, newsfeeds e banners
durante a criação do ítem, nos moldes da criação de posição de módulos que
não constam do manifesto xml de um template.
7. Instalação de Extensões
Além das formas já consagradas, o Joomla! 3.7 traz a novidade de instalar
uma extensão através do modo “arrastar e soltar”.
Página 24
Adicionado links de site e do administrador para o módulo de usuário:
adiciona opções para o módulo mod_status para mostrar / ocultar links pa-
ra o front-end e back-end do site;
Contagens de Artigos: O Gerenciador de Categorias exibe agora o número
de artigos publicados, não publicados e na lixeira de todas as categorias.
Isso torna o gerenciamento da estrutura do seu site mais fácil e ajuda a en-
contrar as categorias não usadas e etc... Pode ser utilizado para artigos,
banners, contatos e feeds de notícias;
Categoria Aleatória de blog e lista de ordem: esta atualização permite ao
usuário comum adicionar uma opção de ordenação aleatória para artigos na
categoria blog e na visão de lista de categorias;
Editor de botões adicionado à Barra de Ferramentas: Você já não pre-
cisa rolar a página para encontrar os botões de "readmore" ou "Inserir i-
magem". Os botões que costumavam ser colocados abaixo da área de texto
no editor, agora podem ser encontrados na barra de ferramentas onde eles
pertencem;
Inserir módulos nos artigos: permite aos usuários adicionar um módulo
para um artigo com um botão diretamente na barra de ferramentas do edi-
tor. Os usuários não precisam de aprender qualquer sintaxe ou lembrar os
detalhes do módulo. A interface faz isso por eles;
Arrastar e soltar imagens: Adicionar uma imagem agora é tão fácil quan-
to arrastar e soltar a partir do computador diretamente para o conteúdo. Is-
so funciona em qualquer lugar que você estiver usando o editor TinyMCE
WYSIWYG padrão.
Instalação
Usuários de macintosh que não saibam instalar o ambiente na mão, devem optar por
usar o Mamp ou Xampp.
Página 25
O programa SDK mais utilizado é o Xampp, seja por sua portabilidade (Windows,
GNU/LINUX, Mac), seja por sua ligação com o Apache.
Neste livro iremos partir do principio que você está usando o Sistema Operacional
Windows. Por quê? Porque este é o ambiente mais utilizado para desenvolvimento de
projetos locais e precisamos desmistificar a ideia que Joomla não funciona no Win-
dows, ou ainda, que existe algum tipo de problema em criarmos o site no Windows e
publicarmos remotamente em ambiente GNU/LINUX.
Se você está utilizando outro ambiente, basta adaptar os passos abaixo, à sua realidade.
Basicamente o que irá mudar será o “document root” do Apache, diretório responsável
por receber as páginas web do ambiente. Ex: htdocs (xampp) www (wamp, EasyPHP,
GNU/LINUX, Mac).
Após instalar e inicializar o seu ambiente, crie um diretório dentro do “document ro-
ot”. Este diretório deve ter o nome desejado para o site. Tome muito cuidado ao esco-
lher o nome, evite caixa alta, caracteres especiais e espaços em branco.
meu_site(escolha boa)
Página 26
Figura: criando o diretório para o site do livro
Página 27
Para instalar o Joomla de forma tradicional e recomendada por este escritor, faça o
seguinte:
Se você está usando o nome joomla, para o seu site, verifique se o seu ambiente foi
inicializado digitando http://localhost/joomla em seu navegador. Caso esteja usando
outro nome para o site, substitua joomla pelo nome do seu site. Ex:
http://localhost/meusite
Pré-instalação do Joomla!
Página 28
Figura: passo 1 [Configuração] pré- instalação joomla 3
Joomla! 3.7 requer no mínimo a versão 5.3.10 do PHP, para sua instalação e perfeito
funcionamento.
Página 29
Figura: versão do PHP no servidor não atende aos requisitos
PHP 5.3
PHP 5.5
<IfModule mod_suphp.c>
suPHP_ConfigPath /opt/php55/lib
</IfModule>
Selecione o idioma – nesta aba você seleciona o idioma padrão utilizado na instalação
do Joomla! Dependendo de sua máquina o português estará pré-selecionado.
Nome do Site – Campo obrigatório. O nome do seu site, este nome será utilizado pelo
robô de busca, na indexação. Seja criativo e pense como um integrante de seu público-
alvo.
Site em manutenção – Seleção. Você pode optar por deixar o seu site off-line logo
após a instalação. Desta forma, somente você terá acesso ao mesmo. O valor padrão é
Não.
Página 31
Figura: passo 2 [Banco de dados] – instalação joomla 3
Nesta etapa tentaremos conexão com o SGBD para a criação do banco de dados e
instalação das tabelas do Joomla!
A partir da versão 3.0, Joomla! passa a suportar o SGBD Postgresql, um avanço signi-
ficativo em relação a futura abstração de banco de dados, ou ADODB. Caso o SGBD
Postgresql esteja instalado no servidor, o mesmo será listado no combo “Tipo de Ban-
co de Dados”.
Página 32
Figura: passo 2 [Configuração do Banco de Dados] – instalação joomla 3
A função do PHP para conectar ao SGBD Mysql pode variar de Mysql ou Mysqli.
Página 33
Mysqli é uma função exclusiva do PHP 5 e +, utilizada quando as tabelas innodb estão
instaladas no SGBD Mysql. Como não sabemos se o provedor possui as tabelas innodb
instaladas, até que tentemos efetuar a conexão, o padrão continua sendo “mysql”.
Uma boa dica, é tentar conectar com “mysqli”, que será assumida por padrão assim
que a versão do PHP 5 for detectada. Caso não seja possível, você será informado por
um aviso na tela e basta escolher o “mysql” para conectar-se ao banco de dados.
Nome do Banco de dados – Em ambiente local, você poderá escolher qualquer nome.
Atente-se para o fato de não usar caixa alta, espaços em branco, ou caracteres especi-
ais. Em ambiente remoto, o nome do banco sempre estará atrelado ao seu domínio,
mesmo que seu plano de hospedagem ofereça bancos de dados ilimitados. Uma boa
prática é usar em ambiente local, o mesmo nome que será usado em ambiente remoto.
Ex: Domínio seusite.com.br Nome do banco de dados: seusite
Prefixo das tabelas – Todas as tabelas do CMS Joomla possuem prefixos randômicos,
que as identificam dentro do banco de dados. Desta forma, você poder possuir “n cli-
Página 34
entes” no mesmo banco de dados, uma vez que a cada instalação do Joomla, novos
prefixos são gerados.
Tabelas Antigas – Caso esteja reaproveitando um banco de dados já criado, você pode
optar por fazer backup ou remover as tabelas existentes.
Página 35
O Joomla! pode ser instalado com várias opções de design de conteúdo, visualizadas
no parâmetro Instalar exemplo de conteúdo (dados padrão). Recomenda-se aos
iniciantes, a instalação de exemplo de conteúdo.
Visão Geral – Você pode configurar o email para receber as definições de configura-
ção do site, após sua instalação.
Página 37
Se você chegou até aqui e está tudo OK clique no botão Instalar e aguarde o fim do
processo. Observe a figura seguinte:
max_execution_time = 3000 ; e
memory_limit=128M ;
Página 38
Figura: passo 5 [Finalização] – instalação de idioma no joomla 3
O próximo passo é definir se o seu site será ou não multi-idiomas. Percebeu agora a
importância de não instalar exemplo de conteúdo anteriormente para projeto multi-
idioma? O multi-idioma é nativo no Joomla e configurado neste ponto. Observe a
figura seguinte:
Página 39
a) Ative o recurso multi-idiomas – Defina Sim se for um site multi-idiomas e se não
instalou exemplos de conteúdos anteriormente.
c) Ativar o plugin de código de idioma – Defina Sim para site multi-idiomas e melhore
o SEO do seu projeto.
Após a remoção você pode optar por acessar a parte pública do site (front-end) ou a
área administrativa (back end).
Front-end
Página 40
Perceba na figura seguinte que instalei o Joomla! 3.7 sem exemplos de conteúdo.
A edição de módulos via front-end, está habilitada por padrão no Joomla! 3.7.
Faça login no front-end, preenchendo o módulo Login Form, que está à direita do
website com o usuário e senha cadastrados na instalação.
As opções de edição serão abertas e dentre outras coisas, podemos por exemplo, alte-
rar a posição do módulo.
Terminando a edição, clicamos no botão Save & Close, para verificar o resultado.
Página 42
Na figura seguinte alterei o módulo da posição Right[position-7] para Left[position-8].
Back-end
Temos o painel de controle à esquerda, dividido por área de interesse e no frame cen-
tral, informações úteis.
Página 43
Atualização para o Joomla! 3.7.x
A atualização do Joomla! 3.x para Joomla! 3.7 e releases da versão é efetuada via
back-end do site no ícone rápido [Verificação do Joomla]. O próprio sistema encontra
a atualização e recomenda que a mesma seja executada. Observe a figura seguinte.
Atualização ao Vivo
Enviar e Atualizar
Página 45
Clique no botão “Upload e Instalar” confirme a operação digitando usuário e se-
nha de administrador e depois clicando no botão Instalar; e
Página 46
Migração para o Joomla! 3.7.x
Após a migração podem ser observadas mensagens oriundas do PHP, do tipo "Strict
Standards", de acordo com a figura seguinte:
Para solucionar o problema deve-se abrir o arquivo "printado" pela mensagem e anali-
sar a linha mencionada. No exemplo acima, a linha 93 do arquivo ijoomlaupdate.php
do plugin ijoomlaupdate localizado em /plugins/system/ijoomlaupdate. Observe a
figura seguinte:
Caso esteja utilizando Joomla! 1.5.x, saiba que não é possível atualizar para aversão
3.x, sendo necessária a migração, para a nova versão.
Atualização de Extensões
Página 47
Figura: atualização de extensão disponível
Após clicar no botão, a tela com as informações complementares será aberta e o usuá-
rio deverá selecionar o checkbox e clicar no botão [ Atualizar ] à esquerda e acima,
para concluir o processo. Observe a figura seguinte.
Caso aconteça algum problema que impeça a conclusão da operação, será mostrada
uma mensagem de erro.
Mensagens do Sistema
Estatísticas
Página 48
Figura: mensagem pós-instalação [coleta de estatísticas]
Caso permita a coleta de estatísticas por parte do Joomla! 3.5 os dados estarão dispo-
níveis em https://developer.joomla.org/about/stats.html
Página 49
Figura: mensagem pós-instalação [mensagens pós-instalação]
Comunidade Joomla; e
Página 50
Figura: apresentação do plug-in
Caso opte por esconder a mensagem, o plugin poderá ser habilitado, a qualquer mo-
mento, navegando pelo menu superior Extensions» Plug-in Manager» Plugin Two
Factor Authentication - Google Authenticator e clicando sobre o seu nome ou direto
Partindo do princípio que você optou por habilitar o plugin, vamos à sua configuração
e utilização.
Esse fator extra de segurança é aplicado ao usuário, diferente das regras de ACL que
são aplicadas aos grupos. Navegue pelo menu superior Users» Users Manager» e cli-
que no nome do usuário do grupo Super User. No meu caso, admin.
Perceba na figura seguinte, uma nova aba nos parâmetros do usuário, trata-se da aba
“Two Factor Authentication”.
Página 51
Para habilitar o método de autenticação basta escolher Google Authenticator na caixa
de seleção. Acompanhe o passo-a-passo para a utilização do método em um smartpho-
ne.
Estou usando o iPhone e neste caso devo clicar no hiperlink “Android, IOS e Black-
berry” e escolher a opção “iPhone, Ipod Touch, or iPad”. Agora, basta pesquisar por
Google Authenticator na Apple Store e instalar no meu dispositivo. Observe a figura
seguinte.
Página 52
Passo 2 Configurar o aplicativo no iPhone
Após instalar o aplicativo no iPhone, vamos configurá-lo para utilização com nosso
site.
No back-end do Joomla temos os parâmetros “Conta e Chave”. Eles devem ser inseri-
dos na tela de configuração do aplicativo, manualmente ou através da leitura do QR
Code.
Página 53
Figura: Passo 3 Ativar o Two Google Authenticator
Digite o código de seis dígitos que você vê no seu dispositivo de autenticação e clique
no botão Salvar.
Página 54
Figura: Etapa 3 Digitação do código
Após a ativação do Two Factor Authentication, será obrigatório inserir um dos códigos
gerados no formulário de login.
Página 55
Figura: tela de acesso ao back-end com plug-in ativo
Se o campo “Secret Key” não for preenchido, não será possível acessar o back-end do
site e a mensagem abaixo será apresentada na tela.
Agora tente novamente o login digitando o código de 6 dígitos exibido em seu disposi-
tivo de autenticação e será possível logar no back-end.
Caso não deseje usar esta funcionalidade, acesse a área administrativa e navegue pelo
menu superior Extensions» Plug-in Manager» Plugin Two Factor Authentication -
Página 56
Google Authenticator e clique sobre o seu nome ou direto no v para desabilitálo.
Acostume-se a usar o filtro, o plug-in é do tipo Twofactorauth.
Comunidade Joomla!
Página 57
Diretórios e Arquivos pós-instalação
Diretórios e Arquivos
Quando você instala o Joomla, vários diretórios e arquivos são criados na raiz do site.
Os diretórios são divididos em duas classes: front-end e back-end. A figura seguinte
apresenta-os, exceto o diretório installation, que foi excluído após a instalação.
Diretórios do front-end
Diretório bin
Diretório Cache
O diretório de cache é fácil de ser entendido, é nele que gerenciamos o cache dos arti-
gos.
Analise a seguinte situação: “Se 50 usuários fizerem requisições à sua página para
abrir determinado artigo com intervalo de 1 hora, 1.200 requisições serão geradas ao
banco de dados antes que você altere qualquer informação no mesmo, partindo do
princípio que você atualiza o artigo 1 vez por dia.”
Agora, reflita sobre o impacto da situação acima, na performance do seu site. Trágico,
não?
A partir deste momento, a cada nova requisição, o sistema passa a verificar se o prazo
estipulado para o cache, no caso 15 minutos, expirou. Caso negativo, a página que está
no diretório de cache é apresentada, evitando-se consulta ao banco de dados e melho-
rando sensivelmente a performance do site. As consultas ao banco de dados são mini-
mizadas, executadas somente se o prazo estipulado para o cache tiver expirado.”
Em um site com muitos acessos, onde a frequência de visitas é maior que a de atuali-
zação de dados, o armazenamento das páginas em cache, é fundamental para potencia-
lizar a performance do mesmo.
Para habilitar o cache do Joomla! 3.x você deve acessar o back-end e abrir o arquivo
de Configurações Globais – Aba Servidor.
Página 60
Figura: Acesso aos arquivos de cache no Joomla! 3
Diretório cli
O diretório cli foi adicionado como um local padrão para armazenamento de aplica-
ções do tipo comando-linha-Interface (CLI). Uma das principais características da
plataforma Joomla é sua capacidade de criar facilmente aplicativos CLI que intera-
gem com um site Joomla. Aplicativos CLI são bem adequados para execução de tare-
fas com horários agendados, podemos utilizar o recurso “CRON” do Linux, para a-
gendar tarefas. Por exemplo backup do site.
Diretório Components
Diretório Images
Diretório Includes
Os controles do front-end e back-end do site são separados por aplicações que carre-
gam diversas classes e constantes.
Página 62
Diretório Installation
Diretório Language
Diretório Layouts
Diretório Libraries
Este diretório contém bibliotecas, programas que podem ser reutilizados em diferentes
contextos. Por exemplo, a biblioteca phpmailer é utilizada no processo de envio de
emails. A biblioteca fof, permite a criação de novas extensões para o projeto.
Página 63
Figura: Bibliotecas no Joomla! 3.3
Diretório Logs
Este diretório guarda os arquivos de log gerados pelo Joomla! Os logs são baseados
em certas condições. Por exemplo, algum erro de processamento do sistema. Neste
caso o arquivo error.log será gerado.
Diretório Media
Diretório Modules
Página 64
Neste diretório temos os subdiretórios contendo cada módulo de front-end de uma
instalação do Joomla! 3.
Página 65
A cada nova instalação de módulo, um novo subdiretório é adicionado no diretório
modules.
Diretório Plugins
Página 66
system – Usados em vários pontos do ciclo de execução dos comandos do
sistema. Por exemplo: inicialização de sessão, requisições, renderizações e
etc...
twofactorauth - Permite habilitar a autenticação de dois fatores usando o
Google Authenticator , projeto da Google que inclui implementações de
geradores de senha única para várias plataformas móveis, bem como um
módulo de autenticação conectável (PAM). As senhas são geradas utilizando
padrões abertos desenvolvidos pela Iniciativa para a Open Authentication
(OATH) (que não tem relação com OAuth).
user – Usados nas operações de CRUD relacionadas ao usuário cadastrado ou
logado.
Diretório Templates
No Joomla! o conteúdo fica gravado no banco de dados e a parte gráfica fica a cargo
de uma extensão chamada template. A separação entre conteúdo e gráfico é um dos
conceitos defendidos pela Web 2.0.
Diretório Tmp
Diretórios do back-end
Diretório Cache
Página 67
O diretório administrator/cache serve para armazenar temporariamente, os arquivos de
cache do back-end do site, quando o mesmo está ativo.
Diretório Components
Diretório Help
Diretório Includes
Os controles do front-end e back-end do site são separados por aplicações que carre-
gam diversas classes e constantes. O diretório administrator/includes contém os pro-
gramas específicos do back-end da aplicação.
Diretório Language
Diretório Manifests
Página 68
files – este subdiretório contém um arquivo chamado joomla.xml que lista
todas as pastas de nível superior e arquivos em uma instalação padrão do
CMS. Ele também contém uma lista de URL’S dos servidores de atualização
onde o programa pode procurar versões de atualização desses arquivos. Este
arquivo xml informa ao atualizador quais arquivos a aplicação deve atualizar.
libraries – este subdiretório contém um arquivo xml para cada biblioteca
usada no Joomla. Esses arquivos XML listam todas as pastas e subpastas na
biblioteca e, novamente, uma URL onde o programa pode verificar se há
atualizações para a biblioteca.
packages – este diretório também contém um arquivo chamado joomla.xml.
Isto suporta um método de atualização da versão do Joomla como um pacote,
em vez de um conjunto de arquivos. Este recurso é uma das novidades do
Joomla! 3.1.x e foi estendido à atualizações de extensões. Irá apoiar relações
de dependência entre as extensões. Por exemplo, se você pedir para atualizar
ou instalar a extensão A e houver dependência de extensões B e C, estas serão
automaticamente incluídas na instalação ou na atualização.
Diretório Modules
Diretório Templates
Página 69
prevê que arquivos .html sejam os primeiros a serem renderizados pelo
navegador.
configuration.php – este arquivo é criado após a instalação do Joomla e
contém informações importantes e sensíveis do site. Por exemplo, as diretivas
de acesso ao banco de dados. Os dados do arquivo podem ser editados através
do Painel de Controle – Configurações Globais no back-end do site, exceto a
senha de acesso ao banco de dados que, por questões de segurança não é
visualizada no back-end. Para alterar a senha, deve-se abrir o arquivo para
edição em uma IDE que suporte arquivos .php. Por exemplo, o bloco de
notas.
htaccess.txt – este arquivo deve ser renomeado para .htaccess ( o (.) antes do
arquivo significa que o mesmo é um arquivo oculto do GNU/LINUX). O
.htaccess pode ser definido como um arquivo de orientação para o servidor
web Apache. No Joomla, permite a utilização de URL’s amigáveis e em
conjunto com o módulo mod_rewrite do Apache, exclui o “index.php” das
URL’s, além de aumentar a segurança do sistema como um todo.
joomla.xml – este arquivo é uma cópia do arquivo existente no diretório
administrator/manifests/files/ sendo utilizado durante o processo de instalação
do Joomla, sendo excluído do diretório raiz logo após o término do mesmo.
LICENSE.txt – este arquivo contém a íntegra da licença GNU/GPL.
README.TXT – este arquivo contém informações gerais sobre o Joomla.
robots.txt - web robôs é um termo para programas que automaticamente
passam pela web e coletar informações sobre sites. Os motores de busca,
como o Google e outros, usam robôs para manter seus índices atualizados.
Spammers e crackers usam robôs para reunir endereços de correio eletrônico
e outros fins maliciosos. O arquivo robots.txt incluído na instalação padrão do
Joomla, permite que os robôs acessem as subpastas de seu site.
web.config.txt – este arquivo é similar ao .htaccess e deve ser utilizado apenas
se o site estiver rodando em servidor Windows. Lembre-se que uma boa
prática relacionada à segurança consiste em hospedar o site em servidor
GNU/LINUX e neste caso, exclua o arquivo web.config.txt.
Página 70
Capítulo 3 – Novidades do Joomla! 3.7
Joomla!3.7 traz funcionalidades interessantes e abordarei cada uma delas com exem-
plos de utilização.
Uma das novidades no Joomla! 3.7 importada do CCK K2, a possibilidade de adicio-
nar campos extras em categorias, artigos, usuários e contatos, traz uma infinidade de
opções de utilização. Nas linhas seguintes demonstrarei duas situações hipotéticas da
utilização de campos extras em artigos e no cadastro de usuários.
Situação Hipotética → 1
Nosso projeto possui uma área temática voltada a veículos e algumas informações são
redundantes. Nosso objetivo é minimizar o tempo utilizado para inserir as informações
no website e dessa forma economizar recursos humanos e financeiros aplicados no
processo.
Grupos de Campos
Página 71
Figura: campos extras em artigos
2) Clique em Grupos de Campos → Novo e crie nosso grupo de acordo com a figura
seguinte; e
Campos Extras
Página 72
2) Clique em Campos → Novo e crie o campo motor, de acordo com a figura seguinte.
f) Exibição automática – O padrão é Não. Se você deixar setado alguma opção diferen-
te, o campo será inserido automaticamente nos artigos das categorias relacionadas ao
campo.
Página 74
Figura: criação de campos – Aba Publicação
Crie os campos HP, Preço, Opcionais e foto, de acordo com os passos demonstrados
anteriormente. Ao final do processo, você deve visualizar algo parecido com a figura
seguinte.
Página 75
Figura: campos criados
Artigo
Para criar nosso artigo que usará os campos extras criados basta clicar em Artigo →
Novo e seguir os os passos seguintes:
1) Preencha o título;
3) Escolha a categoria;
5) Clique no ícone Field que aparece no Editor de Texto ao lado do ícone Artigo;
Página 76
Figura: Campos e grupos de campos
6) Escolha os campos que deseja clicando sobre seus nomes ou todos os campos do
grupo clicando sobre o nome do grupo; e
Página 77
Figura: resultado no front-end
Situação Hipotética → 2
Grupos de Campos
Página 78
Você já sabe o que é e para que serve os Grupos de Campos, logo crie um grupo cha-
mado Informações Complementares seguindo os passos seguintes:
Campos Extras
Página 79
Figura: criação do campo CPF
Página 80
Figura: Aba Publicação
5) Na aba Permissões está o “pulo do gato”. Você precisa permitir ao grupo “public”,
que agrega o público-alvo da funcionalidade de cadastro no website, a possibilidade de
alterar o valor do campo. Caso contrário o campo não será editável no front-end tor-
nando-se desnecessário no momento do cadastro.
No menu superior → Usuários →Opções altere o parâmetro permitir cadastro que por
padrão é Não, para Sim, acesse o front-end do website e clique em Criar um conta no
módulo e login.
Observe na figura seguinte que o campo CPF não está editável no formulário de cadas-
tro.
Página 81
Figura: Campo CPF no cadastro de usuário
Para editar a permissão do campo clique na Aba Permissões, selecione o grupo “Pu-
blic” e altere para Permitido, as opções listadas na figura seguinte.
Página 82
Figura: campo obrigatório
Cadastro de Usuário
Página 83
Figura: Formulário de cadastro com CPF
2) Preencha os dados do formulário e clique no botão Cadastrar;
4) Clique sobre o nome do usuário recém-cadastrado e perceba que foi criada uma
nova aba denominada “Informações Complementares” e o CPF do usuário está regis-
trado.
Página 84
Figura: Aba Informações Complementares
Ficou curioso como isso foi possível? Eu também. O segredo é o seguinte: O joomla
grava os dados no formato JSON no campo “params” da tabela #__users. Show né?
Você pode incrementar esse exemplo de acordo com sua demanda criando quantos
grupos e campos mais desejar.
Workflow
Nas próximas linhas irei explorar as novidades do workflow do Joomla! 3.7 criando
item de menu, artigo e categoria “on the fly”. Ou seja, em um único processo.
No menu superior navegue por Menus →Main Menu →Adiconar Item de Menu, de
acordo com a figura seguinte.
Página 85
Figura: Criando novo item de menu
Página 86
Na tela de Criação de artigo o primeiro passo será criar a categoria, de forma idêntica,
no mesmo processo. Digite um nome para a categoria e depois clique na tecla “TAB”
para confirmar a criação. Observe a figura seguinte.
Página 87
Gerenciamento de Extensões
Para verificar as formas de instalação de uma extensão navegue menu superior Exten-
sões →Gerenciar →Instalar. Observe a figura seguinte.
O Joomla! 3.7 continua com o consagrado plugin JoomStore que pode ser habilitado
clicando-se no botão “Adicionar a aba”, através do Envio de pacotes zipados e neste
caso está a grande novidade bastando arrastar o pacote e soltar no frame central, a
instalação através de uma pasta ou a partir de uma URL. Abordarei cada tipo de insta-
lação.
Após clicar no botão Adicionar a aba, a imagem seguinte deverá aparecer no back-end
do seu website.
Página 88
Figura: Instalando a partir da web
Basta procurar a extensão, clicar sobre o seu nome e executar o procedimento de insta-
lação. Nos passos seguintes instalarei o componente Akeeba Backup, em destaque na
imagem anterior.
Página 89
b) Confirmo clicando no botão Instalar; e
Preencha o nome da extensão e depois clique sobre o seu nome para visualizar a opção
de download. Observe a figura seguinte.
Página 90
Figura: Baixar uma extensão do JED
No back-end do website Joomla clique na Aba Envio do Pacote. Basta abrir um arras-
tar o pacote para instalar a extensão. Observe a figura seguinte.
Página 91
Instalar de uma pasta
Verifique se o caminho da pasta está correto na Aba Instalar de uma pasta e clique no
botão Verificar e Instalar.
Página 92
Instalar de uma URL
No back-end copie CTRL+V a URL na Aba Instalar de uma URL e clique no botão
Verificar e Instalar.
Joomla! 3.7 apresenta uma novidade interessante em relação a ACL. Trata-se ods
relatórios de ações segmentados por grupos. Observe na figura seguinte os grupos de
uma instalação padrão do CMS Joomla! 3.7.
Perceba que abaixo de cada grupo existe a opção “Relatório de Permissões de Depura-
ção”. Clicando sobre o hiperlink somos redirecionados para o relatório segmentado por
grupo. Observer a figura seguinte.
Página 93
Figura: Relatório do grupo publisher
Para fechar o relatório basta clicar no botão Fechar localizado acima e a esquerda da
visão.
Página 94
Capítulo 4 - Modelos de Layouts no Joomla! 3
O Joomla! possui vários tipos de layouts para design de conteúdo. Abaixo, irei listar
visualmente, os modelos existentes.
Esse tipo de instalação é ideal para desenvolvedores que desejam criar e testar novas
extensões, ou sites de pequeno porte.
A imagem anterior representa o front-end, que é a área pública do site instalado, sem
exemplo de conteúdo.
Página 95
Figura: layout com exemplo de conteúdo em formato blog – instalação joomla 3
A imagem anterior representa o front-end, que é a área pública do site instalado, com
conteúdo no formato blog.
A imagem anterior representa o front-end, que é a área pública do site instalado, com
conteúdo no formato brochura.
A imagem anterior representa o front-end, que é a área pública do site instalado, com
conteúdo no formato padrão.
A imagem anterior representa o front-end, que é a área pública do site instalado, com
conteúdo no formato aprendizado/ensino/educação.
Página 97
Figura: layout com exemplo de conteúdo em formato teste – instalação joomla 3
A imagem acima representa o front-end, que é a área pública do site instalado, com
conteúdo no formato teste.
Página 98
Capítulo 5 - Extensões x Joomla!
Um dos destaques do Joomla em relação a outros CMS’s Open Source é a possibilida-
de de aumentar suas funcionalidades, instalando extensões, ou seja: Novos programas
ou pedaços de código, com funcionalidades específicas.
No capítulo 3 abordei as diversas formas de se instalar uma extensão, além das novi-
dades da versão. Neste capítulo vou além da instalação.
Tipos de Extensões
Template – sim, o template também é uma extensão. Mais adiante, temos um espaço
especial, dedicado ao mesmo.
System – é uma extensão que só funciona com outra pré-instalada. Por exemplo, um
plugin que tem como pré-requisito para seu funcionamento, a instalação do
componente K2.
Página 99
Figura: JED
Ajustes no Servidor
Caso ocorra um erro e você visualize a mensagem da figura seguinte, adote os proce-
dimentos em seu arquivo php.ini local, ou solicite ao provedor que altere o arquivo
php.ini remoto.
Página 100
Em ambiente local, utilizando o Xampp, tome os seguintes procedimentos:
2. o php.ini será aberto no bloco de notas. Aperte Ctrl+F para buscar e digite u-
pload_max_filesize para encontrar a primeira diretiva a ser verificada e alte-
rada. Observe a figura seguinte, o tamanho máximo permitido para upload é
de 2M e no caso do componente a ser instalado, o pacote possui 2.2M.
Basta alterar o valor e buscar a próxima diretiva.
No meu caso alterei para 10M o tamanho permitido para upload.
Página 101
3. para alterar a próxima diretiva, basta buscar por post_max_size e repetir o
processo. No meu caso, de acordo com a figura seguinte, o php.ini está com
8M e vou alterar para 32M.
Página 102
Parâmetros de Configuração
Página 103
Capítulo 6 – Ísis, o template administrativo do Joomla!
A área de administração de um site em Joomla! é conhecida por back-end e a nova
versão do CMS apresenta uma novidade interessante: “O template administrativo Ísis”.
Aliás, os nomes de temas administrativos são inspirados nos Deuses do Egito, desde a
versão 1.5.
Você pode conhecer melhor o template Ísis, seguindo pelo menu superior »Extensions
»Template Manager. Na aba Styles, clique sobre o nome do template para acessar a
edição de parâmetros.
O template Isis permite que você escolha uma imagem para o Back-end, além de ou-
tras opções que mostrarei abaixo.
Página 104
Figura: Aba Options do template Isis
Template Colour – Escolha uma cor geral para o modelo. Deixando em branco, será
utilizado a valor padrão da folha de estilos;
logo – escolha o logotipo para o Back end do site;
Collapse Administrator Menu – se você pretende usar um monitor para acessar o Back
end do site, marque o valor Não. Isto evitará o colapso do menu de administrador
quando houver redução na largura da janela. O valor padrão é sim;
Display Header – opção de visualização do cabeçalho;
Status Module Position – escolha a posição do módulo de “status”, acima ou abaixo do
template. Observe a imagem abaixo, o padrão é Fixed Bottom;
Sem dúvida a melhoria fica evidente e o único pecado do template, a meu ver, foi
mudar os botões de ação da visão de edição, da direita para a esquerda. A experiência
do usuário e padrões de usabilidade, apontam para a permanência dos botões no lado
direito da tela.
Página 105
Menu Superior
O template possui um menu dinâmico localizado na parte superior, que permite acesso
ao CMS como um todo e cada ação será explicada de forma analítica. Dependendo da
sua instalação o back end estará em inglês, português ou outro idioma. Abaixo temos
um resumo das ações e busquei manter em alguns casos, o idioma nativo da instalação,
ou seja: o inglês.
Página 106
Menus – permite acesso a criação e gerenciamento de menus e itens de menu.
Se você é um novato(a) em Joomla!, mas já fez sites em html, o ítem de menu
seria o botão de link do site em html;
Página 107
Painel de Controle
O painel de controle (Control Panel) do template isis, foi modernizado na versão 3.x
com a exclusão dos Ícones Rápidos. O Painel de Controle permite acesso rápido aos
principais parâmetros de configuração do sistema.
Frame Central
Página 108
Capítulo 7 – Configuração global do site
Uma das primeiras tarefas ao criarmos um site em Joomla! é determinar o seu compor-
tamento em relação ao projeto como um todo. Esta é a função dos parâmetros de con-
figurações globais.
Perceba que fica disponível à esquerda, o acesso rápido aos componentes instalados no
site.
Site
Definições do Site
Página 109
Figura: global configuration – definições do site
Página 110
Edição de módulo no front-end – Define como será a edição de módulos no
front-end do site;
Limite Padrão da Lista – A quantidade de itens visualizados por tela, pode va-
riar de 5 à 100.
Configurações de Metadados
Página 111
Figura: global configuration – configurações de metadados
Metadados são informações que passamos aos robôs indexadores de sites, particular-
mente o da google. Não sou especialista no assunto mas tenho bons cases. Então, darei
dicas baseado nas melhores práticas adotadas em meus projetos.
Meta Descrição Geral do Site – Uma descrição curta e direta de seu site, fo-
cada no seu público-alvo. Use no máximo 35 palavras;
Página 112
Palavras-Chave Gerais do Site – Utilize frases curtas relacionadas ao seu ne-
gócio. Não use (,) ou (;) para separá-las. Uma boa prática é utilizar até 06 fra-
ses;
Configurações de SEO
Página 113
Vamos aos parâmetros de configurações de SEO:
URLs amigáveis – Deixe o padrão (Sim), para que sejam geradas URL’s
amigáveis e facilitem a indexação de seu site pelos buscadores.
## Mod_rewrite in use.
RewriteEngine On
Adicionar Sufixo URL – Isto irá adicionar o sufixo .html à URL amigável ge-
rada, aumentando sua compreensão por parte do internauta e melhorando a
indexação pelos buscadores.
Página 114
Apelidos Unicode – Desde a versão 1.6, Joomla! usa URLs Unicode. Desta
forma, os apelidos exibirão os glifos utf8 em vez de caracteres da tabela ascii.
Navegadores comportam-se de forma diferente quando copiam urls. Firefox
irá copiar o formato unicode, enquanto o Ópera irá obter os hieróglifos origi-
nais. A google não tem nenhum problema para pesquisar ou referenciar tais
ligações.
Incluir nome do site no título da página – você pode optar por exibir ou não, o
nome do seu site no título da página.
Configurações de Cookies
Você deve preencher de acordo com a demanda do seu projeto. Basta pausar
o mouse sobre o texto para verificar a explicação de cada parâmetro.
Sistema
Fim melhorar o entendimento, vamos subdividir a aba sistema nos seguintes temas:
Configurações do sistema
Página 115
Figura: global configuration – configurações do sistema
Configurações de Depuração
“Debugar” um site, nada mais é do que visualizar todo o processo executado pelo
CMS em busca de algum erro que possa ser o causador de problemas pontuais de per-
formance, segurança e/ou renderização.
Página 116
Figura: global configuration – configurações de Depuração
Caso opte, por debugar o site, todas as requisições executadas pelo CMS serão de-
monstradas no final da “página web”.
Configurações de Cache
Página 117
As configurações de cache estão divididas em:
Configurações de Sessão
Página 118
Servidor
Configurações do Servidor
Configurações de Local
Configurações de FTP
Página 120
Figura: Configurações de ftp
Senha de FTP – uma senha padrão será atribuída e você deve trocá-la no
painel de controle do provedor
Página 121
Raiz do FTP – via de regra será a barra (/)
Configurações de Proxy
Página 122
Figura: Configurações de banco de dados
Os valores apresentados são aqueles que você preencheu ao instalar o Joomla!, exceto
a senha de acesso ao banco, que por motivo de segurança não pode ficar exposta. Os
parâmetros podem ser alterados? Sim, se você subiu um “clone” de todas as tabelas
para outro banco, altere os parâmetros para acessá-lo e vai funcionar.
Uso uma técnica interessante quando desenvolvo projetos para clientes que não resi-
dem em Brasília e com certeza poderá ser-lhe útil.
Página 123
volvimento. Quando tudo estiver ok, subo as tabelas para o servidor de banco de dados
do cliente e altero os parâmetros de conexão.”
Resumindo, o site do cliente fica no servidor de hospedagem que ele contratou, mas o
banco de dados permanece no meu servidor até que tudo esteja quitado. Batizei esta
técnica, de “site zumbi”.
Configurações de Email
Página 124
ativação de cadastro de usuário, por exemplo, dependem da perfeita configuração
desses parâmetros.
Página 125
» SMTP Port – a porta do serviço
» SMTP Username – aqui uma dica de ouro, observe na imagem o email
cadastrado no campo From Email. Este é o username de SMTP, porém você
deve trocar o @ por = Ex:contato=juliocoutinho.com.br
» SMTP Password – a senha de acesso utilizada para acessar o email
» SMTP Host – o caminho do serviço. Normalmente
smtp.seudominio.extensão. Ex: smtp.seudominio.com.br
Após configurar clique em Enviar um email de teste. Isso é fundamental para verificar
se tudo está ok. Lembre-se que o email aqui configurado, será responsável por toda a
comunicação do seu website.
Página 126
Essas configurações serão aplicadas a todos os campos do editor de texto submetidos
pelos usuários dos grupos selecionados. Estas opções de filtragem permitem maior
controle sobre o envio de tags HTML para o provedor. Você pode ser rigoroso (De-
fault black list) ou liberal (No filtering), de acordo com os requisitos do seu site. As
configurações usadas por padrão, fornecem uma boa proteção contra ataques que usam
tags html. Perceba na imagem acima que o grupo Blog está associado ao tipo de filtro
“Default Black List”, altere para “No Filtering” pois este grupo irá postar artigos com
vídeos. Este tipo de filtragem impede por exemplo, a inserção de vídeos do youtube
dentro de um artigo, a utilização de formulários legados em módulos Html Personali-
zados e etc...
Nesta aba configuramos de forma global, as permissões dos grupos de usuários do site.
Perceba na imagem o grupo Blog, que foi criado para explorarmos a ACL do Joomla!
Apesar do Blog herdar do grupo Manager, a permissão de acesso ao back end do site,
nesta aba, foi-lhe negado o privilégio de acesso.
Página 128
Capítulo 8 - SEO x Joomla!
Existem muitos spiders de busca, porém nosso foco será o spider da google e neste
capítulo, apresentarei as melhores práticas para um bom desempenho de Google
Marketing. Quer ficar fera no assunto? Leia Os 8Ps do Marketing Digital.
Estar presente na Internet é uma coisa; ser encontrado é algo completamente diferente.
Há milhões de sites que não aparecem em quaisquer resultados de pesquisas. Enquanto
outros aparecem no topo da busca orgânica da google e possuem excelente page rank.
Qual é a diferença?
No primeiro caso, os sites foram criados e colocados on-line, só isso. Eles podem ter
conteúdo vasto e interessante, mas ninguém sabe. Adicione uma boa dose de action
script, ou simplesmente, flash e teremos, segundo Conrado Adolpho, um lindo
Outdoor no meio do Saara.
Este capítulo discute os passos necessários para tornar seu website desenvolvido em
Joomla! amigável para os motores de busca, aumentando a probabilidade de ser visto
nos resultados da pesquisa. O Joomla! 3.x dispensa, na minha opinião, extensões de
terceiros para melhorar a indexação.
SEF significa simplesmente, que você pode usar referências de URL que são mais
curtas e mais significativas ao fazer referência a páginas de um website. Em vez de
longas seqüências de código URL, especialmente aqueles gerados por banco de dados
de CMS e o Joomla não foge a regra. As URLs devem ser concisas com o nome da
página real exibida. Joomla! tem a característica de gerenciar facilmente URL’S
amigáveis.
SEF é apenas uma pequena parte de SEO e, embora no Joomla! seja uma função
separada, funciona harmonicamente com as técnicas de SEO para fazer um website
Página 129
otimizado para mecanismos de busca. A URL amigável, aliada ao uso correto de meta-
tags e uma boa política de Google Marketing, aumenta a capacidade do website ser
encontrado pelos motores de busca.
URL’s Amigáveis
Muitos ataques à websites são realizados por softwares que procuram determinado
fragmento na URL. No Joomla, caso encontre, o software consulta o seu banco de
dados interno e busca relacionar o fragmento da URL com as extensões vulneráveis.
http://www.meusite.com.br/index.php?option=com_expose&id=20
O que é SEO?
Página 130
O método pelo qual os motores de busca recolhem informações do website é um
conjunto de algorítimos e parâmetros mantido em segredo e guardado a sete chaves.
No entanto, existem algumas técnicas que podem ser adicionadas a um website
tornando-o amigável aos motores de busca, que puxam as informações do website de
uma maneira organizada. Em outras palavras, eles irão "olhar para as coisas" no
website que atendam a seus critérios de busca.
1. O próprio site, através das Configurações Globais, relacionadas a SEF / SEO que
serão aplicadas ao site como um todo.
3. Ítens de menu, que são responsáveis pelos hiperlinks, podem incluir informações de
SEO.
6. Módulos geralmente não têm opções de SEO, mas alguns podem ter o recurso.
A melhor prática é construir um site que tenha muito conteúdo e que as palavras-chave
estejam de acordo com o que o público-alvo do seu site irá usar como termo de pesqui-
sa na google.
Página 131
A maioria dos itens de conteúdo têm opções de metadados que podem ser
configuradas para fornecer informações sobre conteúdo para os motores de busca.
Artigos, links de itens do menu, alguns módulos (dependendo do que eles fazem), e
alguns componentes têm informações de metadados que podem ser incluídas na página
de conteúdo, que não é visto pelos visitantes do site. Motores de busca sabem
exatamente onde procurar para obter essa informação, e o Joomla! fornece o caminho
para esse tipo de pesquisa. A figura seguinte mostra as informações de metadados
típicas para um artigo. Observe a declaração de forma concisa, a descrição meta e
como as meta palavras-chave são inseridas, dentro do escopo do artigo. Não use
vírgulas nas palavras-chave, digite até 06 (seis) frases curtas e diretas sobre o
conteúdo, tendo em mente o quê o usuário irá digitar no momento da pesquisa. Esta é a
informação que os motores de busca estão procurando quando rastream um site.
Robôs – Opções
2. No Index, Follow - Neste caso, o site não está indexado, mas as páginas de conteú-
do são.
3. Index, No Follow - Permite que o Spider leia a página inicial do site, mas não vá
além da página índice do site. Ele não tentar acessar qualquer outra página de metada-
dos.
Página 132
Um mapa do site é uma página que tem links para todas as outras páginas no site. Pode
ser gerado automaticamente pelo CMS Joomla!, ou criado manualmente pelo
desenvolvedor e disponibilzado com o nome de sitemap, na raiz do site. O mapa do
site ajuda a catalogar o conteúdo do seu site nos motores de busca. Ao criar um mapa
do site, informamos aos motores de busca, quais url’s do site estão disponíveis para
pesquisa.
Existem vários sites que oferecem a criação gratuita de mapas de site, eu indico o
Sitemaps.com (http://www.xml-sitemaps.com/) e oriento você a criar mapas de site
com extensão .xml.
Se você preferir instalar uma extensão de terceiros para este fim, acesse o JED
(http://extensions.joomla.org) e busque por sitemap.
Motores de busca estão obcecados em procurar a tag <h1> em páginas da web. Isto é,
além das meta-informações que, em conjunto, determinam a relevância de suas
páginas. O cabeçalho primário para todos os artigos de conteúdo e assim por diante
podem ser estilizados com css, mas a especificação HTML mais importante para os
navegadores é tag <h1>.
1. A tag <h1> deve ser usada uma única vez para cada item de conteúdo.
2. O texto com a tag <h1> deve ser curto e ocupar apenas uma linha.
3. Use a tag <h1> de forma responsável e evite o uso excessivo da tag. Usar várias tags
<h1> na mesma página não é uma boa prática e os motores de busca poderão rejeitar
seu site, ou no caso da google, aplicar punições ao seu domínio.
4. Se você quiser duplicar a tag <h1>, começando o artigo com a mesma, deve torná-la
diferente do título. Seja criativo e começe com palavras que estejam diretamente
ligadas a forma com que os internautas pesquisam. Há um enorme furor entre os
desenvolvedores de sites em discutir se a tag <h1> tem valor de destaque para SEO.
Todo mundo tem direito a opinar sobre o assunto e eu convido-o a se perguntar: Por
quê o G1 usa tag <h1> no início de seus artigos em destaque.
Página 133
Vamos encarar uma realidade aqui. Só porque você tem um site otimizado e que segue
todas as regras de SEO, nada garante que ele irá aparecer dentre os 50 primeiros
resultados, quando da realização de uma pesquisa na google ou outro buscador. Seu
site teria que ser incrivelmente original, com palavras-chave usadas em qualquer lugar
nunca antes por qualquer outro site, para aparecer no topo. É preciso muito trabalho e
esforço para conseguir um ranking de página elevado, além do tempo de vida do site
ser um fator importantíssimo.
Google Adwords
Usando o Adwords seus anúncios ficam destacados com uma cor diferenciada. Os
resultados obtidos sem a utilização do adwords são conhecidos por resultados de busca
orgânicos e possuem maior credibilidade por parte dos internautas. Sempre que possí-
vel, busque um bom page rank, no resultado orgânico.
Google Analytics
Google Webmasters
Outro serviço essencial para uma boa campanha de webmarketing, é a google Web-
masters, serviço voltado aos desenvolvedores Web, com várias ferramentas relevantes
para que o seu site esteja compatível com a Google.
Página 134
O endereço do serviço é http://www.google.com.br/webmasters/ . Para utilizá-lo, basta
possuir uma conta do Gmail, ou outro serviço da Google para iniciar a utilização.
No jargão SEO, "black hat" são atitudes ilícitas utilizadas, na tentativa de ludibriar o
buscador. Existem várias técnicas que se enquadram no conceito de Black Hat, por
ferirem as diretrizes para webmasters, da google.
Página 135
Capítulo 9 - Lista de Controle de Acesso (ACL)
Access Control List ou Lista de controle de acesso (também conhecida pelo acrônimo
ACL) é definida pela área de ciência da computação como uma lista que define quem
tem permissão de acesso a certos serviços.
Página 136
Criar uma regra de ACL parece confuso no início, especialmente se o website é
pequeno. Porém, é fundamental para grandes portais, com diversos conteudistas.
Com uma boa regra de ACL, criamos grupos e atribuimos usuários. Graças ao JSON,
função do PHP utilizada no princípio da ACL do Joomla 3.x, os usuários podem
pertencer a diversos grupos. O controle dos níveis e permissões de acesso, são
efetuados de forma hierárquica para cada grupo e seus subgrupos.
Em uma instalação sem exemplos de conteúdo, apenas os grupos padrões são criados e
vamos estudá-los rapidamente. Observe a imagem abaixo.
Página 137
Figura: Grupos padrão do Joomla!
Public – é o grupo de acesso público, ou seja, o internauta que visita e navega pelo
website. Não possui qualquer permissão de ação em relação ao conteúdo do mesmo;
Author – usuários pertencentes a este grupo, podem acessar conteúdo restrito, enviar
weblinks e enviar artigos ao website;
Editor – usuários pertencentes a este grupo, podem acessar conteúdo restrito, enviar
weblinks, enviar artigos ao website e editar artigos enviados por ele mesmo e por
autores;
Página 138
Publisher – usuários pertencentes a este grupo, podem acessar conteúdo restrito, enviar
weblinks, enviar, editar e publicar artigos no website, inclusive na página inicial
(destaque). São os super usuários do front-end, não tem acesso ao back-end.
Manager – grupo dos gerentes de conteúdo, pode criar, editar, publicar e apagar
menus, itens de menus, categoria, subcategorias e artigos. Enfim, pode fazer tudo
relacionado ao Gerenciamento de Conteúdo do website. Não tem acesso as extensões e
parâmetros de configurações do website.
SuperUsers – grupo dos super administradores, faz tudo no website, podendo até
mesmo cometer o Joomlacídio.
A regra ou política de ACL pode ser empregada a todo o projeto permitindo inclusive,
que determinado grupo acesse o bak-end do website sem, no entanto ter acesso às
diretivas administrativas.
Joomla! 3.7 implementou melhorias na ACL que podem ser observadas acessando
ítem de menu Grupos do menu Usuários e Níveis de Acesso de Visualização. É possí-
vel gerenciar os usuários ativos e inativos em cada grupo. Basta clicar no balão corres-
pondente ao grupo desejado. Observe a figura seguinte:
Página 139
Figura: ACL Criando um novo grupo
Acesso do Site – Usuários pertencentes ao grupo, podem efetuar login no front-end do
site.
Acesso da Admin – Usuários pertencentes ao grupo, podem efetuar login no back- end
do site.
Acesso Offline – Usuários pertencentes ao grupo, podem efetuar login e acessar o site,
estando o mesmo em manutenção.
Criar – Usuários pertencentes ao grupo, podem criar conteúdo, após efetuar login no
site.
Editar – Usuários pertencentes ao grupo, podem editar conteúdo, após efetuar login no
site.
Editar Estado – Usuários pertencentes ao grupo, podem editar o estado (publicado,
despublicado, destaque e etc...) do conteúdo, após efetuar login no site.
Editar Próprio – Usuários pertencentes ao grupo, podem editar conteúdo próprio, após
efetuar login no site.
Nível 3 - Categoria de nível de permissões, como criar, Apagar, Editar, Estado Edit
(publicar, unplish, e assim por diante), e editar própria.
Nível 4 - Item de nível de permissões são Apagar, Editar, Editar Estado (publicar,
unplish, e assim por diante), e editar própria.
De forma resumida, o nível de acesso serve para segmentarmos a informação dentro
do próprio grupo, ou seja, podemos ter usuários pertencentes a vários grupos dentro de
um grupo pai e com níveis de acesso diferenciados, dentro dos mesmos.
Página 141
Figura: Infográfico níveis de acesso
Nas categorias, o pai é o mais alto nível hierárquico. O filho é a subcategoria que
pertence a categoria pai. Se houver um subcategoria na categoria filho, esta será a
categoria neto e assim sucessivamente. As seguintes regras de relacionamento
aplicam-se a ACL:
Página 142
Configurações Globais - são herdadas por todos os itens pertencentes ao nível
superior.
Pai - Pai é um item de nível superior, um item que está "acima" de outro, ou outro
item contido em ("abaixo") dele.
Filho - Um filho é qualquer ítem que pertença a um ítem pai, tal como uma
subcategoria, que é filho de uma categoria e assim por diante.
Conflito de Permissões – Tudo o que é negado ou não permitido ao ítem pai não pode
ser permitido nas configurações de permissões do ítem filho. As configurações do ítem
filho não podem substituir as do ítem pai.
Página 143
Capítulo 10 – Gerenciamento de Usuários
A ACL foi tema de capítulo anterior neste livro e sugiro sua releitura, caso tenhas
dúvidas no entendimento das ações relacionadas aos usuários no Joomla!.
Opções Globais
Observe a figura seguinte com todos os parâmetros relacionados aos usuários. Perceba
ainda que os parâmetros são segmentados por Abas.
Página 144
Figura: Parâmetros de configuração
Página 145
As opções são as seguintes:
Enviar Senha – por padrão, o valor é “Sim” e a senha inicial, será enviada ao
usuário por email, após o cadastro no site;
Página 146
Parâmetros do Usuário - se configurado para exibir, os usuários poderão sele-
cionar o idioma, editor e site de ajuda deles, através da página de configura-
ções quando fizerem o login no site;
Alterar nome de acesso – permitir ao usuário mudar seu nome de login (user-
name), quando da edição do perfil.
Página 147
Mínimo de Símbolos - quantidade mínima de caracteres especiais na senha. O
numeral zero significa que não existe a obrigatoriedade deste tipo de caracter
na senha; e
Página 148
As opções são as seguintes:
Aba Avançado
Aba Integração
Página 149
As opções são as seguintes:
Aba Permissões
Usuários Cadastrados
O ítem de menu Gerenciamento de Usuário abre a lista com todos os usuários cadas-
trados no site, permitindo ao Super Administrador, editar qualquer informação dos
mesmos. Na imagem seguinte, perceba que temos apenas um usuário que foi cadastra-
do durante a instalação do Joomla!
Página 150
Clique sobre o nome do Usuário para entrar no painel de edição do usuário. As opções
de edição do usuário estão divididas em três abas:
Detalhes da conta;
Configurações básicas.
Detalhes da Conta
Página 151
Graças a tecnologia de ponta usada em sua API o CMS permite que cada usuário faça
parte de “n” grupos sendo esta, uma das características que distancia o Joomla de ou-
tros CMS Open Source.
Configurações Básicas
Página 152
Cadastro de Usuário
O cadastro de usuário pode ser efetuado via back end, ou front-end, através do formu-
lário de cadastro associado ao módulo de Login » Criar uma conta.
Vamos cadastrar 03 (três) usuários para que possamos fazer alguns exercícios em
relação à política de ACL. Os meus usuários serão:
cout45;
user1; e
user2.
Neste cadastro não estamos utilizando o plugin “Perfil do Usuário” para estender as
opções do formulário.
O usuário poderá editar os seus dados a qualquer momento via front-end. Basta estar
logado.
Notas de Usuários
Página 153
Notas de usuários são informações particulares segmentadas por grupos. Devem ser
utilizadas de acordo com os requisitos do projeto. Na figura seguinte criamos uma
nova categoria de notas de usuários.
As notas de usuários podem ser criadas no menu lateral » Notas de Usuários e/ou cli-
cando-se diretamente sobre o ícone “Adiconar nota”, abaixo do nome do usuário.
Grupos de Usuários
Página 154
É importante levar em conta a necessidade de um planejamento meticuloso em relação
a política de ACL do site, para que os grupos criados, se for o caso, permitam o perfei-
to “enjaulamento” dos usuários à eles pertencentes.
Por padrão, os usuários que fazem o cadastro via formulário no front-end do site, per-
tencem ao grupo Registered e poderão tão somente, acessar conteúdo restrito.
O novo grupo irá herdar todas as permissões do grupo pai e você precisa ter muito
cuidado para não escolher o pai errado. Analise a situação hipotética abaixo:
Quero criar um novo grupo, que terá permissão para enviar, editar e publicar artigos. O
grupo com menor hierarquia, que tem permissão para essas ações, é o Publisher. Logo,
o novo grupo tem que ser filho, no mínimo, do Publisher.
Joomla! usa o conceito de herança, matéria estudada por todo webdesigner e que de
forma simples, significa que o novo grupo irá herdar todas as permissões do grupo pai,
certo webdesigner? Então, vamos criar o novo grupo e batizá-lo de Blog. Na lista de
seleção Grupo Pai, escolhi o grupo Manager para ser o pai do grupo Blog.
Página 155
A essa altura você deve estar se perguntando: “Por quê o pai é o Manager? Não seria o
Publisher? Manager é complicado pois tem acesso ao back end.”
Exato, mas acontece que a ACL do Joomla! é hierárquica e suas permissões referem-se
justamente aos grupos. Ao grupo filho pode ser negada, qualquer permissão que o
grupo pai possua. Ou seja, as permissões do grupo são escaláveis até o grupo pai para
+ e até o grupo public para -.
Ficou confuso? Vou exemplificar: “No caso do grupo Blog, sendo filho do grupo Ma-
nager, herdará suas configurações e poderá acessar o back end do site. Entretanto,
iremos negar esse acesso na aba permissões, da Configuração Global do site.”
Observe a figura seguinte com a seleção da opção “Negado” para os devidos acessos.
Após a seleção clicamos no botão Salvar Fechar para concluir o processo.
Agora vamos associar os usuários cadastrados a seus respectivos grupos, para tal, basta
clicar no nome do usuário, aba Grupos de Usuários Atribuídos e marcar o grupo que
você criou. No meu caso, Blog.
Lembro que os usuários podem pertencer a múltiplos grupos, o que leva o CMS Jo-
omla a um patamar superior em relação aos outros CMS Open Source.
Dentro da política de ACL que montei para o site do livro temos até o momento a
seguinte associação:
Níveis de Acesso
Imagine a seguinte situação: “no site tenho grupos, os usuários cadastrados serão vin-
culados aos grupos existentes. Porém, dentro dos grupos, necessito segmentar o nível
de acesso dos usuários, ainda que pertençam ao mesmo grupo. É possível? Sim, desde
que eu use o Nível de Acesso, da ACL do Joomla!.”
Se você seguiu os passos do livro criou o grupo Blog. Agora, crie o grupo Destaques
vinculado ao grupo Blog. Ou seja, o grupo Destaques é filho do grupo Blog.
Na aba Nível de Acesso, crie o nível de acesso colunistas, vinculado ao grupo Desta-
ques.
Página 157
Figura: grupo e nível criados
Finalizando a vinculação dos usuários criados aos respectivos grupos, de acordo com
nossa política de ACL teremos:
E-mail em Massa
Os usuários cadastrados possibilitam a criação de uma “Mailing List” que pode e deve
ser utilizada na política de marketing do site.
Após preencher título e assunto do email e escolher o(s) grupo(s) interessados, basta
clicar no botão Enviar E-mail.
A função de E-Mail em Massa, não deve ser confundida com News Letter, que serve
para criar informativos a partir de uma extensão (componente), instalada no site.
Página 158
Capítulo 11 – Gerenciamento de Conteúdo
Segundo Jakob Nielsen, design de conteúdo é uma das etapas do Webdesign, sendo
desenvolvida em conjunto, pelo Webdesigner e Webwriter, responsável pela inserção,
edição e publicação de conteúdos no site. Uma das frases célebres de Nielsen lembra
que “Na Web, o conteúdo é Rei”.
CMS, nada mais é que um “Sistema Gerenciador de Conteúdos”. Mas o que significa
conteúdo nesse contexto? Artigos, imagens, vídeos, arquivos anexos, formulários,
álbum de fotos e etc...
O texto deve ser curto, 02 (dois) parágrafos no máximo e a opção de Leia Mais. Lem-
bre-se que o internauta não tem tempo e está em busca de informação relevante. Aque-
le texto enorme pode ser interessante somente para você, já pensou nisso?
Diz o sábio: quem lê, escreve e quem escreve, fala. É impressionante o número de
sites com erros de português e sem querer ser um exemplo de escritor, pois muitas
vezes escapa uma vírgula em lugar errado gerando uma má concordância verbal.
Página 159
Aliás, peço perdão por eventuais erros de concordância que possam ser verificados
neste livro.
Os erros aos quais me refiro, são erros “gritantes”, que demonstram a total falta de
conhecimento de nossa língua pátria com a utilização errônea de consoantes, vogais e
tempos de verbos. Muitos dizem que não tem nada haver e que a Internet lançou um
“dialeto” próprio baseado na informalidade. Cuidado, uma coisa é ser informal, outra
coisa é: “nóis vai, nóis foi, nóis fica”.
Fontes - A escolha das fontes a serem utilizadas no site devem seguir uma regra única:
”simplicidade”. Lembre-se do que disse Nielsen: “Na Web a simplicidade sempre
vence a complexidade”.
O CMS Joomla! assim como seus irmãos Drupal, Xoop’s e Plone têm no Design de
Conteúdo, sua razão de ser. O design de conteúdo está presente no próprio nome do
aplicativo “ Sistema Gerenciador de Conteúdos”.
Não, eu não esqueci o Wordpress, apenas busquei fazer referência aos CMS voltados
para websites e portais. Wordpress é voltado para blog, assim como Moodle é voltado
para e-learning.
configurações globais
gerenciamento de categorias;
gerenciamento de artigos;
gerenciamento de menus; e
Página 160
gerenciamento de mídias.
Observe na figura seguinte que o acesso pode ser feito pelo próprio Painel de Controle
(1) ou pelo item de menu Conteúdo (2) sendo este, mais completo. Perceba que são
várias as opções relacionadas ao gerenciamento do conteúdo.
Clique no ítem de menu Artigos para abrir a visão de gerenciamento de artigos e ob-
serve o botão Opções na barra de ferramentas, é nele que configuraremos nosso site,
de forma global, em relação ao conteúdo. As configurações globais de conteúdo estão
divididas em abas, de acordo com a figura seguinte.
Página 161
A opção “padrão” de cada parâmetro segue recomendações de “WebStandards” do
W3C Consortium. Entretanto cabe ao Webdesigner decidir quais padrões utilizar de
acordo com os requisitos do projeto. Os parâmetros são autoexplicativos e basta pausar
o mouse sobre o nome de cada um para entender o comportamento.
Listo abaixo alguns parâmetros que merecem destaques por sua terminologia e/ou
impacto na usabilidade de um projeto web.
Página 162
Aba Integração – Ativar Campos Personalizados: mantenha o padrão
“Sim”, para utilizar uma das grandes novidades do Joomla! 3.7, o recurso de
Campos Personalizados.
Para customizar o editor de acordo com suas necessidade navegue pelo menu superior
» Extensões » Plugins » e clique no Editor – TinyMCE. Na figura seguinte temos as
configurações básicas.
Você pode montar o posicionamento dos ícones de acordo com os requisitos determi-
nados para o projeto.
Os recursos disponíveis aos grupos de usuários estão definidos nas abas Configurar 2
[pré-configuração simples], Configurar 1 [pré-configuração média] e Configurar 0
[pré-configuração avançada]. Navegue entre elas e verifique a diferença entre os recur-
sos. Determine os recursos a serem utilizados pelos grupos de usuários, de acordo com
sua política de ACL.
Página 163
Observe a figura seguinte atentamente pois o que será abordado impactará diretamente
na usabilidade e performance do seu projeto.
Criador de Visual (1) – Ao clicar no hiperlink você será redirecionado para o website
do TinyMCE e poderá alterar completamente o “Skin” de apresentação. Curte o MS
Word? Deixe o editor de texto do seu site igual editando suas preferências. Após con-
cluir as edições basta fazer o download do arquivo para sua máquina e salvar no:
/media/editors/tinymce/skins do Joomla.
Página 164
Figura: editando o skin do tinyMCE
Elementos Proibidos (2) – Se você precisa apresentar vídeos do youtube em seu site
apague “script” e “iframe” da lista de elementos proibidos.
Gerenciamento de Categorias
Página 165
1. Botão Lixeira – move para a lixeira a(s) categoria(s) selecionada(s);
10. Situação da categoria – ícones que demonstram a situação dos itens da cate-
goria em relação a itens arquivados, itens excluídos, itens publicados e itens
despublicados; e
11. Ordem da(s) categoria(s) – permite arrastar e saltar a categoria em sua nova
posição.
Página 166
Gerenciamento de Artigos
Para gerenciar artigos navegue pelo menu superior » Conteúdo » Artigos ou no Painel
de Controle clique em Artigos para abrir a visão de artigos ou em Novo Artigo para
abrir o formulário de criação de artigos.
Por padrão os artigos são criados pelo back-end podendo ser criados pelo front-end, de
acordo com os requisitos do projeto.
Página 167
Figura: Criação de artigo a partir da cópia do texto de outro software
Durante a criação do artigo é possível criar a “categoria on the fly”, na mesma visão
otimizando o processo e melhorando o workflow do Joomla.
Basta que o usuário digite o nome da categoria na lista dropdown “Categoria” da visão
de criaçao de artigo e aperte a tecla “Tab” de sua máquina. Observe na figura seguinte
a criação da categoria “Nova categoria” durante a criação do artigo.
A aba principal apresenta ainda vários parâmetros importantes que destaco. Observe a
figura seguinte:
Página 168
1) Pré-visualização do artigo;
2) Inserção de módulo no artigo, inserção de link direto para um outro artigo, in-
serção de imagens, inserção de quebra de página e opção de Leia Mais;
Pré-visualização do artigo – Basta clicar no ícone de “olho” para visualizar como fica-
rá o artigo após sua publicação. Observe a figura seguinte:
Inserção de módulo no artigo – Essa é uma novidade do Joomla! 3.5. Nas versões
anteriores era necessário utilizar a chamada {loadposition module}. Agora, é one-
click! Basta clicar no ícone, escolher o módulo e pronto. Observe a figura seguinte:
Página 169
Figura: seleção de módulo para artigo editor de texto (Back-end)
Inserção de hiperlink para outro Artigo – Opção muito utilizada. Por exemplo: “O seu
artigo trata do Estatuto de determinada Instituição e no corpo do mesmo você deseja
um hiperlink para o contrato de adesão. Basta clicar no ícone e escolher o artigo que
trata do contrato de adesão”. Observe a figura seguinte:
Página 170
Inserção de imagem no artigo – Para inserir uma imagem no artigo, clique com o mou-
se no ponto em que deseja a imagem, clique no ícone Imagem, selecione uma imagem
do servidor ou envie uma do computador. Observe a figura seguinte:
Preencha o Título página e da tabela de arquivos e depois clique no botão Inserir Que-
bra de Pagina.
Página 171
Inserção de Leia Mais – No início do capítulo deixo bem claro porque usar o Leia
Mais em um artigo. Logo, escolha o ponto de corte do artigo e clique no ícone Leia
Mais. O corte será caracterizado por uma linha pontilhada na cor vermelha.
Hiperlinks no artigo – Nos ícones de hiperlinks podemos inserir e retirar links no arti-
go. Observe a figura seguinte:
Selecione uma parte do artigo e clique no ícone corrente fechada para inserir o link.
Preencha a Url, a parte do artigo selecionada estará preenchida, escolha um título e a
forma de abertura do hiperlink. Pode-se fazer um hiperlink utilizando uma imagem ao
invés de um trecho do artigo. Para retirar o link, basta clicar no ícone de corrente aber-
ta.
Editor em tela cheia – Para usar o editor em tela cheia, basta clicar no ícone corres-
pondente.
Vídeos no artigo – A inserção de vídeos em um artigo pode ser feita de diversas for-
mas, porém, a mais simples é através do ícone de mídia do editor. Observe a figura
seguinte:
Página 172
Basta copiar a Url do vídeo e colar no campo Endereço da imagem.
Observe a figura anterior. A aba incorporar mostra a forma que o vídeo será renderiza-
do, ou seja, por um IFRAME. Entretanto, por padrão, não é permitido utilizar IFRA-
ME no editor de texto. Por isso é muito importante configurá-lo corretamente. Caso
contrário, todo o código será eliminado pela regra do editor de texto e o vídeo não será
visualizado.
Página 173
Figura: opções da aba Imagens e Links
Na aba Opções são listadas as opções globais a serem aplicadas no artigo em fase de
criação. Na aba Opções de Publicação, o usuário configura parâmetros relacionados ao
período de publicação e indexação do site pelos robôs de busca, Meta Descrição (1) e
Palavras-have (2). Observe a figura seguinte.
Página 174
Para finalizar o processo clique no botão Salvar e Fechar.
Resultado no Front-end
Nas figuras seguintes temos o resultado da publicação do artigo que criamos nos pas-
sos anteriores.
Observe:
Página 175
Figura: artigo criado no back-end (corpo)
A criação de artigos pode ser efetuada através do Front-end e para tal é necessário que
o projeto possua um item de menu do tipo Artigo » Enviar Artigo. Por exemplo: Envio
de Artigo.
Na figura seguinte temos a visão de edição dos artigos. Perceba na figura seguinte que
todos os recursos do editor de texto tiny MCE estão a disposição do usuário.
Página 176
Figura: criando um artigo pelo back end
A visão de edição dos artigos do front-end é dividida em abas e vamos abordar cada
ítem das mesmas.
Conteúdo – A aba principal apresenta, além do editor para a digitação do artigo, todo
os parâmetros relacionados ao mesmo. Vou destacar os mais importantes, observe a
figura seguinte, ela é auto-explicativa:
Página 177
Figura: destaques da aba Conteúdo
Uma dica de ouro é usar o novo botão “Fullscreen” do editor de texto tiny
MCE. A experiência de criar o artigo em tela cheia é muito agradável, principalmente
para usuários de front-end.
Página 178
Figura: diretivas de publicação
Página 179
Início da Publicação – data de início da publicação do artigo;
Figura: metadados
Na aba Permissões determinamos qual grupo pode acessar o artigo e na aba Op-
tions podemos sobrescrever os parâmetros globais.
Um bom site para gerar textos é o Gerador de Lero Lero. Que tal deixar de lado o
latim (lorem ipsum dollor), utilizado para formatar textos em layout? Acesse o
gerador de lero lero em http://juliocoutinho.com.br/lerolero.html
Página 180
Após criarmos o artigo, optarmos por colocá-lo como destaque com imagem e
Leia Mais clicamos no botão Salvar e Fechar.
Existem situações nas quais o projeto do site pede que os textos de introdução sejam
visíveis por todos, mas para ver o texto completo, é necessário fazer login e senha. O
conteúdo completo fica bloqueado e só depois de criar ou receber uma conta de acesso
é que se poderá desfrutar do conteúdo completo do site. Qual a solução?
Crie seu artigo separando o texto introdutório do texto completo pela função
Leia Mais;
Página 181
Teste o resultado. Ao visitar a página, o texto do botão Leia Mais muda para
Registre-se para ler mais…; e
Artigos em destaque
No back end, são caracterizados por uma estrela azul, defronte ao título. A opção de
“destaque” pode ser efetivada durante a criação do artigo via front-end / back end, ou a
qualquer momento no back end, clicando sobre a estrela existente defronte ao título de
cada artigo.
Gerenciamento de Menus
Menus e itens de menus são a base da estrutura de navegação de um site Joomla. Para
gerenciar menus devemos navegar pelo menu superior » Menus. Serão listados todos
os menus do site. Clicando e em “Gerenciar” somos redirecionados para a visão que
lista todos os menus do site. Observe a figura seguinte.
Para cada menu são listados o número de itens de menus publicados, despublicados e
na lixeira, além de módulos associados ao menu selecionado.
Página 182
Figura: criação de menu
Para gerenciar itens de menu basta clicar na opção Itens de menu na visão de Gerenci-
amento de menus. Observe a figura seguinte.
Para criar novo item basta clicar no botão Novo e no botão Selecionar, de acordo com
a figura seguinte.
Página 183
Figura: Criando item de menu
Para criar novo item basta clicar no botão Novo e no botão Selecionar, de acordo com
a figura seguinte.
Página 184
São vários os tipos de itens de menu listados por “padrão” e segmentados por áreas
temáticas. Cada ítem de menu de área temática, por exemplo “Artigos” possui uma
explicação analítica da funcionalidade que implementa.
Para cada extensão instalada no site, novos tipos de itens de menu estarão disponíveis,
de acordo com os recursos disponíveis na extensão. Geralmente, componentes.
Após escolher o item de menu basta clicar no botão Salvar e Fechar para concluir o
processo.
Gerenciamento de Mídias
O gerenciamento de mídias engloba a edição e envio de imagens para o site, bem co-
mo a criação de novos diretórios. Para acessarmos a visão de gerenciamento de mídias,
devemos seguir pelo menu superior » Conteúdo » Midia, ou clicando no ícone rápido
Midia disponível no painel de navegação Conteúdo do lado esquerdo do Painel de
Controle. Observe a figura seguinte com a visão Mídia.
Na parte superior clique na aba Opções que está à direita, para configurar o site em
relação ao gerenciamento de mídias. Observe a figura seguinte.
Página 185
Figura: opções globais de mídias
Para criar um novo diretório / subdiretório clicamos no botão “Criar Nova Pasta” e
seguimos o fluxo do processo. Observe a figura seguinte.
Página 186
Visualização em Miniatura; e
Exibição Detalhada.
Caso ocorra algum problema durante o envio, uma mensagem será apresentada. Ge-
ralmente os erros no envio de imagem decorrem de:
Página 187
Imagens no site, boas práticas
Existem várias extensões de imagens e você deve considerar as seguintes, como sendo
compatíveis com a web:
1) Nunca use caracteres especiais para nomear suas imagens e evite o uso de es-
paços em branco. Ex: João Grandão pé de feijão.jpg;
Página 188
Capítulo 12 – Gerenciamento de Idiomas
Um dos padrões de usabilidade aponta no sentido de termos o site no idioma nativo do
domínio. Para sabermos qual o país do domínio basta observarmos a extensão que
acompanha o .com, .net, .org e etc... Por exemplo: “no domínio meusite.com.br, o (br)
identifica um domínio comercial do Brasil”.
Caso não instale o(s) idioma(s) durante a instalação do Joomla, use o Gerenciador de
Idiomas no Back end, seguindo os passos abaixo:
O acesso à internet e algumas diretivas do PHP, são fundamentais para o perfeito fun-
cionamento dessa nova funcionalidade do Joomla! 3. Em caso de erro, use o método
de instalação abordado no capítulo 4.
Gerenciamento de idiomas
Página 189
Figura: Alterando o idioma padrão do site
Perceba o idioma que instalamos na lista e que o padrão utilizado o English. O idioma
utilizado é o referenciado por uma estrela amarela sob a opção Default.
Para alterar o idioma do site, basta clicar na estrela da opção Default, no idioma Portu-
guês. A mesma ação deve ser feita na aba Installed Administrator.
Não esqueça de alterar o código de idioma do editor TinyMCE, siga pelo menu supe-
rior »Extensões »Gerenciamento de Plugins »Editor- TinyMCE e na aba Opções Bási-
cas, altere o código do idioma.
A alteração do idioma deve ser uma das primeiras ações efetuadas após a instalação do
Joomla!
Override de idiomas
Página 190
Basta navegar pelo menu superior » Extensions » Language Manager » Aba esquerda
» Overrides » Selecionar o idioma – Administrator.
Página 191
Capítulo 13 – Componentes
Componente é um programa desenvolvido de acordo com os padrões de projeto exigi-
dos pelo Framework do Joomla! É a extensão de maior complexidade e via de regra
interage com o bando de dados do site, criando novas tabelas.
Página 192
Contatos – componente de contatos;
Página 193
3. Aguarde o final do processo.
Componente Banners
Antes de criarmos uma campanha fictícia para o site, clique no botão opções do Ge-
renciador de Banners, para configurar de forma global o comportamento do compo-
nente.
As configurações serão aplicadas à todos os clientes, a menos que sejam alteradas para
algum cliente específico. Os parâmetros de configuração, estão relacionados a:
Página 194
Rastrear Cliques – grava diariamente, o número de cliques no banner; e
Campanha Fictícia
Vamos criar uma campanha em nosso site para visualizar o funcionamento do compo-
nente Banners.
Siga pelo menu superior »Componentes »Banners »Categorias »Novo, para criar uma
categoria, com as seguintes características:
Título - Hospedagem; e
Estado – publicado;
Opções de Metadados fica por sua conta. Lembra-se para que serve?
Página 195
Resta cadastrar um banner e basta seguir pelo menu superior »Componentes »Banners
»Banners »Novo. A visão de cadastro é dividida em abas, a saber:
Detalhes;
Opções de Publicação; e
Metadados.
Aba Detalhes
Campos comuns
Campos específicos
Página 196
Aba Opções de Publicação
Componente Busca
Jakob Nielsen, com propriedade, definiu que “internauta não navega, internauta bus-
ca”.
O acesso ao componente deve ser feito pelo menu superior »Componentes »Busca
Página 197
Figura: componente de busca
Aba Componente
Na aba Componente temos 05 (cinco) campos, a saber:
Recolher Estatísticas das Buscas – o padrão é Não. Altere para Sim se desejar
métricas baseadas nas buscas dos visitantes do site;
Página 198
Aba Permissões
Para utilizarmos este componente, devemos primeiro publicar o plugin de busca inteli-
gente. A publicação é realizada seguindo o caminho menu superior »Extensões »Ge-
renciador de Plugins. O plugin a ser publicado é o Conteúdo - Busca Inteligente, plu-
gin do tipo “content”. Para publicá-lo basta clicar na imagem de um círculo com um
(X) à esquerda de seu nome. A mudança para uma imagem com um (V) verde, signifi-
ca que está publicado.
Após publicar o plugin, você pode seguir com a configuração do componente de busca
inteligente, voltando ao menu superior »Componentes »Busca Inteligente
Página 199
Figura: configurando componente de busca inteligente
Aba Busca
Pemitir Busca Vazia – com um filtro selecionado, permite que uma string de
busca vazia, inicie uma busca dentro das restrições do filtro;
Página 201
Aba Índice
Tamanho do lote indexador – controla quantos itens são processados por lote.
Quanto maior o número, mais recursos de infra (máquina e memória) serão
necessários, além do tempo de processamento. Os valores variam de 05 a 300
itens por lote;
Página 202
levância global do resultado da pesquisa. É considerado em relação aos outros
multiplicadores e o corpo do texto vem de um resumo do conteúdo;
Página 203
Habilitar Log – habilita a criação de um arquivo de log durante o processo de
indexação.
Na imagem abaixo temos a ilustração de uma pesquisa pelo termo “política”, no site.
Componente Contatos
Página 204
Figura: componente contato
Aba Contato
Estas configurações se aplicam a um contato, a não ser que tenha sido alterado por um
item de menu ou contato. Os parâmetros são divididos em: Gerais e Formulário.
Parâmetros Gerais
Página 205
Categoria do Contato – defina se a categoria a qual pertence o contato será e-
xibida ou não. A exibição da categoria pode ser acrescentade de um link para
a mesma;
Nome ;
Cargo do Contato;
E-mail;
Endereço;
Cidade;
Estado;
CEP;
País;
Telefone;
Celular;
Fax;
Página 206
Site;
Informações Adicionais;
Imagem ;
Imagem (*);
VCard;
Exibir Perfil; e
Exibir Links.
Aba Ícones
Nesta aba podemos configurar a exibição ou não de ícones e textos, além de alterar os
principais ícones do componente de contato, a saber:
Ícone de endereço;
Ícone de email;
Ícone de telefone;
Ícone de celular;
Ícone de fax; e
Ícone de informações.
Aba Categoria
Página 207
Título da Categoria – defina se o título da categoria será exibida ou não. O
padrão é “Exibir”;
Aba Categorias
Página 208
Contatos na Categoria – defina se os itens existentes na subcategoria, serão
exibidos em números. O padrão é “Exibir”.
Parâmetros Gerais
Parâmetros do Formulário
E-mails Banidos – e-mails que não têm permissão para utilizar o formulário
de contato. Separe-os por ( ; ). Ex:fulano@fulano.com; sic@sic.net;
Assunto Banido – assuntos que contenham qualquer palavra da lista serão ba-
nidos. Separe-os por ( ; ). Ex: vasco da gama;política;religião;etc...;
Texto Banido – textos que contenham qualquer palavra da lista serão banidos.
Separe-os por ( ; ). Ex: vasco da gama;política;religião;etc...;
Aba Integração
Esta aba determina como o componente contato relaciona-se com outras extensões,
com a opção de exibir ou ocultar link para o Feed RSS.
Página 210
Aba Permissões
O componente Fonte de Notícias ( News Feeds) permite inserir no site, fontes externas
de conteúdo, segmentadas por categorias. O acesso ao componente é realizado pelo
caminho menu superior »Componentes »Fontes de Notícias.
Página 211
Figura: Parâmetros de configuração componente Fontes de Notícias
Selecione um Layout – seleção do layout para o News Feed. Caso seja feito
override de templates, um template específico pode ser escolhido;
Página 212
Ordem de exibição – ordem de exibição da lista de Feeds;
Aba Categoria
Categorias vazias – defina se as categorias que não possuem News Feeds se-
rão exibidas, o padrão é “Ocultar”;
Aba Categorias
Página 213
Configurações aplicadas a subcategorias do Newsfeed, exceto se forem alteradas no
item de menu.
Por padrão as Newsfeed são apresentadas em lista, diagramada por uma tabela. Nesta
aba configuramos de forma geral, a forma de apresentação.
Aba Permissões
Página 214
Clicando no botão Carga é possível realizar operações em lote.
Componente Mensagens
Componente Redirecionamento
Permite a criação de Tags que podem ser utilizadas de forma simples em artigos ou
módulos buscando uma melhor indexação pelos spiders de busca, até relacionamento
em consultas para funcionamento de determinadas extensões. Ex: Quando desenvol-
vemos o projeto Aeroshopping, da Infraero, foi utilizado esse recurso à época nativo
do CCk K2, para relacionar os pontos de um arquivo swf com um manifesto xml e os
itens do K2. Desta forma, era possível encontrar qualquer loja através de um movie
clip em swf.
Aba Permissões
Página 216
Capítulo 14 – Módulos
O módulo serve para mostrar o resultado de alguma ação do componente ou pode estar
isolado executando alguma função. Temos como exemplo, o módulo de login que,
uma vez habilitado, apresenta o formulário para criação de conta e tela de acesso à
área administrativa do website. Por outro lado, o módulo Hora Certa, apresenta o
horário atômico baseado em um servidor externo e não interage criando tabelas no
banco de dados.
Módulos do site; e
Módulos da Administração.
Página 217
A alternância de tipos pode ser efetuada selecionando o desejado ou usando o filtro de
busca, logo abaixo. No template Ísis, ambos os recursos ficam à esquerda.
Módulos do Site
Módulos do site são aqueles que serão exibidos no front-end de acordo com a posição
escolhida.
Para que o módulo seja visualizado, ele deve estar publicado em uma posição existente
no template e atribuído à pelo menos 01 (hum) item de menu. Observe a imagem abai-
xo:
Página 218
Detalhes;
Opções Básicas;
Opções Avançadas; e
Atribuir Menu.
Detalhes
Título – título do módulo, será visualizado no front-end do site, desde que de-
finido para tal;
Nível de Acesso – define o grupo que pode acessar este módulo. Por padrão
será atribuído o nível “Public”, ou seja, todos os visitantes do site poderão
acessar o módulo;
Página 219
Figura: definindo a ordem dos módulos
Nota – define uma nota que será exibida na lista de módulos, é opcional.
Opções Básicas
Opções Avançadas
Atribuir Menu
Define em qual item de menu (página) o módulo será exibido. As opções de visualiza-
ção são as seguintes:
Página 220
Em todas as páginas exceto as selecionadas – o módulo será visualizado em
todo o site, exceto na página do item de menu escolhido.
Página 221
» Menu - Este módulo exibe um menu no site;
» Módulo de Busca Inteligente - Este é o módulo para o sistema de Busca Inteligente;
» Personalizar HTML - Este módulo permite que você crie seu próprio módulo
HTML usando um editor WYSIWYG;
» Publicação de Feeds - O módulo Syndication cria uma publicação de feed para a
página onde é exibido;
» Quem está On-line - O módulo 'Quem está On-line' apresenta o número de usuários
anônimos (visitantes) e usuários registrados, que estão acessando o site;
» Rodapé - Este módulo exibe as informações dos direitos autorais do Joomla!
» Seletor de idioma - Este módulo exibe uma lista dos idiomas de conteúdo
disponíveis (como definido e publicado na aba de Gerenciador de Idioma de
Conteúdo) para alternar-se entre eles quando desejar um site multi-idiomas;
» Últimas Notícias - Este módulo exibe uma lista dos artigos mais recentemente
publicados;
» Últimos usuários - Este módulo exibe os últimos usuários registrados;
» Weblinks - Este módulo exibe links de uma categoria definida no componente
Weblinks; e
» Wrapper - Esse módulo exibe uma janela iframe para o endereço especificado.
Módulos da Administração
Módulos de administração são aqueles exibidos no back end. Em uma instalação “lim-
pa” do Joomla, ou seja: sem exemplos de conteúdo, temos os seguintes módulos insta-
lados por padrão:
Página 222
User Status – exibe o estado do usuário;
Para que o módulo seja visualizado, ele deve estar publicado em uma posição existente
no template administrativo.
Detalhes;
Opções Básicas; e
Opções Avançadas.
Página 223
Capítulo 15 – Plugins
Plugins são “scripts” com determinada funcionalidade, geralmente reagindo a uma
ação do usuário. São divididos em tipos e possuem parâmetros de configuração
comuns à todos e específicos a cada um.
Aba Detalhes
Página 224
Nível de Acesso – define o nível de acesso relacionado a um grupo que pode
acessar o plugin. Por padrão o nível de acesso é o Public;
Tipo de Plugin – mostra o tipo de plugin. Este campo não pode ser editado;
Plugins Habilitados
Captcha - Esse plugin usa o serviço CAPTCHA para evitar spammers, en-
quanto ajuda a digitalizar livros, jornais e programas antigos de rádio. Para
obter uma chave pública e privada para o seu domínio, acesse
http://google.com/recaptcha.
Para usar esta nova conta para o registro, vá para Opções no Gerenciador de
Usuário e selecione Captcha - reCaptcha como Captcha;
Página 225
lo e para loadmodule um título específico para o módulo;
» Conteúdo Ocultar e-mails - Ocultar todos os e-mails no conteúdo dos
spambots usando o JavaScript;
» Conteúdo Quebra de Páginas - Permite a criação de artigos paginados com
uma tabela de conteúdo opcional.
Inserir quebra de página através do uso do botão de quebra de página nor-
malmente encontrado abaixo do painel de texto no editor de artigos. A locali-
zação da quebra de página em um artigo será exibida no editor como uma
simples linha horizontal.
O texto exibido dependerá das opções feitas e pode ser o título, texto alterna-
tivo (se fornecido) ou número de páginas.
O uso do HTML é:
<hr class="system-pagebreak" />
<hr class="system-pagebreak" title="Título da página" /> ou
<hr class="system-pagebreak" alt="Primeira página" /> ou
<hr class="system-pagebreak" title="Título da página" alt="Primeira página"
/> ou
<hr class="system-pagebreak" alt="Primeira página" title="O título da pági-
na" />;
» Conteúdo Navegação da Página - Permite a você adicionar a funcionalidade
Próximo & Anterior em um Artigo; e
» Conteúdo Navegação - Adiciona a funcionalidade de votação a um Artigo.
Editors – São plugins relacionados a edição de texto do site, por padrão os se-
guintes plug-ins do tipo “editors”, são instalados e habilitados:
» Editor – CodeMirror – este plugin carrega o editor CodeMirror;
» Editor – Nenhum – este plugin carrega um editor básico de texto plano. I-
deal para criação de módulos HTML personalizados com algum tipo de script
e para depuração de textos inseridos;
» Editor – TinyMCE - é um editor HTML WYSIWYG baseado em JavaS-
cript, sendo o editor de texto padrão do Joomla! Na minha opinião, o
TinyMCE é o melhor e mais seguro editor de texto open source da atualidade;
Página 226
tros artigos do site. Exibe um popup permitindo você escolher um artigo;
» Botão – Imagem - Exibe um botão que permite inserir imagens em um arti-
go. Exibe um popup permitindo a você configurar as propriedades da ima-
gem, bem como enviar uma nova imagem;
» Botão – Quebra de Página - Habilita um botão quer permite inserir uma
quebra de página em um artigo. Um popup permite efetuar as configurações
desejadas; e
» Botão – Leia Mais - Habilita um botão que permite inserir facilmente o link
Leia mais... em um artigo.
Plugins Desabilitados
Página 228
Autenticação – Gmail - Gerencia a autenticação de usuário com o GMail ou
conta Googlemail (Requer diretiva cURL do PHP habilitada no php.ini). Vo-
cê deve ter pelo menos um plugin de autenticação ativado ou você não conse-
guirá acesso ao seu site.
Página 229
Capítulo 16 – Templates
Template ou tema, é a camada de visão de qualquer programa orientado a objetos, isto
mesmo, template não é uma exclusividade do Joomla! Fim manter um padrão de
nomenclatura, utilizarei o termo template, ao invés de tema. Não se esqueça, o
significado é o mesmo.
Customização de Template
Customizar um template, nada mais é que adaptar a camada de visão, aos requisitos de
um projeto. Uso o CMS há 10 anos e desenvolvi apenas 03 templates “do zero”, pouco
concorda? Via de regra, a customização atende a 90% dos projetos.
Página 230
Nas figuras seguintes, você pode visualizar o resultado final da customização do
template JA Purity e Protostar (Joomla! 3.x), para empresas de Brasília.
Página 231
Figura: template Protostar customizado
Página 232
Isto é customização e pode ser conseguido com um simples editor de texto, ou se
quiser melhorar um pouco, o notepad ++ (Windows) ou Gedit (GNU/Linux).
Recomendo o editor padrão do Joomla! 3.x. Só um detalhe: “tem que conhecer PHP,
css, Xhtml e Javascript”.
Firefox e Firebug
Que tal adiantar o serviço e baixar essas duas ferramentas incríveis? O Batman e
Robin da customização de templates! Acesse http://br.mozdev.org/firefox/download/
e baixe a última versão do navegador Firefox. A última versão do Firebug pode ser
baixada em http://www.livrodejoomla.com.br/insumos/?#a4
Estrutura de um Template
Página 233
css – diretório da(s) folha(s) de estilos;
Gerenciamento de Template
Página 234
Observe a barra superior do gerenciador de temas, temos opções interessantes:
Excluir – permite a exclusão de um tema, desde que o mesmo não seja pa-
drão;
Em uma instalação padrão do Joomla! 3.x, com ou sem exemplo de conteúdos, o tem-
plate padrão do front-end do site é o Protostar e o template da administração é o Ísis.
Ambos os templates foram desenvolvidos dentro dos rígidos padrões da Web 2.0 e
compatíveis com o mercado mobile.
Página 235
Figura: template padrão do site
Perceba que o link Preview está habilitado para o template Protostar, padrão do site.
Clique em preview para visualizar as posições de módulos do template.
Página 236
A imagem, retrata “in loco”, o que é um template. Na parte superior, o texto
“Laboratório Joomla” é o texto que substitui o logotipo e no “frame central”, temos o
conteúdo de destaque, publicado no banco de dados. Os objetos sombreados e com
marcações em vermelho, são posições e módulos publicados.
Clicando no link Protostar Details and Files, temos a opção de editar arquivos e
folha(s) de estilos do template, bem como fazer uma cópia.
Arquivo user.css
Página 237
A esquerda no editor, clique no diretório css e verifique que temos apenas um arquivo
de estilo denominado template.css.
Clique no botão Novo arquivo e crie o arquivo user.css, de acordo com a figura se-
guinte. Se preferir você pode importar um arquivo .css de sua máquina.
Página 238
O arquivo deve estar dentro do diretório css, o tipo de arquivo dever ser css e o nome
do arquivo user. Clique no botão Criar, para terminar o processor. Certifique-se de ter
criado o arquivo dentro do diretório /css.
Criei um arquivo simples e alterei apenas a cor da fonte utilizada, de cinza escuro para
laranja.
Compare as figuras seguintes e perceba a diferença na cor da fonte utilizada pelo tem-
plate. A primeira figura demonstra o uso normal do arquivo template.css e a segunda
figura, a utilização do arquivo user.css.
Página 239
Figura: protostar usando o user.css
Cópia de Template
Grandes projetos podem significar vários layouts gráficos divididos por segmentos. No
Joomla! 3.x temos a opção de criar templates baseado em outros existentes e desta
forma ganhar um tempo considerável no desenvolvimento de um grande projeto.
Quando digo criar é realmente clonar toda a estrutura do template (arquivos e diretó-
rios) e gravar o novo tema na tabela extensions. Só quem já precisou criar vários tem-
plates em projetos com Joomla! 1.0 e 1.5 sabe o nível de melhoria e economia de tem-
po com este novo recurso do CMS.
O primeiro passo para clonar um template é criar outro baseado no original. Vamos a
um passo-a-passo demonstrando todo o processo:
Página 240
Figura: menu auxiliar Gerenciamento de Templates
Página 241
d) Digite o nome do novo template e clique no botão Copy Template. Lem-
bre-se que trata-se de um diretório então, nada de acentos, espaços e caracteres especi-
ais. Cuidado com a netiqueta e prefira caixa baixa. No caso de estudo apresentado, o
nome do template será "andromeda".
Página 242
Figura: estilo do Template Andromeda
Associação de Template
Muitas vezes nos deparamos com projetos que precisam de “layouts gráficos”
diferenciados, para determinadas áreas. No Joomla! usamos a “Associação de
Templates” para atender à demanda.
Tenho exemplos reais em que foram instalados, por exemplo, 18 “Joomlas” para
atender uma demanda que poderia ser atendida com associação de templates.
Página 243
Joomla! 3.x segue a mesma estrutura do Joomla! 2.x e o pânico de alguns usuários em
torno de seu lançamento tem um pouco de “glamour”, um pouco de “marketing” e
muito de “desconhecimento da ferramenta”.
Vamos transformar o template beez_20, padrão do Joomla! 2.5, que no Joomla! 3.x
chama-se beez_3, em um template compatível com Joomla! 3.x. Os passos serão os
seguintes:
Página 244
Figura: template instalado
Se você comparar o template beez_20 original do Joomla! 2.x com o que baixou no
site do livro, perceberá uma diferença: “criei arquivos de tradução para o português do
Brasil no template, fim evitar constantes sem tradução, no ato da instalação”. Não
quero que fique com a sensação de erro.
Templates criados com softwares, frameworks e afins, devem seguir o mesmo padrão.
Aliás, sonho com o dia em que os usuários irão entender que template é tão somente a
camada de visão. Neste dia, eles deixarão de gastar com cursos de templates e passarão
a utilizar apenas sua criatividade, aliada à uma IDE ou framework.
Página 245
A falta de perícia com o CMS poderia induzir-me à instalação de 28 “Joomlas” e a
“bomba” estouraria no colo da responsável pela manutenção do projeto após a
publicação. Quem seria o responsável por tal problema? O Joomla! no fim ele sempre
leva a culpa. Você acha justo?
Acesse a área de insumos do site do livro e baixe o infográfico que criei para
demonstrar o que é um template. Apesar de ter sido feito para o Joomla! 1.7, continua
atual.
Página 246
Capítulo 17 – Desenvolvendo um Projeto com Joomla! 3.x
Webdesign, você já sabe, significa “Projeto para Web”. Não sabia? Quem disse foi
Jakob Nielsen, “guru” da usabilidade. Adquira o livro Projetando Websites, apesar de
caro, vale a pena cada centavo investido.
“O projeto deve ser desenvolvido para o público-alvo do cliente e não para a google.”
#FicaDica
Página 247
Levantamento de Requisitos – primeiro ato do processo, busca identificar to-
das as aspirações do cliente em relação ao site, além de identificar o público-
alvo e mercado vertical do projeto. Pode ser por email ou vídeo-conferência,
para clientes que não residam na sua cidade. Evite telefonemas, “palavras se
perdem no vento”. Caso contrário, ou seja: o cliente mora na sua cidade, a-
gende uma reunião presencial.
O levantamento de requisitos é o momento do brainstorming (literalmente:
"tempestade cerebral" em inglês) ou tempestade de ideias, que irá surgir em
prol do sucesso do projeto.
Identifique todos os pontos críticos do projeto, à saber:
» Domínio – o cliente possui domínio registrado?
» sim
» tem acesso à edição do DNS? Caso negativo, verifique quem tem aces-
so ou oficialize a quem de direito. Caso contrário, não conseguirá publicar o
site. Por exemplo em uma mudança de Host.
» não
» o cliente tem um nome em mente? Oriente o cliente quanto ao domí-
nio, cuidado com sopa de letrinhas. Por exemplo:abdyj.com.br
» quem efetuará o registro? Se o cliente delegar à você, seja ético(a), não
prenda o domínio do cliente à você ou sua agência.
» Hospedagem – o cliente possui um serviço de hospedagem?
» sim
» verificar se atende aos requisitos do Joomla
» não
» será hospedagem corporativa?
» sim – verificar se a montagem da máquina está no escopo do desen-
volvimento do projeto.
» não
» qual empresa indicar?
» tenho uma revenda e utilizarei no projeto.
» Template – qual será a metodologia de aplicação do template?
» customização
» criação do zero
» desenvolvimento a partir de um layout (html + css)
» desenvolvimento a partir de uma imagem (.psd, .cdr, e etc...)
» utilização de template comercial (clube de templates)
» Instalação do Joomla – qual a melhor forma de instalar o Joomla?
Página 248
» com exemplos de conteúdo
» sem exemplos de conteúdo
Lembre-se que templates comerciais são fornecidos com pacotes QuickStart
que por padrão, forçam a instalação de exemplos de conteúdo.
» Desenvolvimento de Extensões – será necessário o desenvolvimento de al-
guma extensão do tipo componente, módulo ou plugin?
» O JED atende à todas as demandas do projeto
» Será necessário desenvolver uma ou mais extensões
» Será necessária a terceirização de desenvolvimento de extensões.
» Webmarketing – o cliente possui uma política de webmarketing?
» sim – irá contratar empresa especializada
» não
» qual o melhor programa para o cliente? Adwords? Adsense? Nenhum?
Em qualquer das hipóteses, lembre-se que o Joomla! 3.x por si só, é potenci-
almente favorável aos buscadores e o simples fato de preencher corretamente
os metadados de artigos, módulos, categorias, menus e etc... irão ajudar con-
sideravelmente na indexação do site do cliente.
Anote tudo, pois será a base documento de visão, que deverá ser homologado
pelo cliente. Muito cuidado para não “vender elefante voando”;
Página 249
Entrega/Pagamento – Opte pela entrega “modular” em substituição ao tradici-
onal 50% no início e 50% na publicação.
A entrega modular permite um melhor acompanhamento, documentação e
homologação, evitando “querências” descabidas por parte do cliente.
Página 250
Implementação de Segurança – após a publicação é fundamental implementar
políticas rígidas de segurança no site, que englobem no mínimo:
» encapsulamento do diretório de administração;
» permissões de diretórios e arquivos; e
» checagem do usuário e senha de acesso ao back-end.
Suporte / Manutenção – “Quer suporte? Compra uma escada.” Bela frase, mas
não podemos usá-la em desenvolvimento de projeto web. No documento de
visão deve-se prever dentre outras coisas, o que será do site após a publica-
ção. Quem vai gerenciar o conteúdo com atualizações constantes? Quem dará
suporte para atualização de versão, novas funcionalidades, “bugs” e etc...?
Tudo isso tem que estar previsto.
Uma boa prática que uso e recomendo, é disponibilizar no back-end, vídeo-
tutoriais explicando o funcionamento de cada parte do site, sem entrar no mé-
rito do CMS em sí.
Levantamento de Requisitos
Os requisitos de nosso projeto foram levantados, o site a ser desenvolvido deverá
atender ao público brasileiro. Pertence ao mercado vertical Ensino/Educação, seu
escopo é voltado ao segmento escola. Utilizarei um template gratuito a ser
customizado e clonarei o template Protostar para o blog.
Além de todos as implementações e testes de segurança e performance, o projeto terá
as seguintes funcionalidades embarcadas:
Página 251
Desenvolvimento do Projeto
Acesse http://www.joomla.org/download.html e baixe a última versão estável do
Joomla! 3.x.
Exercício 1 – Template
Esta decisão deve ser tomada pelo webdesigner. Leve em conta a experiência do
mesmo com o CMS Joomla, com as linguagens de marcação HTML e CSS, com as
linguagens de programação PHP e Javascript. Se optar por usar um framework, deverá
dominar o framework escolhido. Por fim se optar por um template comercial, não
esqueça do pacote Quick Start.
Se você quiser utilizar um template gratuito e que atenda aos requisitos do projeto,
pode dar uma “googlada” em busca de opções. Observe na figura seguinte os termos
da minha pesquisa.
Página 252
Tendo em vista a didática do projeto do livro, utilizarei o template nativo do Joomla!
3.5 e farei a devida customização para o projeto Escola. O nome do template é
Protostar.
Eu poderia usar o Blank Template, um framework (Gantry, T3, Gavern e etc...), mas
pelos requisitos do projeto entendi ser melhor customizar o template padrão do CMS
Joomla! 3.5.
Página 253
A prática leva à excelência. Que tal relermos o capítulo 9 do livro? Usaremos para o
projeto, a política de ACL que foi explanada anteriormente.
Ensinar a criar um logotipo, foge do escopo deste livro. Existem vários programas que
auxiliam nesta tarefa e usarei o Adobe Fireworks. Após viajar pelo mundo da
imaginação, desenvolvi um logotipo, observe a imagem seguinte, para representar a
Escola Expresso do Saber.
O logotipo foi desenvolvido a partir da frase ESCOLA, em caixa alta com fonte Arial.
As referências ao Joomla! estão presentes no logo do CMS substituindo a letra O e o
nome Joomla! 3.5, em capitalize e tamanho menor, mantendo a fonte Arial. Adicionei
uma imagem que faz referência à formação acadêmica para finalizar. O logotipo pode
ser baixado na área de insumos do website do livro.
Página 254
Figura: logotipo da escola Joomla! 3.5
Navegue pelo menu superior » Extensões » Temas e na visão Temas: Estilos, mude a
opção para Temas. Na lista de templates escolha o Protostar e clique no hiperlink
Protostar Detalhes e Arquivos.
Digite o nome do novo tema, no meu caso utilizei escola, clique no botão Copiar
Tema e depois no botão Fechar.
A visão Temas será aberta novamente e o novo template estará disponível para
utilização no projeto. Observe a figura seguinte com o novo tema disponível.
Página 255
Figura: novo tema disponível
A maioria dos templates modernos, possuem a opção de utilizar ou não, uma imagem
representativa do negócio, ou seja, o logotipo. Este parâmetro é definido na aba
opções da edição de estilos do template.
Página 256
A estrela está amarela no My Default Style (Protostar), porque ele é o template padrão
no momento. Clique na estrela que está ao lado do estilo escola – Padrão.
Página 257
Figura: inserindo logotipo
6 – Acesse o front-end apertando as teclas “ctrl + f5” para atualizar o site e visualizar a
inserção do logotipo no template. Observe a figura seguinte:
Página 258
Figura – paleta de cores template
Página 259
Exercício 5 – Aplicação de sombra no container central do template Escola
Na aba Editor, clique no diretório /css e abra o arquivo template.css e copie CTRL+C
todo o conteúdo. Depois crie um novo arquivo do tipo css, com o nome de user dentro
do diretório css e cole CTRL+V o conteúdo. Observe a figura seguinte:
Página 260
Figura – seletor background no arquivo user.css
Inseri na linha 7054 do arquivo user.css, novos estilos para as classes .body e
.container aplicando o efeito de opacidade.
O resultado será uma leve transparência em todo o container central do template.
Página 261
O próximo passo será o efeito gradiente no fundo do template. Repita as ações
anteriores e abra o arquivo user.css. Observe a figura seguinte:
Inseri na linha 6995 do arquivo user.css, novos estilos para a classe body.site
aplicando o efeito de gradiente.
O resultado será uma leve transparência em todo o fundo do template.
Página 262
Exemplos:
1) No arquivo user.css existe um seletor #background. Significa que todo o
conteúdo dentro das tags <div id=”seletor”> </div> será afetado pela
estilização do seletor #background.
2) No arquivo user.css existe um seletor .body container. No exemplo: <div
id=”minhadiv” class=”body”> </div> todo o conteúdo dentro das tags será
afetado pela estilização. A classe é herdada por container.
Após essa breve explicação, edite o arquivo index.php, de acordo com a figura
seguinte.
É muito ruim clicar em algum link e ser redirecionado para uma página dizendo algo
parecido com: "Erro artigo não encontrado, código do erro: #104". O simples fato de
começar com a palavra erro, induz o usuário a pensar: "caracas, fiz merda." Por que o
espanto? É merda mesmo!
4 – Acesse a áea de insumos do website do livro e baixe a página de erro com foco na AACD
em www.livrodejoomla.com.br/insumos/extensoesdoprojeto/error.zip. Descompacte, copie todo
o conteúdo e cole dentro do editor do Joomla, substituindo o conteúdo da página de erro nativa.
Clique no botão “Salvar e Fechar” para encerrar o processo.
Página 264
Figura: resultado final no front-end
Caso deseje customizar a página de erro de forma “mais direta”, acesse por FTP o seu
site e/ou renomeie o arquivo error.php que está em /templates/protostar/, substituindo
pelo arquivo error.php, baixado do site.
Página 265
Demonstrarei passo-a-passo, o processo para criação de uma nova posição de módulo:
5 – Perceba na imagem, que o template Escola possui uma posição chamada “position-
3”, logo acima do “message”. Copie (ctrl+c) todo o trecho do código <jdoc:include
type=”modules” name=”position-3” style=”xhtml”> e cole (ctrl+v), antes do
trecho de código <jdoc:include type=”component”>;
Nesta etapa iremos começar o design de conteúdo e para tal, releia o capítulo 10, se for
o caso, para aplicar as configurações globais do site em relação ao conteúdo, inserir
imagens e/ou vídeos e configurar corretamente o plugin do editor TinyMCE.
Página 267
Na figura seguinte temos listadas as categorias e artigos a serem criadas no projeto.
» Notícias
» Acadêmicas
» Gerais
» Blog
» Tutores
» Colunistas
Página 268
Aba Detalhes
» Título – Notícias
» Apelido – deixe em branco (será preenchido automaticamente pelo Joomla!)
» Descrição – Deixe em branco (não será necessário)
» Pai – Nenhum Pai
» Estado – Publicado
» Idioma - Português
Aba Opções
» Layout Alternativo – Usar Global
» Imagem – Deixe em branco
» Nota – Deixe em branco
Aba Permissões
O grupo Blog, criado de acordo com o capítulo 9, não deve ter nenhum tipo de
acesso à categoria Notícias. Você perceberá que por padrão o grupo tem acesso total
tendo em vista herdar as permissões, do grupo pai, Manager. Clique sobre o nome do
grupo à esquerda e no campo de seleção, defina a negação total de acesso. Nas figuras
seguintes relembro a política de ACL criada no capítulo 9.
Página 269
Figura: usuários criados e distribuídos de acordo com a política de ACL
3 – Após a criação da categoria, clique em “Salvar Como” para criar uma cópia da
categoria Notícias;
5 – Crie a categoria Blog, atentando para o fato da mesma não possuir categoria pai e
na aba permissões, negue o acesso ao grupo Publisher, permitindo acesso total ao
grupo Blog; e
Perceba na figura seguinte a estrutura completa do nosso site, com todas as categorias
e subcategrias criadas.
Página 270
Exercício nr 2 – Criação dos artigos
Todas as imagens que fazem parte do texto, devem possuir uma descrição.
(TAG alt do HTML);
A tecla (enter) será utilizada para criar um novo parágrafo no texto. (TAG
<p></p> do HTML);
O uso das teclas (enter + shift) permitirão “pular uma linha” no texto. (TAG
</br> do HTML); e
Use uma única fonte (tipo de letra) para todos os artigos do site.
» Sem categoria
» Estatuto
» Bem-vindos
» Notícias
» Acadêmicas
» Matrículas abertas
» Gerais
» Artigo nr 1
» Artigo nr 2
» Blog
» Tutores
» Artigo de apresentação
» Colunistas
» Artigo de apresentação
Página 271
Para criar o artigo “Bem-vindos”, seguiremos os seguintes passos:
2 – Na pasta artigos que você baixou do site, abra o arquivo Bem-vindos, selecione o
texto (ctrl+a), copie (ctrl+c) e cole (ctrl+v) no editor de texto do Joomla, todo o
conteúdo;
3 – Perceba que o título do artigo foi copiado para o corpo do editor. Selecione este
pedaço, copie e cole na opção título do editor e mantenha a categoria “Uncategorised”.
Retire os espaços entre os parágrafos utilizando a tecla (del) e use a tecla (enter) para
criá-los novamente.
Página 272
9 – Em Estado, selecione Publicado, Destaques (Sim) e inclua as Tags: Joomla! 3.5,
escola e aprendendo joomla. Basta digitar e clicar na tecla enter para registrar a Tag; e
Que tal aproveitar ao máximo os recursos do Joomla! 3.5 e usar o artigo “Bem-
vindos” como base para os outros artigos do projeto? Com o artigo aberto para
edição, basta clicar no botão Criar uma cópia. Outra opção é marcar o “checkbox” à
esquerda do nome do artigo e na barra de ferramentas, clicar no botão “Lote”, para
copiar o artigo, ou movê-lo para outra categoria. Observe a figura seguinte.
Após clicar no botão “Lote”, será aberto um formulário, com opções relacionadas à
cópia/mudança de categoria.
Página 273
No artigo Estatuto usarei o recurso de âncoras para permitir a navegação dentro do
mesmo. Observe a figura seguinte.
Uma figura de âncora surgirá ao lado do início do parágrafo (1) e o próximo passo
será criar um hiperlink para a âncora. Observe a figura seguinte.
Página 274
1. Selecione o texto que será linkado à âncora;
2. Clique no ícone Inserir Hiperlink; e
3. Selecione a âncora desejada e clique no botão OK.
Dessa forma conseguimos criar índices e permitir uma navegação amigável em artigos
relativamente grandes, inclusive com a possibilidade de criar uma âncora no início do
artigo e um texto “Voltar ao Topo”, no final do artigo. Esse é um recurso mutio
utilizado em artigos grandes. Por exemplo, o Estatuto de uma Instituição.
Talvez você se pergunte: “Por que não utilizar imagens escaneadas para publicar o
Estatuto?” A resposta é simples: “O uso de imagens neste caso, além de aumentar a
carga de renderização e diminuir a performance do website, não seria nada acessível.”
Escolha entre criar uma cópia ou pelo botão Lote e crie todos os artigos restantes de
acordo com a hierarquia de conteúdos abordada no início da etapa 3. Sugiro que insira
vídeos, hiperlinks e imagens para praticar as ações relacionadas ao processo. Lembre-
se: “Somente a prática leva à perfeição”.
Página 275
Exercício 3 – Criando menus
O próximo passo será criarmos um novo menu no projeto. O Main Menu foi criado
com seus respectivos itens de menu, durante a instalação do Joomla! Observe a figura
seguinte.
1. Nome do menu;
2. Itens do menu selecionado. Lembre-se que itens de menu nada mais são do
que os botões que farão os links para determinada ação; e
3. Itens do menu Main Menu, criados por padrão.
A página inicial do projeto aponta para um único artigo, de acordo com a figura
seguinte. Perceba a estrela em amarelo marcada na opção Início.
Página 276
Menu – menublog; e
3 – Clique em Salvar e Fechar. Você deve observar algo parecido com a figura
seguinte.
Página 277
Figura: configurando a aba layout
Criaremos novos itens de menu no Main Menu. Esses primeiros itens serão
responsáveis por apresentar os artigos que inserimos no projeto até o momento.
Seguiremos o seguinte roteiro:
Página 279
» Opções de Tipos de Link – Sem alteração. Perceba o parâmetro “Imagem do Link”,
é aqui que inserimos uma imagem no link, se for necessário;
» Opções de Exibição de Página – esses parâmetros estão relacionados ao SEO:
» Título no Navegador – o texto a ser exibido no navegador. Se ficar em branco,
usará o padrão definido nas configurações globais;
» Cabeçalho da Página – se for definido “Sim”, o título associado ao item será
apresentado. O padrão é “Não”;
» Classe da Página – uma classe “CSS” exclusiva para esse item. Em branco, será
utilizada a classe padrão do template.
» Opções de Meta-Dados – ações para ajudar na indexação pelos mecanismos de
busca. Vale a mesma dica de configuração dos artigos. Perceba o parâmetro “Seguro”,
ele deve ser utilizado, se e somente se, este item de menu utilizar “SSL”. Geralmente o
protocolo “SSL” é utilizado exclusivamente no acesso e utilização do back-end;
Página 280
3 – Crie mais dois ítens de menu de acordo com o exercício 4, para os artigos
Estrutura da Escola e Matrículas Abertas. Na aba detalhes, na opção Item Pai,
selecione Notícias. Observe a figura seguinte;
Antes do ítem de menu, crie um novo artigo na categoria Uncategorized com o título
Blog da Escola e com o seguinte texto: Bem-vindos ao Blog da Escola Joomla! 3.5.
Publique o artigo e selecione Não, em destaque.
O ítem de menu Blog é muito importante. Ele será o responsável pela associação de
templates do nosso projeto.
Página 281
2 – Clique no botão “Novo”, à direita e acima e na visão Gerenciador de Menus: Novo
Item de Menu, preencha as opções da seguinte forma:
Aba Detalhes
» Tipo de item de menu – Selecione Artigo » Único Artigo. Perceba que surgiu uma
nova opção abaixo, denominada Selecione um Artigo. Clique em Selecionar e escolha
o artigo “Blog da Escola”;
» Título do Menu – Blog;
» Apelido – deixe em branco;
» Link – não está passível de edição;
» Localização do Menu – selecione Main Menu;
» Item Pai – não altere;
» Nível de Acesso – public;
» Página Inicial – Não;
» Janela Destino – Pai;
» Tema Destino – Usar Padrão; e
» Idioma – Todos.
3 – Na aba Opções, configure de acordo com a figura seguinte.
Página 282
Etapa 4 - Design de Site
Nesta etapa vamos alterar o módulo de menu Main Menu para visualizarmos o efeito
Dropdow.
2 – Na aba Ferramentas de Busca (1), defina “Menu” (3), na opção “Selecionar Tipo”
(2); e
Perceba que temos um módulo de menu publicado. » Main Menu – módulo do menu
principal do Joomla! O “Main Menu” é publicado por padrão e não pode ser excluído.
Clique sobre o título Main Menu e na aba Módulo altere a opção Itens do Sub-Menu
para Sim. Observe a figura seguinte.
Página 283
Figura: alterando módulo de menu
Página 284
1. Clicando no botão “Lote”, para copiar o módulo, após selecionar o check box
do mesmo;
2. Clicando no botão “Novo”; e
3. Clicando no botão “Criar uma Cópia”, após criar um módulo.
Criaremos um módulo do tipo Site, que liste os artigos publicados na categoria Blog,
do projeto.
1. No menu de navegação superior do Back-end clique em Extensões »
Módulos e depois no botão Novo ;
2. Selecione o tipo Artigos – Categoria, de acordo com a figura seguinte;
Página 285
Figura: módulo publicado no Front-end
O próximo passo será criar os “itens de menu” que faltam no projeto. Perceba que
voltamos ao “Design de Conteúdo” e esta flexibilidade de voltar a uma determinada
fase do webdesign é muito importante no desenvolvimento de um projeto. O Joomla!
permite mesclarmos as fases do desenvolvimento sem prejuízo de prazo e/ou execu-
ção.
Em silêncio eu me perguntava: Por que? O template nada mais é que um pacote zipa-
do, é a camada de visão e enquadra-se no “design de página”. Poderiam ter partido
para o “design de conteúdo e design de site” sem problema algum. Partindo do princí-
pio que tratava-se de uma grande Instituição, com certeza o projeto foi bem elaborado
Página 286
e a equipe tinha conhecimento do “layout gráfico” e consequentemente das posições
de módulos que seriam implementadas no template.
Nós já criamos ítens de menu para o menu Main Menu e o processo é o mesmo. Darei
duas dicas:
O ítem de menu Colunistas é do tipo Artigo » Único Artigo: selecione o
artigo Colunistas; e
O ítem de menu Temas é do tipo Artigo » Listar todas as Categorias :
selecione a categoria de nível superior, Blog.
O ítem de menu Envio de artigo fica por sua conta. Dica : é um ítem de menu
do tipo Artigo » Criar Artigo.
Ao final do processo, o menu Blog deve ficar parecido com a figura seguinte.
Página 287
Etapa 6 - Design de Página
De volta ao “design de página”, iremos associar o template que será renderizado quan-
do clicarmos no item de menu “Blog”. #Engage
3 – Na aba Atribuir Menu marque o checkbox Blog, no menu Main Menu, Colunistas
e Temas no menu Blog; e
Página 288
Figura: resultado no front-end ao clicar no item de menu Blog
Página 289
Figura: alterando a atribuição do módulo
Página 290
Exercício 4 – Atribuição do módulo de menu Main Menu
» Vídeos e MP3;
» Slide Show;
» Encapsulamento do /administrator;
» Álbum de fotos;
Página 292
» Documentos para download; e
MP3 Integrado
Página 293
Figura: configuração plugin mp3
Página 294
Figura: arquivo mp3 inserido no website
Slide Show
Usaremos o Slideshow CK, módulo responsivo que permite exibição de Slide Show
utilizando imagens e/ou vídeos, além de links para artigos publicados e para Urls
externas.
Página 295
3 – Após a instalação, navegue pelo menu superior »Extensões » Módulos e em título
clique sobre Slideshow Ck;
6 - Na figura seguinte temos a aba Atribuir Menu. Foi selecionado apenas o item de
menu Home do menu Main Menu;
7 - Na figura seguinte temos a aba Atribuir Menu. Foi selecionado apenas o item de
menu Home do menu Main Menu;
Página 296
8 - Na figura seguinte temos a aba Permissões de Módulo com configurações que não
serão alteradas;
9 - Na figura seguinte temos a aba Images Source com configurações que não serão
alteradas;
10 - Na figura seguinte temos a aba Slides Manager. Esta aba é muito importante e
será explorada em detalhes de acordo com a figura seguinte;
Página 297
12 - Na figura seguinte temos a aba Styles options permite configurar os estilos de
apresentação dos slides do módulo;
Página 298
14 - Na figura seguinte temos a aba Avançado com configurações de bibliotecas,
cache e estilos;
1 – Clique na aba Slides source e apague todos os slides criados por padrão na
instalação do módulo de acordo com a figura seguinte;
Página 299
Figura: excluindo slides
2 – Na aba Módulo» Posição – digite slide e clique na tecla Tab para criar uma
posição de módulo personalizada. A posição slide foi criada em exercício anterior do
projeto de acordo com a figura seguinte; e
Página 302
Encapsulamento do /administrator
Encapsular, nada mais é que esconder. Usaremos o pluginAdminExile, para esconder
o /administrator de nosso site, aumentando sensivelmente a segurança contra tentativas
de invasões.
Existem Scanners que buscam a URL administrativa de sites que uma vez
encontradas, são vítimas de ataques do tipo “Força Bruta”.
Engana-se quem pensa que esses programas buscam apenas a URL “/administrator” e
dessa forma só atingiriam sites desenvolvidos com Joomla. A grande maioria dos
CMS estão na lista dos Scanners, dentre eles, Wordpress e OsCommerce.
» URL Access Key – a “chave” de acesso à área administrativa do site. Digite uma
palavra, ou um conjunto de caracteres. Não use o valor padrão, os scanners o
conhecem. Alguns caracteres especiais são reservados e não devem ser utilizados;
Página 303
» Use Key+Value – novidade nesta versão para Joomla! 3.x, pode-se adicionar um
valor à chave, tornando o sistema mais seguro. Defina “Sim” e no campo de texto
apresentado, digite a palavra ou número, complementar a chave;
» Redirect URL – o endereço de redirecionamento, caso tentem acessar /administrator.
O valor padrão é {HOME}, ou seja, a página inicial do site. Recomendo deixar esta
opção, tendo em vista não ser uma boa prática, “provocar um possível cracker que o
esteja atacando”.
Após configurar o plugin, a URL administrativa do site, passa a ser algo parecido
com:
http://www.seusite.com.br/administrator/?suachave=seuvalor
Faça “Logout” e tente acessar o back-end do site, digitando /administrator. Você será
redirecionado(a) para a página inicial.
Caso esqueça a chave ou valor definidos para o plugin, será necessário acessar
manualmente a base de dados e despublicar o plugin AdminExile, na tabela
“#__extensions”.
TAG Generator
A TAG Generator está presente no cabeçalho de um site desenvolvido com Joomla! e
pode ser visualizada apertando-se por exemplo, as teclas “ctlr+u”, no Firefox.
Página 304
Figura: configurando o plugin
São as seguintes as opções de configuração:
» Generator – defina o que deseja fazer com a TAG Generator. No projeto final do
livro, optei por customizar;
» Custom – o generator que criei; e
» Robots – defina o que fazer com os robôs.
Página 305
Figura: pesquisando o componente
2 – Encontre o componente, clique sobre o nome Ozio Gallery e depois no botão Ins-
tall; e
Página 306
Exercício 2 – Configuração do Ozio Gallery
Toda a operação é realizada durante a criação do ítem de menu e de acordo com o tipo
de apresentação escolhida.
Navegue pelo menu superior »Menu »Menu Blog »Adicionar item de menu e no botão
Selecionar do Tipo de item de menu, escolha Ozio Gallery 4.
Página 307
Skin Fuerte – possui variações no layout e a opção de tela cheia ;
Skin jGallery – permite multi álbuns, slideshow e tela cheia. Usaremos esse
modelo no projeto.
Página 308
Temos ainda as opções :
1 - Navegue pelo menu superior »Menu »Menu Main Menu »Adicionar item de menu.
Na aba título digite Galeria de imagens e no botão Selecionar do Tipo de item de
menu, escolha Ozio Gallery 4. Observe a figura seguinte.
Página 309
2 – Selecione Skin Jgallery, clique no User ID(1), selecione a conta(2) e siga os passos
para sincronização do componente com sua conta do google. Observe a figura
seguinte.
Página 310
Figura: álbum de fotos Ozio Gallery
Galerias de Imagens
O Ozio Gallery funciona integrado ao Google Plus, Google Photos e Youtube. Isso
pode ser uma limitação dependendo da situação. Usarei o Phoca Gallery para
gerenciar as galerias de imagens do nosso projeto. O Phoca Gallery é uma extensão
muito conhecida e utilizada. Outras extensões da família phoca, estão disponíveis no
website do dexenvolvedor.
Página 311
Figura: pesquisando o componente
Página 312
Exercício 2 – Configurando o componente Phoca Gallery
Página 313
(1) – Título do álbum;
(2) – Categoria pai – Deixe o padrão para álbuns únicos e selecione a
categoria pai para criar álbuns que possuem ligação com outros. Álbuns
filhos herdam todas as configurações de seus pais. (Conceito de herança);
(3) – Direitos de acesso – Selecione os grupos que têm acesso ao álbum;
(4) – Direitos de carregamento – Selecione os grupos que podem enviar
imagens para o álbum;
(5) – Direitos de remoção – Selecione os grupos que podem apagar imagens
do álbum; e
(6) – Diretório do álbum – Selecione o diretório padrão para as imagens do
álbum ou digite o nome do diretório (7) e clique no botão Criar Pasta(8) para
criar um novo diretório.
Página 314
3 – Após o término do processo clique no botão Salvar e Fechar após concluir as
etapas da figura seguinte;
1 - Navegue pelo menu superior »Menu »Menu Main Menu »Adicionar item de menu.
Na aba título digite Galeria de imagens Phoca e no botão Selecionar do Tipo de item
de menu, escolha Phoca Gallery. Observe a figura seguinte.
2 – Selecione Lista de imagens (visão de álbum) para abrir um úncio álbum e selecio-
ne o álbum que foi criado. Clique em Salvar e Fechar e acesse o front-end do website.
Verifique se está de acordo com a figura seguinte.
Página 315
Figura: álbum de fotos no front-end
Para gerenciar os documentos que poderã o ser baixados usaremos o Phoca Download.
Página 316
vedor que existem vários módulos e plugins que aumentam consideravelmente a fun-
cionalidade da extensão. Após o processo proceda à instalação normalmente pela aba
enviar pacote do arquivo. Na figura seguinte o componente instalado.
Página 317
As configurações do componente Phoca Gallery, seus módulos e plugins, fogem ao
escopo deste livro. Na url http://www.phoca.cz/documentation/category/78-phoca-
download está disponível toda a vasta documentação da extensão.
Página 318
2 – No painel de controle do componente clique no ícone Imagens e depois no botão
Novo para uma imagem ou Múltipla adição para várias imagens. Observe a figura
seguinte os principais parâmetros de configuração;
Página 319
1 - Navegue pelo menu superior »Menu »Menu Main Menu »Adicionar item de menu.
Na aba título digite Documentos para Download e no botão Selecionar do Tipo de item
de menu, escolha Phoca Download. Observe a figura seguinte.
Página 320
Akeeba Backup
Uma das operações mais importantes na manutenção de um site, é o Backup. A
melhor extensão para o Joomla, chama-se “Akeeba Backup” e desde a versão 1.5.x do
CMS, vem “emprestando” funcionalidades ao “core” do Joomla!
Página 321
Figura: Instalando o Akeeba Backup
Página 322
Figura: pós-instalação akeeba
Página 323
6 – Terminado o processo clique no botão “Configurações”. Vamos configurar o
componete para nosso site.
Passe o mouse sobre cada parâmetro e visualize a explicação do que cada um faz.
Abaixo, em “Configuração Avançada”, iremos alterar a opção “Engenharia do
Arquivo”. O padrão é “Formato JPA”, altere para o “Formato zip”.
JPA, assim como ZIP, é um tipo de extensão para comprimir arquivos. Porém, para
extraí-los depois, será necessário um “extrator” específico. No site do livro,
disponibilizei junto com o Akeeba, o programa extrator. Detalhe: “o mesmo funciona
apenas em ambiente Windows”.
Página 324
Figura: painel de controle do akeeba
A figura seguinte retrata a página inicial do projeto com seu template e módulos.
Página 325
Os módulos estão representados pelos círculos na cor verde, o conteúdo pelo círculo
na cor preta e na cor vermelha tem a imagem do template Escola. Caso esteja com
dúvida releia o capítulo 15 Templates.
Página 326
Figura: ítens de menu alterados
Página 327
Exercício 1.5 – Alterando do módulo de login
Página 328
livro, cole CTRL+V no editor do back-end, clique no botão Salvar e Fechar e depois
no botão Fechar;
Página 329
1 – Acesse a área de insumos do website do livro e baixe o arquivo source-offline.zip;
Página 330
Exercício 2 – Alterando o layout do template do Blog
A figura seguinte retrata a página inicial do nosso blog com seu template e módulos. O
template associado para o blog foi o Beez3.
3 – No campo Novo nome do Tema digite blog e clique no botão Copiar Tema; e
Página 331
Figura: clonagem do Template blog
Página 332
Exercício 2.3 – Página incial do Blog
1 - Acesse o back-end e navegue pelo menu superior »Menus »Main Menu » e clique
sobre o ítem de menu Blog;
2 – Na aba Detalhes » altere o tipo de menu para »Artigos »Blog de uma categoria e
selecione a »categoria Blog; e
2 – Clique sobre o nome do módulo copiado para editá-lo. Na aba Módulo » Título
digite Colunistas. Na aba Atribuir Menu » Selecione o ítem de Menu Blog no Main
Menu e todos os ítens de menu do Menu Blog; Acesse o front-end e clique no ítem de
menu Blog. O seu projeto deve estar parecido com a figura seguinte.
Página 333
De acordo com o capítulo 9 do livro, criamos os grupos Blog e Destaques, sendo que o
grupo Destaques é filho do grupo Blog. Criamos o nível de acesso Colunistas,
vinculado ao grupo Destaques. Em caso de dúvidas releia o capítulo 9 do livro e faça
as tarefas propostas.
Página 334
Exercício 2.6 – Ajuste de ACL (Categorias)
2 – Clique sobre o nome do módulo copiado para editá-lo. Na aba Módulo » Título
digite Caminho de migalhas. Em posição selecione position-2.
1 - Acesse o front-end, clique no ítem de menu Blog e depois faça login com o usuário
user1;
2 – Clique no ítem de menu Enviar Artigo, que agora está visível. Observe a figura
seguinte e crie o primeiro post para o Blog. Não se esqueça de:
inserir o Leia Mais após o primeiro parágrafo;
acessar o menu Visualizar e optar por Tela cheia se assim desejar; e
clicar no botão Salvar.
Página 335
Figura: envio de artigo para o Blog
4 – Sempre que estiver logado com usuário que tenha permissão de envio de artigos,
no caso o user1, o ícone de edição estará disponível permitindo que o artigo seja
alterado a qualquer momento. Crie dois artigos nas categorias Tutores e Clounistas,
Página 336
acesse a área do Blog, no front-end e verifique o resultado. Na figura seguinte temos
uma ideia do que você deve visualizar.
2 – Clique sobre o nome Social Buttons e depois no botão Install. Observe a figura
seguinte;
2 – Digite a URL do website e depois cliqe em Get Code. Observe a figura seguinte;
Página 339
6 – Observe o resultado final na área Blog do front-end, de acordo com a figura
seguinte.
Página 340
1 - Acesse o back-end e navegue pelo menu superior »Extensões »Componente
»Akeeba Backup;
O backup gerado com o Akeeba pode ser utilizado a qualquer momento, para recupe-
rar o seu site. O processo é simples e lembra a instalação do Joomla! Vamos aos pas-
sos para recuperação do site:
Publicação do Projeto
Usaremos o arquivo gerado pelo Akeeba Backup para realizarmos a tarefa, por ser
muito prático e rápido este processo. Lembre-se: “Tempo é vida!”
O projeto do livro será publicado no mesmo provedor do site do livro e para tal, cria-
remos um novo diretório, dentro do diretório raiz da conta.
Partindo do princípio que você contratou um provedor e que o mesmo tenha um “CPa-
nel”, vamos ao passo-a-passo.
Página 342
Figura: Banco de dados no provedor
Dependendo do seu plano, inúmeros bancos de dados poderão ser criados. Porém,
todos serão atrelados ao seu domínio/plano. Minha conta é livro560, então, o banco a
ser criado, terá o seguinte nome: livro560_projeto;
» Host – localhost
» Banco de dados – livro560_projeto
» Senha – a senha que criamos para o usuário
» Usuário – livro560_projeto
Página 343
4 – Agora precisamos adicionar o novo usuário, ao banco de dados e permitir que o
mesmo possa fazer qualquer operação. Selecione o usuário e banco e clique no botão
“Adicionar”; e
5 – Dê permissão total ao usuário, ou restringa as operações que não deseja. Fica a seu
critério. Permissão total siginifica que para este banco, o usuário terá poder de “Root”.
1 - Acesse o “CPanel” do seu domínio e clique no botão “Contas de FTP” na aba do-
mínio; e
Página 344
Figura: contas de FTP
Se você não possui site publicado no seu provedor, não será necessário criar diretório
dentro da raiz, pule para o exercício nr 4.
Página 345
Exercício nr 4 – Transferindo o Site para o Provedor
O “CPanel” deve ser utilizado para a transferência de sites compactados, gerados pelo
Akeeba ou não.
Página 346
Figura: Permissões de Diretórios
» Diretórios – 755
» Arquivos – 644
Página 347
Após a descompactação do arquivo, clique no botão “Close” e atualize o endereço do
site, no navegador.
7 – Caso a mensagem “Your host needs to use PHP 5.3.1 or higher to run this version
of Joomla!” apareça, seu provedor não possui a versão do PHP compatível com Jo-
omla! 3.x. Dependendo do provedor, isso não será um problema e bastará criar uma
“flag” no arquivo “htaccess.txt” existente na raiz do Joomla.
Estou usando o Hostgator e no meu caso, basta criar a “flag” com o seguinte conteúdo:
Este arquivo é muito importante e já foi abordado no livro, é fundamental para a segu-
rança, URL’s amigáveis e etc...
Página 348
Figura: tela 2 – restore akeeba
3 – A próxima tela nos apresenta as diretivas de conexão ao banco de dados, que deve-
rão ser preenchidas para o devido “Restore”. Após preencher as informações clique no
botão “Next” do Akeeba;
Página 349
Figura: tela 4 – diretivas do banco de dados
Perceba que o usuário, senha e banco de dados, são os que criamos anteriormente.
Página 350
Figura: restore do banco de dados completo
Página 351
5 – O site está recuperado e pronto para fazer sucesso, remova o diretório de instalação
e aguarde a visualização do front-end.
O processo de publicação de um site com Akeeba é muito mais simples que o processo
de transferir todos os arquivos e diretórios via “FTP” e importar o banco de dados para
o provedor.
Página 352
Figura: site publicado no provedor
Página 353
Capítulo 19 – Programando para a Plataforma Joomla!
Introdução
O nosso projeto foi publicado mas não significa que está terminado. Pelo contrário, a
publicação de um site na internet é o inicio de um ciclo de atualizações constantes e
melhorias que ficaram para trás por cortes orçamentários ou esgotamento de prazo.
Não existe forma errada ou certa de programar, o principal é ter lógica. Alguns pro-
gramam de forma estruturada outros orientado a objeto. Para o Framework Joomla,
devemos programar orientado a objetos.
Aliás, se você conhece um pouco do código dos componentes do Joomla! 1.5, percebe-
rá o quanto o nível de abstração aumentou no Joomla! 3.x. Lembra muito a programa-
ção em Java.
Não é foco deste capítulo ensinar programação, logo, sugiro a leitura de algum livro de
PHP orientado a Objetos para ajudar, se for o caso.
Joomla! Platform
Podemos pensar o CMS Joomla como uma plataforma para criação de aplicativos.
Podemos também ver o CMS Joomla como uma aplicação que fica em cima de algo
ainda mais fundamental, algo que constitui a base sobre a qual tudo é construído no
Joomla. Esse algo é a plataforma Joomla. Já foi chamada de "Joomla! Framework", "as
bibliotecas joomla" e provavelmente muitas outras coisas. O que estamos falando, no
entanto, são os programas dentro da pasta de bibliotecas da distribuição Joomla.
Página 354
Antes da versão 1.5 do joomla, as classes e funções fundamentais da distribuição eram
todas misturadas em um punhado de arquivos dentro da pasta includes. Para o Joomla
1.5, decidiu-se criar uma forma mais limpa e sustentável de manter o código-fonte
organizado, de forma a tornar-se mais profissional, onde os frameworks são invocados
para fornecer a lógica fundamental. Um dos objetivos foi tornar o desenvolvimento de
extensões em Joomla, mais amigável aos profissionais provenientes do java ou do
.NET.
Quando você olhar na pasta de bibliotecas, você verá sete pastas e cinco arquivos PHP
(junto com o arquivo HTML obrigatório). Dentro do arquivo loader.php existe uma
classe e duas funções muito importantes.
A idéia geral é que você use o método jimport () com um caminho separado por ponto
para a biblioteca que deseja usar e, em seguida, a plataforma garante que ele esteja
disponivel para você quando for usá-lo.
Página 355
A pasta Joomla contém todas as bibliotecas que compõem a plataforma Joomla.
A pasta cms foi adicionado na versão 2.5. Ela mantém classes da biblioteca joomla
necessárias ao CMS Joomla, mas não aplicáveis à plataforma joomla. Existem dois
arquivos PHP na pasta libraries/joomla:
factory.php: contém uma classe estática chamada JFactory e fornece uma ma-
neira fácil de obter vários objetos do sistema a partir de uma interface co-
mum; e
Arquivos .php podem ser criados e editados em qualquer programa editor de texto, por
exemplo “bloco de notas” e uma boa prática de programação no Joomla, ou não, é usar
codificação UTF-8 para todos os arquivos.
O código PHP pode ser escrito junto com a linguagem de marcação de texto HTML e
a extensão que identifica arquivos php é a .php. Ex: index.php
O CMS Joomla possui vários arquivos que possuem somente código PHP. Arquivos
PHP são identificados pela tag de abertura <?php que encontram-se no início do
arquivo e de fechamento ?>. Ex: <?php echo $info; ?> Quando o arquivo é composto
apenas de código PHP, não existe a necessidade da tag de fechamento (?>). Aliás, uma
boa prática de programação com PHP é não usar a tag de fechamento para arquivos
que possuam apenas código PHP, tendo em vista que espaços deixados após a tag de
fechamento podem causar erros no processamento do arquivo.
Página 356
Arquivos com PHP e HTML
Espaço em branco
$a=$b+$c;
é equivalente a: $a = $b + $c;
A segunda notação é a preferida porque é mais legível. Além disso, uma única linha de
código pode levar até mais de uma linha de texto. Por exemplo:
$a = $b + $c + $d;
Caracteres importantes
Blocos de código são usados para designar o início e o fim do código para:
» CLASSES (possuem atributos e métodos)
» FUNÇÕES
» DECLARAÇÕES
» INSTRUÇÕES
» SWITCHS
» LOOPS
Parênteses são usados para a instrução condicional » for if (para se) e decla-
rações » switch (mudar), e while (enquanto).
Os comentários podem ser inseridos da seguinte forma:
Página 357
» em uma linha de código - como quaisquer caracteres após " / / "
» blocos de comentários - começam com a linha " / * " e terminam com a li-
nha " * / " Observe o exemplo:
<?php
/* isto é um comentário
e outro comentário
*/
?>
O traço junto ao símbolo maior que ( " -> " ) chamam um método de
classe.
Por exemplo: $name = $db->loadResult();
(*) Chama o método loadResult() do objeto na variável chamada $db
Dois pontos duplos ( " :: " ) fazem a mesma coisa para métodos estáticos.
Por exemplo: $user= Jfactory::getUser();
Página 358
/* e */ Utilzado para blocos de comentário
Traço + sinal de maior que ( “->” ) Chama uma função (também referencia métodos de
classe). Ex: $db->loadResult();
Dois pontos duplos ( " :: " ) Chama um método estático para as classes. Ex:
Jfactory::getDate();
Sinal de igualdade + sinal de maior que ( Conecta um valor associado por um array. Ex: $a =
“=>” ) array('name' => 'Fred');
Aspas simples ou duplas ( ' or “ ) Utilizadas para fechar valores do tipo “strings”.
Pode ser usado qualquer tipo embora aspas duplas
têm comportamento diferente para fechamento de
variáveis
Página 359
valor atribuído)
Sinal de igualdade duplo ou triplo ( “==” Operador lógico de igualdade. O sinal duplo signifi-
ou “===” ) ca que os valores são iguais. O sinal triplo significa
que além de iguais, os valores são do mesmo tipo.
Sinal menor que e maior que (“<”, “>”, Valor lógico menor que, maior que, menor ou igual,
“<=”, “>=” ) maior ou igual
Sinal de interrogação ( “?” ) ou sinal de Usado depois de um operador ternário. Ex: $a = ($b
dois pontos ( “:” ) == $c) ? $d : $e;
Operações Comuns
Página 360
+ (ADIÇÃO)
- (SUBTRAÇÃO)
* (MULTIPLICAÇÃO)
/ (DIVISÃO)
O símbolo ponto ( . ) sozinho antes de uma variável ou com sinal de igualdade
(".=") , significa concatenar (juntar). Por exemplo:
$a = ' $dog ';
$b = 'cat ';
$c = ' $a . $b;
Para definir ou converter um tipo de variável, utilize o tipo entre parênteses como
operador. Por exemplo:
Regras específicas são aplicadas ao converter valores de um tipo para outro. Por e-
xemplo, para conversão de caracteres em números inteiros:
Página 361
Se este primeiro grupo de letras pode ser interpretado como um número inteiro, este é
o valor utilizado. Caso contrário, o valor é zero.
Operadores Lógicos
Página 362
O ecomercial (&& ) e ( AND ) são utilizados para expressões lógicas do
tipo E.
Observe o exemplo:
($a && $b); // a variável $a e a variável $b
($x AND $y); // a variável $x e a variável $y
( $a == $b || $c == $d )
( $a == $b OR $c == $d )
( $a == $b && $c == $d )
( $a == $b AND $c == $d )
Declarações são muito comuns para executar condições no código. A sintaxe básica
pode ser observada abaixo.
IF (Se)
Exemplo 1: IF - ELSE
if ($a == $b) {
/*
*/
$c = d;
$e = $f;
else
Página 363
// caso contrário
$g = $h;
$i = $j;
Em blocos com muitas condições devemos usar elseif para os blocos de código subse-
quentes.
Exemplo 2: IF - ELSEIF
if ($a == $b)
Atenção: Nunca use sinal de igualdade simples ( = ), para comparar valores. A compa-
ração deve ser feita com o sinal de igualdade duplo ( == ). O sinal de igualdade sim-
ples é utilizado para atribuir valor a uma variável.
$a = ‘dog’ ;
$b = ‘cat’ ;
Página 364
If ($a = $b) // foi usado “ = “ ao invés de “ == “ por engano.
Página 365
$link = $db->loadResult();
Você pode usar o operador ternário do PHP para substituir alguns simples comandos
if, da seguinte forma:
Isto atribui a variável $a, o valor da variável $d se a condição for verdadeira. Caso
contrário será atribuído o valor da variável $e.
Declaração ( Switch )
switch ($a)
case 'abc';
$b = $c;
break;
case 'def';
$d = $e;
break;
default:
$f = $g;
break;
Entendendo o código:
Página 366
a) se for 'abc', o valor atribuído a $b será $c;
c) se nenhuma
das condições forem satisfeitas o valor padrão será assumido, neste caso, o valor atri-
buído a $f será $g.
Perceba que a cada teste, o código é interrompido pelo comando break. Ou seja, caso a
primeira condição seja atendida, o bloco da declaração switch é encerrado e o proces-
samento do código continua.
Declarações ( Looping )
Foreach
Loops do tipo foreach são a maneira mais simples de percorrer um array. O bloco de
código do loop é executado uma vez para cada elemento do array. Por exemplo, no
bloco de código abaixo, $groups é um simples array:
Neste exemplo, se $groups não é um array, você receberá um aviso do PHP que o
array está vazio. Neste caso, o loop será ignorado.
Você pode usar loops do tipo foreach com arrays associativos, especificando as vari-
áveis a usar para cada chave e valor.
Observe o exemplo:
Página 367
echo $key . ‘ : ’ . $value . “\n”; // imprime cada par chave/valor
Aqui, $key vai ser a chave para cada elemento da matriz e $valor vai conter o valor
para cada elemento.
For
Observe o exemplo:
// começa com 0, adiciona 1 a cada excução do $i, continua até que a condição não
seja verdadeira
Aqui nós usamos $i como nosso contador e usamos $i++ para incrementá-lo. O loop
será executado até que a condição $i < $len não seja verdadeira.
Do/While
Loops do tipo Do/while permitem processar um bloco de código até que uma condição
não seja verdadeira. Um tipo executa um bloco de código primeiro e depois verifica
uma condição para ver se irá repetí-la.
Observe o exemplo:
do
Página 368
// código no bloco de código deve finalmente satisfazer a condição
Observe o exemplo:
Comando Foreach
O comando foreach é usado para ignorar o restante do bloco de código do para uma
iteração do loop.
if ( $group = 'Public' ) {
echo $group;
Página 369
Sintaxe Alternativa
} else { ?>
echo 'not equal';
Página 370
?>
<?php <?php
// sintaxe alternativa
// sintaxe padrão
<?php foreach ( $groups as $group ): ?>
foreach ( $groups as $group ) <p><?php echo $group; ?></p>
<?php endforeach; ?>
{ <p>This is a <?php echo 'test'; ?></p>
<p>This is a<?php echo 'test'; ?></p>
$a = $b;
// A uma primeira linha tem um espaço entre a e
} test. A segunda não.
?>
?>
Variáveis
Página 371
Todas as variáveis em PHP começam com um cifrão seguido por uma letra ou subli-
nhado. Por exemplo: $minhavariavel ou $_minhavariavel.
Você pode usar números e traços após a letra ou sublinhado. Os nomes de variáveis
são case sensitive, então $minhavariavel $minhaVariavel são diferentes. É muito
fácil enganar-se na referência de uma variável, por conta do case sensitive.
Essa é uma razão pela qual é bom ser consistente na nomeação de variáveis. (por e-
xemplo, usando "capitalize", tipo: $nomeMinhaVariavel.
Declarando Variáveis
Via de regra você não precisa declarar variáveis no PHP, mas deve atribuir-lhes um
valor antes de usá-la em uma expressão. Caso contrário você receberá um aviso, do
PHP, tipo “warning”.
Escopo de Variáveis
Em geral, as variáveis são definidas e o escopo está somente no bloco de código, onde
são definidas. Por exemplo, se uma variável é definida no bloco de código mais exter-
no de um script, o escopo será para o resto do script, incluindo blocos de código conti-
dos, como declarações if e loops.
Arrays (Matrizes)
As matrizes podem ser criadas com ou sem valores iniciais. O código a seguir cria uma
matriz vazia:
$emptyArray = array( );
Página 372
Matrizes podem ser indexadas ou associadas. Matrizes usam números inteiros 0,1,2,
etc... para aceesar elementos, na indexação.
Por exemplo, o código seguinte printa o primeiro elemento no exemplo anterior (note
que o primeiro elemento é 0, e não 1):
Para adicionar um novo elemento ao array indexado, use [], da seguinte forma:
Para adicionar um novo elemento ao array associado, adicione uma nova chave, da
seguinte forma:
Elementos de matriz podem ser de qualquer tipo, incluindo objetos ou outras matrizes.
Por exemplo, este código cria uma matriz indexada, onde os elementos são arrays
associativos:
Página 373
Aqui, $people[0] é a primeira matriz associativa, $people[0][‘name’] dá o nome de
elemento da matriz associativa.
Aqui alguns exemplos de como trabalhar com matrizes com os comandos: count(),
is_array() e isset().
Strings
Strings são variáveis que contém caracteres, incluindo textos, números e símbolos e
PHP possui vários métodos que trabalham com strings.
Por essa razão, você deve usar o método Jstring quando for operar com string que
contenha codificaçãoUTF-8. Veja os exemplos abaixo:
Funções e Métodos
Página 374
Constantes e Diretório Atual
Cuidado ao criar suas extensões, _JEXEC deve ser usada para ter certeza que os arqui-
vos são executados dentro da aplicação Joomla. Uma vez definida, as constantes não
podem ser alteradas. Por convenção, as constantes são definidas com letras maiúscu-
las.
Observe o exemplo:
Observe o exemplo:
Página 375
Capítulo 20 – Componente com_users
Introdução
Muitas vezes a particularidade do projeto nos deixa em uma situação difícil, aquela
sensação de estarmos em uma “sinuca de bico”.
Nem sempre, a melhor saída é procurar no JED uma extensão de terceiros, podemos
customizar um componente já instalado, de preferência nativo, que atenda a demanda.
Usarei como exemplo um projeto que desenvolvi à alguns anos. O cadastro de usuá-
rios, era complexo e na época não encontrei no JED algo que atendesse a demanda,
exceto talvez, componentes de formulários que criariam imensas tabelas no banco de
dados. A solução encontrada foi customizar o componente de usuários do Joomla
1.5.x e desta forma resolver a questão.
No Joomla! 3.x a customização ficou mais fácil, não simplória, sabendo um pouco de
PHP e estando atento aos detalhes da Programação Orientada a Objetos, é possível
customizar um componente nativo e/ou de terceiros desde que distribuído sob licença
GNU/GPL.
Customizando o com_users
Página 376
Anatomia do componente com_users
Página 377
Cadastro de usuário
Edição do cadastro
Exclusão de usuário
Cadastro de grupo
Edição de grupo
Exclusão de grupo
Listagem de usuários
Listagem de grupos
Cadastro de usuário
Login do usuário
Página 378
Relembrar senha
Resetar a senha
Nossa customização deve ser feita nas duas camadas do componente (back-end e
front-end), dessa forma poderemos interagir com os dados na área administrativa e
criar uma nova listagem com nome e CPF. Ou seja, criaremos uma nova visão.
(MVC) Model-view-controller
Gerenciamento de usuários
No Joomla! 3, todos os campos do formulário são passados via XML, mais um avanço
em direção a Web 2.0.
Página 379
Com a IDE de sua preferência abra o arquivo user.xml localizado em administra-
tor/components/com_users/models/forms/. Este manifesto é responsável por apre-
sentar o form de cadastro com seus respectivos campos.
…
Código
Após a linha 19
description="COM_USERS_REGISTER_CPF"
filter="string"
label="COM_USERS_REGISTER_CPF_LABEL"
required="true"
size="12"
/>
Continuação do código
...
Página 380
size="12" – o tamanho do campo é 12, ou seja, a quantidade de caracteres de
um CPF; e
Perceba que a constante, sem tradução para o idioma e o campo do formulário já estão
aparecendo. Se tentarmos fazer o cadastro receberemos uma mensagem do PHP do
tipo:
Página 381
Em ambiente local basta digitarmos http://localhost/phpmyadmin e teremos acesso ao
programa, em ambiente remoto siga as instruções do painel de controle do seu prove-
dor
Página 382
No frame central do phpMyAdmin busque pela tabela #__users e clique sobre o seu
nome para visualizá-la em detalhes. Lembre-se que o Joomla! 3 cria prefixos randômi-
cos para as tabelas durante a instalação. Portanto, substitua o #__ pelo prefixo de
tabelas do seu banco de dados. Na imagem anterior podemos perceber que o prefixo
das tabelas do meu projeto é h0gpe.
Após as colunas temos uma barra de ferramentas que permite criar uma nova, basta
escolher o local e clicar no botão executar.
Perceba na imagem que estamos adicionando uma coluna depois da coluna username.
Página 383
A coluna cpf foi criada e podemos continuar a customização de nosso componente.
O novo campo deve ser inserido na classe JUser que estende a classe Jobject. O ar-
quivo a ser customizado é o user.php localizado em /libraries/joomla/user/.
…
Código
Após a linha 50
/**
* The CPF
* @var string
*/
continuação do código
…
O objetivo desse registro é verificar se o campo CPF foi deixado em branco, um tipo
de validação a nível de servidor e se existem CPF’s duplicados no banco. A validação
do CPF e verificação de duplicidade devem ser inseridos na classe JTableUser que
estende a classe JTablet. O arquivo a ser customizado é o user.php localizado em
/libraries/joomla/table/user/.
Página 384
…
Código
if (trim($this->cpf) == '')
$this-
>setEr-
ror(JText::_('JLIB_DATABASE_ERROR_PLEASE_ENTER_A_USER_CPF'));
return false;
continuação do código
...
…
Código
Página 385
// CHECA DUPLICIDADE DE CPF
$query = $this->_db->getQuery(true);
$query->select($this->_db->quoteName('id'));
$query->from($this->_db->quoteName('#__users'));
$this->_db->setQuery($query);
$this->setError(JText::_('JLIB_DATABASE_ERROR_CPF_INUSE'));
return false;
continuação do código
…
Página 386
Validação do CPF com Javascript
Poderíamos criar uma função javascript para validar o CPF digitado, com o código
abaixo:
<script type="text/javascript">
cpf.replace(/[^\d]+/g,'');
if(cpf == '') {
return false;
if (cpf.length != 11 ||
cpf == "00000000000" ||
cpf == "11111111111" ||
cpf == "22222222222" ||
cpf == "33333333333" ||
cpf == "44444444444" ||
cpf == "55555555555" ||
cpf == "66666666666" ||
cpf == "77777777777" ||
Página 387
cpf == "88888888888" ||
cpf == "99999999999")
return false;
// Valida 1o digito
add = 0;
rev = 0;
if (rev != parseInt(cpf.charAt(9)))
return false;
// Valida 2o digito
add = 0;
Página 388
add += parseInt(cpf.charAt(i)) * (11 - i);
rev = 0;
if (rev != parseInt(cpf.charAt(10)))
return false;
</script>
A solução é usar a tabela UNICODE (código em notação hexadecimal) , que pode ser
útil no futuro ao lidarmos com javascript. Para usá-la é simples, basta adicionar \x
acompanhado da coluna identificadora. A coluna é case insensitive. Ou seja: E1 é
igual a e1.
Observe o exemplo:
Página 389
Figura: tabela UNICODE
Após criarmos a coluna cpf no banco de dados chegou a hora de testar o que foi feito
até agora, cadastrando um novo usuários através do back-end do site.
Página 390
Perceba na imagem acima que um novo usuário foi cadastrado e o campo cpf foi pre-
enchido.
No banco de dados podemos observar que o valor digitado no campo cpf, para o novo
usuário, está gravado na coluna cpf da tabela #__users.
O usuário “admin” foi criado durante a instalação do Joomla e por isso não possui cpf
gravado na base. Basta editar o seu perfil e incuir o cpf para que a devida gravação
ocorra com sucesso.
Clicando no botão Salvar e Fechar, após o cadastro do novo usuário, você perceberá
que o CPF não está aparecendo.
O componente usa três templates para mostrar o retorno da consulta aos registros gra-
vados no banco de dados:
Página 391
…
Código
Após a linha 54
</th>
continuação do código
...
<td class="center">
</td>
Continuação do código
...
Perceba que o componente usa tabelas para montar o template, mais um ponto de des-
taque para o recurso de Override de Templates que surgiu com o Joomla! 1.6 e foi
aprimorado agora no Joomla! 3.x.
Após a linha 127 – criamos uma nova coluna e recuperamos o registro cpf, da
tabela #__com_users.
Página 392
Agora o campo cpf está integrado à visão de listagem de registros.
Formulário de cadastro
Página 393
Após a linha 29
description="COM_USERS_REGISTER_CPF"
filter="string"
label="COM_USERS_REGISTER_CPF_LABEL"
required="true"
size="12"
/>
Continuação do código
...
Perceba que a constante, sem tradução para o idioma e o campo do formulário já estão
aparecendo e podemos efetuar o cadastro do novo usuário normalmente.
Tradução de Constantes
Página 394
Navegue pelo menu superior » Extensões » Gerenciador de Idiomas » Sobre-
posições;
Repita o processo para as outras constantes que foram criadas durante a customização
do componente, a saber:
Página 395
JLIB_DATABASE_ERROR_PLEASE_ENTER_A_USER_CPF » Texto:
Digite o nr do CPF
Tradução de Constantes
Página 396
no campo Texto, digite CPF
Repita o processo para o idioma inglês e todos os outros que possuir no seu projeto.
Este plugin é nativo no Joomla! 3.x e trabalha em sincronia com o com_users aumen-
tando os campos comuns do cadastro. Para habilitar o plugin, navegue pelo menu
superior » Extensões » Gerenciador de Plugins.
Página 397
Figura - cadastro com plugin habilitado
Perceba que na imagem acima, temos um link para os Termos de Serviço, habilitado.
Página 398
habilite o plugin e clique no botão Salvar e Fechar.
No front-end do site clique na opção de criar uma conta e observe os vários campos
que surgiram. No próprio plugin, na aba “Opções Básicas”, podemos escolher quais os
campos serão ou não mostrados. No exemplo, deixarei apenas Endereço 1, cidade e
CEP. Observe a imagem abaixo. Após configurar o seu plugin Usuário – Perfil, algo
parecido deve ser visualizado.
Página 399
Figura - cadastro do user 1 efetuado com sucesso
Página 400
Estrutura das Tabelas
Vamos trabalhar com a inserção do campo CPF antes do campo Endereço 1 do plugin
Usuário – Perfil. Logo, iremos customizar o manifesto xml do plugin, que está
localizado em seusite/plug-ins/user/profile/profiles/profile.xml
Figura: Manifesto.xml
Página 401
Abra o arquivo na sua IDE preferida e antes do campo address1 insira o campo CPF de
acordo com a imagem abaixo.
Ainda que em um primeiro momento possa parecer um risco à segurança, permitir que
o usuário crie qualquer campo no formulário de registro, vale lembrar que o próprio
Joomla! possui várias regras de segurança para impedir ataques, por exemplo do tipo
SQL INJECTION, muito utilizados em formulários.
Página 402
Figura - campo cpf sem tradução
Navegue pelo menu superior Extensões -> Gerenciador de Idiomas -> Sobreposições.
No filtro, escolha Português (Brasil) Site e clique no botão novo. Em constante do
idioma cole a constante utilizada no description do manifesto xml. Em texto, digite o
seu significado. Faça o mesmo processo para o campo label e clique no botão Salvar e
Fechar. Este processo deve ser repetido para todas as inserções efetuadas no plugin.
A validação dos dados digitados no novo campo será garantida por regras existentes
ou ainda por novas regras inseridas em diretório específico do site. Em nosso exemplo,
usaremos uma regra de validação e Autenticação de CPF criada pelo joomleiro Bruno
Página 403
Batista e disponibilizada sob licença GNU/GPL, em
https://github.com/joomlapro/joomla-rules/blob/master/cpf.php
O destaque da regra fica por conta da Autenticação do CPF, ou seja, você precisa
digitar um CPF verdadeiro para que o cadastro prossiga.
2) Abra sua IDE preferida e altere o manifesto xml do plugin Usuário – Perfil, de
acordo com o abaixo demonstrado. As alterações estão em vermelho:
<field
name="cpf"
type="text"
class="inputbox cpf"
id="cpf"
validate="cpf"
description="PLG_USER_PROFILE_FIELD_CPF_DESC"
label="PLG_USER_PROFILE_FIELD_CPF_LABEL"
size="14"
maxlength="14"
/>
Página 404
Figura - regra para validação e autenticação de CPF
No front-end do site tente cadastrar um novo usuário, sem inserir um CPF válido.
Experimente utilizar um CPF qualquer, caracteres do tipo “strings” e tudo o mais o
que sua imaginação permitir para observar a regra em ação. Para obter êxito no
Página 405
cadastro, o CPF deve existir e ser digitado no formato: 3números.3números.3números-
2números. Ex:111.111.111-11
Acesse o back-end e navegue pelo menu superior Usuários -> Gerenciador de Usuários
-> Editar Usuário. Lembre-se de fazer override para a constante do CPF, observando
que o escopo agora é administração e não site.
Página 406
Acesse http://www.livrodejoomla.com.br/insumos/j35j35/?#a20 para baixar o site de
estudo com instalador, para verificação e análise do funcionamento e alterações abor-
dadas neste capítulo.
Esta é uma alternativa “mais trabalhosa” para inserir um campo de CPF no formulário
de cadastro. A mais simples é utilizar a opção de “campo customizado”, que foi abor-
dado anteriormente no livro.
Página 407
Capítulo 21 – Override de Templates
Introdução
Overrides ou substituições de layout são funcionalidades nativas do CMS, que
permitem alterar a camada de visão de determinada extensão. Joomla nos permite
substituir o layout das seguintes extensões e/ou ítens:
Desta forma, o template que clonamos no capítulo 15 do livro, será o padrão do site.
Página 408
Agora, altere para a aba Templates e clique no hiperlink “Details and Files” do templa-
te andromeda para acessarmos a visão de gerenciamento de customização de template.
Página 409
1. Copy Template – esse botão permite copiar qualquer template. Caso tenha
dúvida releia a parte em que copiamos o template Protostar e renomeamos pa-
ra andromeda, no capítulo 15. Perceba que clonamos o template;
4. New File – esse botão permite criar um novo arquivo para o template. Na cai-
xa de seleção escolhemos o File Type e no campo File Name nomeamos o ar-
quivo.
Podemos ainda fazer o upload de um arquivo que esteja em nossa máquina,
para o servidor do site;
Página 410
Figura – criando novo arquivo
7. Create Overrides – essa aba lista todas as extensões e permite a criação dos
overrides; e
Página 411
Figura – criando novo override de módulo
Página 412
Figura – criando novo override de layout
Para criar um override de módulo, basta clicar sobre o nome do módulo, na aba Create
Override e aguardar a mensagem de sucesso. Na figura seguinte utilizo o módulo últi-
mos artigos (mod_articles_latest) para exemplificar o processo.
Página 413
Customizando o override do Módulo
Com esse simples clique, todos os diretórios e arquivos necessários foram copiados
para o diretório /html do template. Clicando no botão Manager Folders podemos vi-
sualizar o diretório criado.
O novo editor inline do Joomla! 3.x é show de bola. Linhas numeradas, tags coloridas
e fechamento automático de tags abertas o deixam bem próximo de uma IDE. Porém,
se você optar por sofrer, fique à vontade. Na figura seguinte temos o arquivo aberto
no Notepad++.
Página 414
Observe na figura seguinte a forma padrão (sem override), do módulo
mod_articles_latest.
Perceba que temos apenas o título dos artigos. Que tal apresentarmos além do título,
um pequeno texto de introdução?
Página 415
Perceba que é um arquivo simples e com poucas linhas de código. A linguagem de
marcação de texto HTML alterna com a linguagem de programação PHP. Isto é uma
característica comum aos scripts (arquivos) PHP.
Em seguida é montada uma lista desordenada através da tag HTML “<ul> </ul>”;
O próximo passo é usar o comando “foreach” para criar um loop e instanciar as variá-
veis $list, $item e $link; e
Vamos fazer uma pequena alteração no arquivo apenas para quebrar o gelo. Quel tal
inserirmos um título com a tag HTML <h1>, antes do instanciamento das variáveis?
Veja na imagem seguinte, o pedaço de código inserido. Lembre-se que o arquivo cus-
tomizado foi o default.php do template andromeda. Ou seja, o que está em templa-
tes/andromeda/html/mod_articles_latest/.
Este é apenas um exemplo simples, para quebrar o gelo. Lembre-se que você poderia
fazer qualquer coisa, ou seja: inserir uma imagem, alterar cores, inserir uma tabela(não
recomendado), enfim, customizar da forma que você bem desejar.
Página 416
Acessando o front-end do site podemos observar o resultado da inserção da tag <h1>
no template do módulo e temos certeza que o Joomla está utilizando o arquivo de
override.
Página 417
Atualize o front-end do site e visualize o resultado na tela. O comando var_dump
“printa” na tela, todos os dados existentes na variável $item.
O código do layout padrão $item-> title, nos retorna o campo título dentro do objeto
$item. A saída também nos diz o tipo de cada campo (string, inteiro, e assim por dian-
te), o seu valor, e seu comprimento. Enfim, temos mais campos relacionados ao artigo
disponível no layout padrão, basta usá-los se necessário.
O objetivo final do nosso exemplo é apresentar além do título, a primeira parte de cada
artigo e para isso precisamos de um campo introtext. Este campo armazena todo o
texto de um artigo até o Leia mais, caso exista. Se o artigo não possuir Leia mais, ele
armazena todo o texto do artigo. Nossa primeira idéia seria usar a função substr PHP,
que nos permite encontrar parte de uma string com base na posição.
Página 418
A imagem seguinte demonstra a customização do arquivo de override default.php com
a inserção do código da linha 28
Perceba que o módulo está apresentando o texto de introdução seguido de “...”, além
do título do artigo (2) e para retirar o texto Override de Módulo (1), basta retirar a tag
<h1> inserida durante a customização do default.php.
Página 419
À primeira vista, parece ser o que queremos. Entretanto, se algum dos artigos possuí-
rem uma imagem no início, teremos um problema na visualização. Como resolver?
Usando a função do PHP, strip_tags que retira todas as tags do HTML e PHP da
variável setada. Abra o arquivo de override, default.php e altere o trecho de código
adicionado inserindo a função strip_tags. Observe as imagens seguintes:
Estamos quase lá, agora o problema está relacionado ao corte de “palavras” que são
retornadas. A solução é usar o método truncate() que está localizado no arquivo
string.php em libraries/joomla/html/html/. A customização final da linha 28 do arquivo
de override default.php deve ficar da seguinte forma:
Página 420
Carregando o módulo dentro de um artigo
Perceba que se trata de um artigo, mas estamos usando o plugin loadmodule para
inserir o módulo no corpo do artigo. O comando {loadmodule mod_articles_latest},
diz ao Joomla para inserir o módulo articles_latest, neste ponto do corpo do artigo.
Clique sobre o nome do módulo copiado para abrir o modo edição e altere o parâmetro
Alternative Layout, para Padrão. Na imagem seguinte estou publicando o módulo
clonado. Perceba que ele possui o mesmo nome do módulo que serviu de base.
Página 421
Figura: Editando o módulo
Agora, acesse o front-end do site para visualizar o artigo criado. Se você o “setou”
como destaque ele estará na página inicial. Caso contrário, clique sobre o título do
artigo no módulo Últimas Notícias. O artigo deve estar parecido com a figura seguinte:
A primeira parte da tela (1) é a primeira parte do artigo, antes da tag {loadmodule}. A
parte inferior da tela (2) é o módulo Últimas Notícias listando os artigos, de acordo
com os parâmetros escolhidos no back-end. Perceba que o layout original apresenta o
resultado em uma simples lista de títulos de artigos, onde os títulos são links para o
conteúdo dos artigos.
Ficou mais fácil comparar a apresentação do override com a padrão do módulo, con-
corda? Agora, basta dar asas à sua imaginação e customizar qualquer módulo do Jo-
omla.
Override de Layouts
Lembre-se que os parâmetros relacionados a artigos são acionados pelo botão Opções
que pode ser visualizado no menu superior » Artigos. Todos os itens de saída (autor,
título, categoria e etc.) são configurados nesse botão.
São vários os tipos de overrides de layouts a serem criados. Com um simples clique
em cada opção, todos os diretórios e arquivos necessários foram copiados para o dire-
tório /html do template. Clicando no botão Manager Folders podemos visualizar o
diretório criado (/html/layouts/joomla/). Na imagem seguinte temos a demonstração da
disposição dos novos diretórios.
Página 423
Na imagem seguinte mostro a edição do arquivo block.php com o editor do Joomla.
Lembre-se que você pode usar qualquer IDE, mas, o editor inline do back-end atende
a demanda tranquilamente.
Override de Componentes
Página 424
Figura – override com_content
Podemos criar vários tipos de overrides e irei optar pelo override de article. Dessa
forma iremos alterar a apresentação de determinado artigo. Basta clicar sobre o nome
article para criar o override. Na figura seguinte temoa a mensagem de sucesso no pro-
cesso.
Página 425
Clique sobre o arquivo default.php e depois no botão . Na
caixa aberta no modal, renomeie o arquivo. Escolhi novolayout para nomear o arquivo,
fim manter uma padronização com o override de módulo. Porém, você pode usar qual-
quer nome. Faça a mesma operação com o arquivo default.xml. Neste caso o nome
deve ser semelhante ao arquivo .php. No meu caso, novolayout.xml.
Abra uma tag div e insira o trecho da linha 187 dentro da mesma.
Vamos criar uma classe CSS para nossa div e inserir um vídeo do youtube no código-
fonte do arquivo. Altere o código iniciado por <div> e terminado em </div>, por:
<div
style="background:url(templates/andromeda/html/com_content/article/images/te
rmuso.png)no-repeat 560px 50px;">
Página 426
<?php echo $this->item->text; ?>
</div>
Essa operação visa permitir a criação de um novo item de menu no Joomla que irá
apontar para o override de artigo.
Testando o Override
Página 427
Perceba que a constante não foi traduzida, mas isso não é novidade para o meu atento
leitor. Não está tão atento assim? Tudo bem, releia o capítulo 11 Gerenciamento de
Idiomas, com demonstração da criação do override para a constante deste capítulo.
Página 428
Capítulo 22 – Criando um novo plugin
Introdução
O nosso componente com_users foi customizado e temos um novo layout de cadastro.
Para completarmos o projeto iremos criar um plugin para validar o cadastro de usuá-
rios do nosso site.
Criaremos um checkbox de idade e o plugin irá verificar se o mesmo foi clicado pelo
usuário. Caso o retorno seja falso, ou seja, se o usuário não marcar o checkbox, o pro-
cesso de registro será interrompido.
Quando enviamos dados usando o método POST, os valores do formulário são guar-
dados na variável global do PHP chamada $_REQUEST. Os valores são guardados
em um array associativo, onde a chave para a matriz é o atributo nome de cada ele-
mento de entrada. Se um elemento de entrada não possui um nome para o atributo, ele
não salva. Assim, precisamos adicionar nomes de atributos para o novo campo do tipo
checkbox, do formulário.
Plugin ValidaIdade
Página 429
Existem várias formas de criar extensões no Joomla e optaremos pelo método conhe-
cido por reaproveitamento de código, muito utilizado na Programação Orientada a
Objetos.
Vamos ao passo-a-passo:
Copie o arquivo index.html (em branco) de qualquer outro plugin e cole den-
tro do subdiretório validaidade;
Página 430
Arquivo validaidade.xml
<name>plg_user_validaidade</name>
<creationDate>Apr 2013</creationDate>
<authorEmail>cout45@gmail.com</authorEmail>
<authorUrl>www.juliocoutinho.com.br</authorUrl>
<version>3.0.3</version>
<description>PLG_USER_VALIDAIDADE_XML_DESCRIPTION
</description>
<files>
<filename plugin="validaidade">validaidade.php</filename>
<filename>index.html</filename>
<folder>forms</folder>
</files>
<languages folder="admin">
<language tag="en-GB">language/en-GB/en-
GB.plg_user_validaidade.ini</language>
Página 431
<language tag="en-GB">language/en-GB/en-
GB.plg_user_validaidade.sys.ini</language>
<language tag="pt-BR">language/pt-BR/pt-
BR.plg_user_validaidade.ini</language>
<language tag="pt-BR">language/pt-BR/pt-
BR.plg_user_validaidade.sys.ini</language>
</languages>
<config>
<fields name="params">
<option value="1">JShow</option>
</field>
</fieldset>
</fields>
</config>
</extension>
Página 432
Arquivo validaidade.php
<?php
/**
* @version $Id$
* @copyright Copyright (C) 2000 - 2013 Júlio Coutinho. All rights re-
served.
*/
defined('JPATH_BASE') or die;
jimport('joomla.plugin.plugin');
if ($form->getName() != 'com_users.registration') {
return;
$this->loadLanguage();
// Load our custom registration xml into the user registration form.
$form->loadFile(dirname(__FILE__).'/forms/form.xml');
Página 433
$form->setFieldAttribute('old_enough', 'required', 'true');
Página 434
Discover (Descobrir)
Perceba que nosso plugin foi listado e agora, basta marcar o checkbox e clicar
no botão Instalar, localizado à esquerda e acima, para procedermos a instala-
ção do mesmo.
Caso não tenha aparecido para você, experimente “Excluir o Cache” e tente
de novo.
Página 435
Copie (ctrl+c) todos os arquivos do plugin validaidade que estão distribuídos
dentro dos diretórios plugin/user/validaidade, administrator/language/pt-BR e
administrator/language/en-GB;
Página 436
Testando o plugin ValidaIdade
Acesse o front-end do site e teste nosso plugin tentando efetuar um cadastro sem mar-
car o checkbox de idade.
Chegamos ao final da quarta edição do livro, release Joomla! 3.5. Espero ter consegui-
do o objetivo maior lançado com este projeto que foi “Ajudar o usuário na criação,
configuração e publicação de um site com Joomla! 3.x”.
Sucesso!!!
Página 437
Capítulo 23 – Boas práticas de segurança e blindagem do seu
site desenvolvido com Joomla!
Introdução
Joomla! é extremamente seguro e sabemos que 90% dos ataques bem sucedidos ocor-
rem na máquina de hospedagem, tendo em vista a desatualização de algum insumo do
LAMP. Porém, os 10% restantes, de ataques bem sucedidos, ocorrem por falha de
operação.
Neste capítulo, iremos aprender boas práticas de segurança que aliadas à instalação de
algumas extensões indispensáveis à segurança de nosso projeto, irão ajudar na blinda-
gem de nosso site.
Web Server
O local menos provável de ser invadido e responsável pelo menor índice de ataque é o
servidor web. Ambos os servidores Apache e Microsoft IIS são responsáveis pela
hospedagem de literalmente milhões de sites com poucas brechas para invasões. Em-
bora essa adoção generalizada não possa evitar a possibilidade de um problema de
segurança, os servidores são muito bem depurados e protegidos.
É improvável que o Apache seja o vetor de ataque, uma vez que a execução de scripts
na web (como o PHP ou PERL), não é tratado pelo servidor da web em si, mas sim um
plug-in ou componente. Os motores de execução de script são talvez os mais vulnerá-
Página 438
veis ao ataque diretamente, um servidor Web Apache em si não corre este perigo.
No entanto, existem alguns lugares onde você pode adicionar um pouco mais de segu-
rança. O servidor Web Apache é muito seguro por padrão, porém ele pode ficar bem
inseguro se for mal configurado. Portanto, certifique-se de ter certeza do que está fa-
zendo e faça uma avaliação cuidadosa antes de editar qualquer uma das configurações
padrão.
Com o servidor Apache, as permissões de arquivo e pasta podem ser armazenadas em
um arquivo chamado .htaccess. Permissão de acesso, senha de proteção, bloqueio do
PHP, e outras configurações de segurança podem ser especificadas no arquivo. Devido
à importância deste arquivo o Apache inclui (por padrão) uma configuração para tor-
nar o arquivo inacessível fora do sistema ou através de um navegador.
Arquivos .htaccess O que eles são / como usá-los
Os arquivos .htaccess (ou "arquivos de configuração distribuída") oferecem um meio
de fazer mudanças nas configurações por diretório.
Quando (não) usar arquivos .htaccess
No geral, você nunca deve usar arquivos .htaccess a não ser que você não tenha acesso
ao arquivo de configuração principal do servidor. Existe, por exemplo, um erro de
concepção que dita que a autenticação de usuários sempre deve ser feita usando os
arquivos .htaccess. Esse simplesmente não é o caso. Você pode usar as configurações
de autenticação de usuário no arquivo de configuração principal do servidor, e isso é,
de fato, a maneira mais adequada de se fazer as coisas.
Arquivos .htaccess devem ser usados em casos onde os provedores de conteúdo do site
precisem fazer mudanças na configuração do servidor por-diretório, mas não tem aces-
so root ao sistema do servidor. Caso o administrador do servidor não esteja disposto a
fazer mudanças freqüentes nas configurações do servidor, é desejável permitir que os
usuários possam fazer essas mudanças através de arquivos .htaccess eles mesmos. Isso
é particularmente verdade, por exemplo, em casos onde provedores estão fornecendo
múltiplos sites para usuários em apenas uma máquina, e querem que seus usuários
possam alterar suas configurações.
No entanto, de modo geral, o uso de arquivos .htaccess deve ser evitado quando possí-
vel. Quaisquer configurações que você considerar acrescentar em um arquivo
Página 439
.htaccess, podem ser efetivamente colocadas em uma seção <Directory> no arquivo
principal de configuração de seu servidor.
Existem duas razões principais para evitar o uso de arquivos .htaccess.
A primeira delas é a performance. Quando AllowOverride é configurado para permitir
o uso de arquivos .htaccess, o Apache procura em todos diretórios por arquivos
.htaccess. Logo, permitir arquivos .htaccess causa um impacto na performance, mesmo
sem você usá-los de fato! Além disso, o arquivo .htaccess é carregado toda vez que um
documento é requerido.
Além disso, note que o Apache precisa procurar pelos arquivos .htaccess em todos os
diretórios superiores, para ter o complemento total de todas as diretivas que devem ser
aplicadas. (Veja a seção como as diretrizes são aplicadas.) Então, se um arquivo de um
diretório /www/htdocs/example é requerido, o Apache precisa procurar pelos seguintes
arquivos:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
Assim, para cada acesso de arquivo fora desse diretório, existem 4 acessos ao sistema
de arquivos adicionais, mesmo que nenhum desses arquivos estejam presentes. (Note
que esse só será o caso se os arquivos .htaccess estiverem habilitados para /, o que
normalmente não é o verdade.)
A segunda consideração é relativa à segurança. Você está permitindo que os usuários
modifiquem as configurações do servidor, o que pode resultar em mudanças que po-
dem fugir ao seu controle. Considere com cuidado se você quer ou não dar aos seus
usuários esses privilégios. Note também que dar aos usuários menos privilégios que
eles precisam, acarreta em pedidos de suporte técnico adicionais. Tenha certeza que
você comunicou aos usuários que nível de privilégios você os deu. Especificar exata-
mente o que você configurou na diretriz AllowOverride, e direcioná-los para a docu-
mentação relevante, irá poupá-lo de muita confusão depois.
Perceba que é exatamente equivalente colocar o arquivo .htaccess em um diretório
/www/htdocs/example contendo uma diretriz, e adicionar a mesma diretriz em uma
seção Directory <Directory /www/htdocs/example> na configuração principal do seu
servidor:
Arquivo .htaccess em /www/htdocs/example:
Conteúdo de um arquivo .htaccess em /www/htdocs/example
AddType text/example .exm
Seção do seu arquivo httpd.conf
Página 440
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>
No entanto, adicionando isso ao seu arquivo de configuração do servidor resultará em
uma menor perda de performance, na medida que a configuração é carregada no mo-
mento da inicialização do servidor, ao invés de toda que que um arquivo é requerido.
O uso de arquivos .htaccess pode ser totalmente desabilitado, ajustando a diretriz Al-
lowOverride para none:
Exemplo: AllowOverride None
Exemplo de Autenticação
Se você veio diretamente à esta parte do livro para aprender como fazer autenticação, é
importante notar uma coisa. Existe uma concepção errada, mas muito comum, de que é
necessário o uso de arquivos .htaccess para implementar a autenticação por senha. Este
não é o caso. Colocar diretrizes de senha em uma seção <Directory>, no seu arquivo
principal de configuração do servidor, é a melhor maneira de se implementar isto, e os
arquivos .htaccess devem ser usados apenas se você não tem acesso ao arquivo princi-
pal de configuração do servidor. Veja acima a discussão sobre quando você deve e
quando não deve usar os arquivos .htaccess.
Dito isso, se você ainda acredita que precisa usar um arquivo .htaccess, a configuração
a seguir provavelmente funcionará para você.
Conteúdo de um arquivo .htaccess:
AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins
Note que AllowOverride AuthConfig precisa estar habilitado para que estas diretrizes
tenham efeito.
Por favor veja o tutorial de autenticação para uma discussão mais completa sobre au-
tenticação e autorização.
Exemplo de Server Side Includes
Outro uso comum de arquivos .htaccess é ativar o Server Side Includes para um diretó-
rio em particular. Isto pode ser feito com as seguintes diretrizes de configuração, colo-
cadas em um arquivo .htaccess no diretório desejado:
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
Página 441
Note que ambos AllowOverride Options e AllowOverride FileInfo precisam estar
habilitados para essas diretrizes terem efeito.
Por favor veja o tutorial de SSI para uma discussão mais completa sobre server-side
includes.
Exemplo de CGI
Finalmente, você pode querer que um arquivo .htaccess permita a execução de pro-
gramas CGI em um diretório em particular. Isto pode ser implementado com as se-
guintes configurações:
Options +ExecCGI
AddHandler cgi-script cgi pl
Alternativamente, se você desejar que todos os arquivos de um dado diretório, sejam
considerados programas CGI, isso pode ser feito com a seguinte configuração:
Options +ExecCGI
SetHandler cgi-script
Note que ambos AllowOverride Options e AllowOverride FileInfo precisam estar
habilitados para que essas diretrizes tenham quaisquer efeito.
Por favor veja o tutorial de CGI tutorial para uma discussão mais completa sobre pro-
gramação e configuração CGI.
Resolvendo Problemas
Quando você adiciona diretrizes de configuração em um arquivo .htaccess, e não ob-
tém o efeito desejado, existe uma série de pontos que podem estar errados.
Mais comumente, o problema é que a diretriz AllowOverride não está habilitada corre-
tamente para que as suas diretrizes de configurações sejam honradas. Verifique se
você não possui AllowOverride None ajustado para o escopo do arquivo em questão.
Um bom meio de testar isso é colocar "lixo" em seu arquivo .htaccess e recarregá-lo.
Se não for gerado nenhum erro do servidor, certamente você tem AllowOverride None
habilitado.
Se, por outro lado, você está obtendo erros do servidor ao tentar acessar documentos,
verifique o registro de erros do Apache. Ele provavelmente irá indicar que a diretriz
usada em seu arquivo .htaccess não é permitida. Alternativamente, ele pode acusar
erros de sintaxe que você terá que corrigir.
fonte: Apache
No Windows, a interface do explorer não irá permitir que você renomeie um arquivo
para uma extensão vazia . Por exemplo : .algumacoisa ( o . antes do noem do arquivo
indica que ele é oculto e somente irá funcionar em sistemas operacionais baseados no
UNIX, que é o caso do GNU/LINUX. Por isso que o .htaccess não funciona no win-
Página 442
dows pois a extensão não existe para o sistema. Você pode adicionar uma diretiva para
o arquivo de configuração do Apache, para obter acesso a um arquivo com nome dife-
rente ou você pode abrir a janela do prompt de comando e use o comando REN.
O método mais provável de um hacker invadir seu website será obtendo informações
sobre seu sistema. Pode parecer óbvio mas fornecer informações para um hacker não é
uma boa idéia, mas infelizmente é isso que ocorre e você acaba fornecendo informa-
ções adicionais, tais como o número da versão do Apache, sistema operacional, e as-
sim por diante, sem saber. Grande parte desta informação é fornecida pelo "ServerSig-
nature" sempre que o servidor gera uma página (tal como um servidor de mensagem de
erro).
Você deve adicionar uma diretiva que visa fornecer informações a menos, assim:
ServerTokens Prod
Seu arquivo de configuração padrão do Apache deve conter uma entrada para negar
acesso ao arquivo .htaccess através de um navegador.
<FilesMatch "^\.ht">
order allow, deny
Deny from all
</FilesMatch>
Página 443
Este código indica ao Apache para negar acesso do navegador a todos os arquivos
.htaccess (e arquivos .htpasswd, também). Para negar o acesso aos arquivos de log,
você pode copiar a seção anterior e, em seguida, modificar a declaração FilesMatchs
como esta:
<FilesMatch ~ "\.log$">
Para negar o acesso do browser para um diretório específico, você precisará usar o
elemento de Diretório como este:
SGBD
MySQL usa segurança baseada em Lista de Controle de Acesso (ACL) para todas as
conexões, consultas, e outras operações que o usuário pode tentar realizar. Há também
suporte para conexões criptografadas (SSL-encrypted) entre clientes MySQL e servi-
dores. Muitos dos conceitos discutidos aqui não são específicos do MySQL, as mes-
mas idéias gerais aplicam-se, em conjunto, a quase todas as aplicações.
Página 445
Não escolha senhas de dicionários. Existem programas especiais para quebrar
senhas. Mesmo senhas como "xfish98" são muito ruins. Muito melhor é "du-
ag98", que contém a mesma palavra "peixe", mas foi digitado uma chave para
a esquerda em um teclado padrão QWERTY.
Outro método é utilizar uma senha que é tomada a partir do primeiro caracter
de cada palavra em uma frase (por exemplo, "Maria tinha um cordeiro peque-
no" resulta em uma senha de "Mtucp"). A senha é fácil de lembrar e digitar,
mas difícil de adivinhar para quem não conhece a frase.
Invista em um firewall. Isto protege-o de, pelo menos, 50% de todos os tipos
de exploits em qualquer software. Ponha o MySQL atrás do firewall ou de
uma zona desmilitarizada (DMZ).
O MySQL utiliza a porta 3306 por padrão. Esta porta não deve estar acessível
a partir de HOST não confiável. Nota: Mais uma vez o HOST é fundamen-
tal. Outra forma simples de verificar se há ou não uma porta aberta para seu
MySQL é tentar o seguinte comando a partir de uma máquina remota, onde
server_host é o nome de host ou número IP do hospedeiro em que seu servi-
dor MySQL é executado: shell> telnet server_host 3306 Se você receber
uma ligação e alguns caracteres, a porta está aberta, e deve ser fechada no seu
firewall ou roteador, a menos que você realmente tenha uma boa razão para
mantê-la aberta. Se o telnet não recebe um retorno ou a conexão for recusada,
a porta está bloqueada, que é o que esperamos.
Não confie em quaisquer dados inseridos pelos usuários de suas aplicações.
Eles podem tentar enganar seu código através de SQL Injection que consiste
da introdução de caracteres especiais ou seqüências em formulários Web,
URLs, ou o que quer que seja através de formulários disponibilizados por vo-
cê ou pela aplicação. Tenha certeza de que a sua aplicação continua segura se
um usuário digita algo como "DROP DATABASE mysql;". Este é um e-
xemplo extremo, mas grandes vazamentos de segurança e perda de dados po-
dem ocorrer como resultado de hackers utilizando técnicas semelhantes, se
não se preparar para eles.
Um erro comum é o de proteger apenas os dados com valores string. Lembre-
se de verificar dados numéricos também. Se um aplicativo gera uma consulta
como SELECT * FROM tabela WHERE ID = 234 quando um usuário digitar
o valor 234, o usuário pode digitar o valor 234 ou 1 = 1 e força a aplicação a
executar a seguinte consulta: SELECT * FROM tabela WHERE ID = 234 ou
1 = 1. Como resultado, o servidor recupera cada linha da tabela. Isto expõe
cada linha e causa uma carga excessiva no servidor. A maneira mais simples
para proteger deste tipo de ataque é usar aspas simples em torno da constante
numérica: SELECT * FROM tabela WHERE ID ='234 '. Se o usuário digitar
informações adicionais, tudo se torna parte do comando. Em um contexto
Página 446
numérico, o MySQL automaticamente converte esta string para um número e
elimina quaisquer caracteres não numéricos a partir dele.
Às vezes as pessoas pensam que, se um banco de dados contém somente da-
dos disponíveis publicamente, não necessitam de ser protegidos. Esta afirma-
ção é incorreta. Mesmo que seja admissível exibir qualquer linha no banco de
dados, você deve ainda se proteger contra ataques de negação de serviço (por
exemplo, aqueles que têm por base a técnica no parágrafo anterior que faz
com que o servidor tenha um sobre carga e venha a perder recursos). Caso
contrário, o servidor torna-se indisponível aos usuários legítimos.
Tente entrar com aspas simples e duplas ( '' e "") em todos os seus formulá-
rios web. Se você obter qualquer tipo de erro do MySQL, investigue o pro-
blema imediatamente.
Tente modificar URLs dinâmicos, acrescentando ("""),% 23% 22% 27 ("'") e
("#"), para eles.
Tente modificar os tipos de dados de URLs dinâmicos de tipos de caracteres
numéricos a utilizar os caracteres mostrados no exemplo anterior. A sua apli-
cação deve ser segura contra estes ataques e similares.
Tente introduzir caracteres, espaços e símbolos especiais em vez de números
em campos numéricos. Sua aplicação deve removê-los antes de passar para o
MySQL ou então gerar um erro. Passar valores para o MySQL sem validá-los
antes é muito perigoso!
Verifique o tamanho dos dados antes de passar para o MySQL.
O nome de usuário que irá conectar-se ao MySQL deverá ser diferente do u-
suário com perfil de administração de sua aplicação. Não dê as suas aplica-
ções qualquer acesso ao MySQL, utilize um script para conexão.
Muitas interfaces de programação de aplicativo fornecem um meio de escapar
de caracteres especiais digitados nos formulário. Utilizados de forma ade-
quada, podem impedir a entrada de valores digitados pelos usuários que fa-
zem com que o aplicativo se comporte de forma diferente da que você preten-
de:
MySQL API C: Use a chamada a API a mysql_real_escape_string ().
MySQL + +: Utilize escape e quote para modificar sua consulta.
Não transmita dados em claro (não encriptado) através da Internet. Esta in-
formação está acessível a todos que tenham a capacidade para interceptar-lo
e usá-lo para seus próprios fins. Em vez disso, utilize um protocolo criptogra-
fado, como SSL ou SSH. O MySQL suporta conexões SSL interno da versão
4.0.
Página 447
Outra técnica é transmitir a comunicação pela porta SSH de forma codificada
e através de um túnel.
Aprenda a utilizar os utilitários tcpdump e strings . Na maioria dos casos, vo-
cê pode verificar se os fluxos de dados do MySQL não são criptografados,
emitindo um comando como o seguinte: shell> tcpdump-l-i eth0-w - src ou
dst port 3306 | strings
Isto funciona em Linux e deve funcionar com pequenas modificações sob ou-
tros sistemas.
Página 448
A segurança do PHP é um dos pontos mais importantes na configuração do servidor,
pois a linguagem é a mais vulnerável a ataques e tem um grande número de configura-
ções administrativas que precisam ser bem configuradas, pois podem abrir buracos na
segurança. Se um hacker conseguir executar um código de script fora das limitações
do servidor, existe um grande potencial de chance do vilão obter o controle completo
do sistema.
O primeiro passo para minimizar o potencial de perigo para o seu sistema é assegurar
que não existem arquivos no seu servidor que possa ser chamados pela função phpinfo
(). Embora esta função seja essencial para examinar o seu sistema e determinar as
definições de configuração, ela pode proporcionar ao hacker uma janela com a lis-
ta completa das configurações do seu sistema PHP. Essa configuração pode dar pistas
exatas de como, exatamente, violar o seu sistema.
Depois de ter a certeza que o seu servidor não expõe as configurações do PHP propri-
amente dito, há uma série de diretivas do PHP que podem blindar o servidor para asse-
gurar que não é um alvo promissor para um hacker. Embora um servidor com suporte
a Joomla possa funcionar corretamente sem estas precauções de segurança, isto irá
aumentar potencialmente a segurança e evitar problemas futuros garantindo a você que
o seu servidor está bem configurado para operar com o Joomla.
Se você estiver executando o PHP em um servidor Microsoft IIS, você não precisa
usar o safe mode, uma vez que cada host virtual pode ser configurado para ser execu-
tado a partir de uma conta de usuário. Enquanto os privilégios das contas de usuário
Página 449
forem definidas corretamente, não há necessidade de proibir um acesso à conta, pois
não será possível.
As restrições alcançadas com safe mode passam um falsa sensação de segurança. Des-
de a sua implementação inicial, o safe mode foi um paliativo até que os servidores da
web (local em que o problema deveria ser tratado) conseguissem atingir um nível de
sofisticação em que a diretiva deixaria de ser necessária. A maioria dos Servidores
alcançaram esse nível há algum tempo.
PHP doc_root
A directiva doc_root aceita uma string especifica para o diretório raiz de execução para
scripts PHP. Se o safe mode estiver ligado, a execução de scripts será autorizada fora
do referido diretório. O diretório deverá ser definido no arquivo php.ini como este
exemplo:
PHP disable_functions
Com o safe mode desligado, há uma série de outras funções que podem ser utilizados
para garantir a melhoria da segurança no PHP. Por exemplo, a diretiva disa-
ble_functions pode ser configurado para desativar funções específicas que possam ser
exploradas por um hacker. No arquivo de configuração do PHP, você poderá inserir a
seguinte diretiva que irá desativar as funções listadas sem afetar a operação do joomla:
Em uma implantação no servidor, você pode considerar desativar essas funções além
de desativar a função phpinfo. Dessa forma, se um arquivo que instancie a função for
localizado por um hacker, não fornecerá a ele nenhuma informação, impedindo sua
exploração.
Página 450
Como o disable_functions, o diretório disable_classes aceita uma lista de itens que
podem ser desabilitados, separados por uma vírgula. Esta função irá desativar algumas
especificações da orientação a objeto em execução no PHP. Embora esta diretiva tenha
uma utilidade limitada no presente, no futuro, quando as classes de frameworks (inclu-
indo o framework joomla) tornarem-se mais extensas e apresentarem riscos de segu-
rança, esta configuração irá revelar-se muito útil.
para desativar a classe Directory, incluir esta directiva no seu arquivo php.ini: disa-
ble_classes = Directory
PHP display_errors
Uma diretiva importante e que deve estar ativada é a display_errors. Esta diretiva per-
mite que, quaisquer erros ou avisos que podem ocorrer durante a execução do coman-
do echo do PHP, sejam "printadas" no browser, juntamente com o arquivo e o número
da linha onde ocorreu o erro. Geralmente você poderá resolver esses avisos colocando
um @ no início da linha afetada. Você pode ativar a diretiva display_errors no arqui-
vo php.ini com esta directiva:
display_errors = On
Durante o desenvolvimento, você vai querer todos os erros exibidos no browser para
permitir uma rápida resolução, e todos os avisos exibidos porque eles tendem a ser
ignorados e são exibidos apenas no log de erro. Com esta configuração desativada, as
mensagens do sistema não serão perdidas. Quer seja ativado ou desativado, os erros e
avisos são escritos no arquivo error.log do servidor Apache e estão disponíveis no
diretório \ logs. Por padrão a diretiva display_errors está habilitada.
PHP expose_php
Página 451
Para desativar o fornecimento de informações do seu servidor PHP, defina esta direti-
va no seu arquivo php.ini da seguinte forma:
expose_php = off
Tipos de Ataques
Força Bruta
Página 452
Nos filmes de Hollywood , hackers utilizam técnicas de força bruta para quebrar a
senha de usuários em uma única conta, mas verdadeiros "hackers" são muito menos
exigentes. A maioria dos ataques de força-bruta que alcançam sucesso não variam
tanto como a senha do usuário. A palavra senha é tão comum, que um hacker irá exe-
cutar essa senha contra uma lista de usuários para ver quem tem uma conta com essa
chave. Portanto, é aconselhável proteger o seu usuário de administração do Joomla,
mudando o nome padrão (admin) e criando uma senha forte.
SQL INJECTION
uma das formas mais comuns e efetivas de ataque na internet é o SQL Injection. No
SQL Injection, um hacker tenta enviar códigos SQL via consultas SQL não autoriza-
das e filtradas. O código SQL do hacker pode não ter nenhum retorno em termos de
informações de segurança ou simplesmente executar um processo de destruição abso-
luta.
Existem precauções básicas que você deve tomar, para proteger os dados que serão
recebidos através de formulários, principalmente se foi você quem o desenvolveu. A
regra básica é tratar e validar os dados que serão recebidos e se assegurar que o seu
código nunca irá receber os dados de uma forma bruta, ou seja, sem o devido trata-
mento.
Você pode tratar os dados de várias formas, desde limite de caracteres aceitos com
maxlenght e size até scripts em javascript, para fazer a validação a nível cliente e
scripts PHP, para validação a nível provedor.
Todos os dados enviados, devem ser processados e validados antes de serem utilizados
pela aplicação.
Ataques do tipo SQL INJECTION, contra aplicativos que usam Joomla, buscam atin-
gir o usuário padrão do grupo "super user", através de seu ID e as tabelas do banco de
dados, através do prefixo padrão "jos_".
Página 453
A partir da versão 2.5, tanto o ID do super user, quanto os prefixos das tabelas, passa-
ram a ser randômicos. Ou seja: "para cada nova instalação, novos ID's e prefixos são
gerados". Isto tornou o ataque SQL INJECTION. Praticamente inofensivo aos aplica-
tivos que usam Joomla.
Directory Scanning
Muitos servidores web possuem a opção de navegação de diretórios, definida para
permitir a navegação entre diretórios, o que aumenta a sua responsabilidade na hora de
escolher o HOST de hospedagem. Esta opção de configuração do Servidor Web per-
mite que um visitante possa navegar para um diretório e ver todos os arquivos contidos
lá, prevendo que não há um arquivo default.htm, default.asp, index.html ou index.php
no diretório.
Navegação entre diretórios é um convite aberto para hackers tentarem descobrir uma
grande quantidade de informações sobre seu sistema. A partir de arquivos de configu-
ração geral do sistema o hacker poderá ter acessos a informações sobre o sistema ope-
racional do provedor e da aplicação.
Por padrão, a maioria dos Hosts de hospedagem desabiltam esta opção nos Servidores
Web. Se o seu website esta hospedado em um servidor mais antigo, ou muito barato,
não se esqueça de verificar se esta diretiva não está definida como habilitada. Esta
forma de pirataria é mais provável de ser realizada manualmente por um hacker, uma
vez que ele usará todo o conhecimento para encontrar as falhas do provedor de hospe-
dagem.
DOS
Página 454
A negação de serviço "Denial of Service" (DoS) é um ataque baseado na tentativa de
negar o uso de um servidor ou outro recurso para usuários autorizados. Este é um tipo
de ataque direcionado ao servidor de hospedagem, logo, se você hospeda os seus pro-
jetos em um bom HOST, dificilmente sofrerá este tipo de invasão. Entretanto, se você
gosta de HOST barato ou de grátis, ou ainda, montou um HOST na sua garagem sem
o devido conhecimento é bom ficar ligado.
A maioria dos ataques (Dos) devem ser desviadas ao nível de hardware, por isso, se
você estiver executando o servidor do host, certifique-se de ter um bom firewal no
lugar para que o mesmo identifique automaticamente o fluxo de tráfego, diferenciando
o tráfego normal do anormal. Isto irá impedir o tráfego de dados inválidos passando
pela rede.
O OpenBSD Packet Filter é um programa chamado "pf" que suporta um recurso
chamado "synproxy" que se coloca entre um servidor de internet e de tráfego. Desem-
penha o mesmo papel que um firewall no bloqueio tráfego falso. Você pode encontrar
mais informações sobre a "pf" em www.openbsd.org /faq/pf
Clickjacking
Você já se perguntou como as pessoas perdem o facebook, Msn e etc...?
Este tipo de ataque cria formulários invisíveis que possibilitam a captura de usuário e
senha. Geralmente são inicializados por cavalos de tróia presentes em links recebidos
nos emails. É potencialmente perigoso para sites de qualquer natureza, desenvolvidos
em qualquer CMS.
O cabeçalho de resposta HTTP X-Frame-Options pode ser usado para indicar se um
navegador deve ou não ser autorizado a renderizar uma página em um <frame> ou
<iframe>.
Os sites podem usar isso para evitar ataques clickjacking, assegurando que o seu
conteúdo não é incorporado em outros sites.
Página 455
Usando o X-frame-Options
Existem três valores possíveis para X-Frame-Options:
NEGAR
A página não pode ser apresentada em um <iframe></iframe>, independentemente
do local que tenta executá-lo.
SAMEORIGIN
A página só pode ser exibida em um <iframe></iframe> sobre a mesma origem que
a própria página.
ALLOW-FROM uri
A página só pode ser exibida em um <iframe></iframe> sobre a origem especifica-
da.
Em outras palavras, se você especificar NEGAR, qualquer tentativa de carregar a pá-
gina de outro site, ou mesmo do site local, em um <iframe></iframe>, será impedida.
Por outro lado, se especificar SAMEORIGIN, é possível carregar a página de um site
local em um <iframe></iframe>, incluindo-a no mesmo local que serve a página.
Configurando o Apache
Para configurar o Apache para enviar o cabeçalho X-frame-Options para todas as pá-
ginas, adicione a configuração do seu site, a seguinte linha de código:
# Ln-sf / etc/apache2/mods-available/headers.load / etc/apache2/mods-
enabled/headers.load
No arquivo apache2.conf, adicione a seguinte Entrada:
Header always append X-Frame-Options SAMEORIGIN
Resultados
Quando é feita uma tentativa de carregar conteúdo em um <iframe></iframe>, o cabe-
çalho X-Frame-Options nega a permissão.
O navegador Firefox retorna about: blank na aba. Em algum momento, uma mensagem
de erro de algum tipo será exibida no quadro(frame).
Compatibilidade de Browsers
Página 456
Implementação
http://javascript.info/tutorial/clickjacking
Mais informações OWASP
https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet
Para proteger seu site deste ataque, insira o código abaixo na primeira linha
do arquivo index.php que está na raiz do site.
header('X-Frame-Options: SAMEORIGIN');
Página 457
Usuário do Grupo Super Users
Troque o usuário padrão do Joomla (admin), por outro qualquer e atribua-lhe
uma senha forte.
Extensões de Terceiros
Evite instalar extensões pouco conhecidas e utilizadas.
Permissões
Diretórios devem possuir permissão (0755) e arquivos (0644).
Relatório de Erros
Desabilite o relatório de erros pois eles pesam o seu website e mostram aos
possíveis invasores, falhas de segurança caso existam. Para desabilitar o rela-
tório basta seguir a seguinte sequência: Configurações Globais - Sistema -
Relatório de Erros -> nenhum
Arquivo de configuração
Renomeie e mova o arquivo configuration.php para um novo diretório.
Exemplo:
* http://extensions.joomla.org/search?q=admin+exile&q=adminexile
Página 458
Bye Bye Generator – plugin para customização do Generator
* http://extensions.joomla.org/search?q=byebyegenerator
* http://extensions.joomla.org/search?q=browser
* http://extensions.joomla.org/extensions/access-a-security/site-
security/backup/1606?qh=YToxOntpOjA7czo2OiJha2VlYmEiO30%3D
Backup
Faça o backup de seu website, regularmente.
Atualização
Mantenha suas extensões atualizadas; e
Mantenha sua versão do Joomla atualizada.
Templates
Não use templates comerciais, piratas; e
Cuidado com templates gratuitos, que possuem expressões regulares em seu código-
fonte.
Extensões desenvolvidas
Cuidado com a short tag do php pois você poderá ter problemas caso esteja desabilita-
da no servidor. Logo, comece suas linhas de código com (<?php) e nunca apenas com
(<?).
Qualquer extensão desenvolvida para seu site, seja componente, módulo, plugin ou
template, deve possuir em seu arquivo principal, o seguinte trecho de código:
defined( ' _JEXEC ' ) or die ( 'Restricted access' );
User ID do usuário Admin Padrão
O ID do admin padrão, é randômico desde a versão 2.5, não existindo mais, o perigo
de um ataque SqlInjection para o ID=42.
Prefixo de Tabelas
Página 459
O prefixo de tabelas, é randômico desde a versão 2.5, não existindo mais, o perigo de
um ataque SqlInjection para o jos_.
Desativar o registro / login
Se o seu website não terá conteúdo restrito ou cadastro de usuários, desabilite o módu-
lo Login form
Alguns ataques automáticos busca a tag generator para testar exploits, por isso é alta-
mente recomendado retirar ou customizar a mesma.
Desde o Joomla! 2.5 a informação está em branco. Para versões anteriores, substitua a
informação padrão.
Ativar o (.htaccess)
O htaccess.txt está na raiz do seu website joomla e deve ser renomeado para
(.htaccess). Porém, alguns fatores devem ser observados:
Url's amigáveis
Muitos "exploits" funcionam baseados em sniffs de robots através das URLs dinâmi-
cas do CMS.
Por exemplo, digamos que o componente (com_algumacoisa) foi invadido e você está
usando o mesmo em seu website. O "exploit" irá buscar por com_algumacoisa em sua
url e uma vez achado, irá explorar as vulnerabilidades do mesmo para invadir seu
website.
Página 460
O uso de Url's amigáveis além de ajudar na indexação de seu website pelo google é
uma excelente prática de segurança.
Erro ao mover arquivo
Se ao tentar instalar uma extensão, seu site enviar a mensagem "Houve um erro ao
carregar este arquivo para o servidor", possivelmente será necessária a edição do ar-
quivo de configuração do PHP, no servidor.
SO GNU/Linux
post_max_size = 8M
upload_max_filesize = 2M
Precisamos alterar o valor máximo e recomendo 8M ou 16M. Porém, pode-se usar 8M,
16M, 32M, 64M ou 128M. Lembre-se que estamos em ambiente local.
post_max_size = 16M
upload_max_filesize = 16M
Reinicie o Apache
Tente fazer nova instalação e caso não obtenha sucesso, refaça o processo para o
Página 461
php.ini que está em /etc/php5/cli
post_max_size = 8M
upload_max_filesize = 2M
Precisamos alterar o valor máximo e recomendo 8M ou 16M. Porém, pode-se usar 8M,
16M, 32M, 64M ou 128M. Lembre-se que estamos em ambiente local.
post_max_size = 16M
upload_max_filesize = 16M
Reinicie o Apache
SO Windows
upload_max_filesize = 2M
Precisamos alterar o valor máximo e recomendo 8M ou 16M. Porém, pode-se usar 8M,
16M, 32M, 64M ou 128M. Lembre-se que estamos em ambiente local.
post_max_size = 16M
upload_max_filesize = 16M
SO IOS Mac
post_max_size = 8M
upload_max_filesize = 2M
Precisamos alterar o valor máximo e recomendo 8M ou 16M. Porém, pode-se usar 8M,
16M, 32M, 64M ou 128M. Lembre-se que estamos em ambiente local.
Página 463
No bloco de notas ou outra IDE altere o valor das diretivas:
post_max_size = 16M
upload_max_filesize = 16M
Flag htaccess
Caso não obtenha sucesso, entre em contato com o provedor de hospedagem e solicite
o aumento das diretivas do PHP.
Sites Úteis
http://feeds.joomla.org/JoomlaSecurityNews
CERT
Página 464
http://www.us-cert.gov/
Open BSD
www.openbsd.org /faq/pf
VeriSign
www.verisign.com
Existem várias formas de você recuperar a senha. Umas são fáceis, outras nem tanto,
mas todas levam ao mesmo objetivo: "Recuperar a senha do super administrador."
Procure ambientar-se na seguinte situação: “O seu cliente perdeu a senha do super
administrador e liga desesperado(a) querendo uma solução de sua parte, afinal de con-
tas, você fez o site e não importa se já passou 01 (um) ano ou 01 (um) mês, você é o
menino(a) do site e deve resolver. Pelo menos na cabeça do cliente.”
É correto dizer que apesar de você não fazer idéia da senha do super adminis-
trador, alguém possui a senha de acesso ao banco de dados. Neste caso, o al-
guém é o cliente. Logo, solicite a ele o HOST, USUÁRIO e SENHA de aces-
so ao BANCO DE DADOS.
Com esses dados à mão você deve acessar o phpmyadmin do HOST e procu-
rar a tabela _users.
Na figura seguinte você observa à esquerda, a lista de tabelas do Joomla e em
destaque a #_users que é a tabela responsável por armazenar todos os usuá-
rios do mesmo. Lembre-se que o prefixo é randômico, não existe mais
jos_users.
Página 465
Na próxima figura estão resumidos os procedimentos que você deve adotar,
ou seja:
1) clique sobre a tabela jbnew_users -
2) clique em Visualizar -
3) clique no lápis à esquerda do registro do Administrador.
2) O próximo passo será editar o password do usuário Administrador e para isso você
deve seguir a próxima figur.
Após clicar sobre o lápis você entrará na tela de edição. Observe o campo
password, é neste campo que a senha foi gravada.
Página 466
3) Agora você vai conhecer o pulo do gato, a ideia é demonstrar de forma resumida, a
lógica de autenticação do Joomla!
Figura: autenticação
Página 467
Porém para o cara pálida risonho digo: "Tente quebrar o HASH + PALAVRA
SECRETA, se conseguir, me diga pois você acabou de quebrar a regra de se-
gurança do Joomla e merece destaque."
Espero ter sido claro sobre isso. Continuando o processo, o Joomla "pergun-
ta" ao banco: Banco, existe um HASH igual à esse que eu criei?
4) Exatamente neste ponto, ocorre o grande problema que vai gerar a falha na seguran-
ça do Joomla, se você não tomar cuidado ao criar a nova senha para o super adminis-
trador. Perceba que eu escrevi criar nova senha e não recuperar a senha, pois uma vez
perdida a senha, não é possível recuperá-la.
A palavra secreta é concatenada na senha do Super Administrador, no momento da
instalação do Joomla e apenas neste momento. Por isso que a senha existente no banco
é composta de vários caracteres:vários caracteres maiúsculos. O que está após o (dois
pontos) é a palavra secreta de sua instalação.
5) Vamos criar a nova senha e para isso você deve voltar ao passo nr 2 e simplesmen-
te, apagar o HASH que está gravado no campo password. Não perca tempo submeten-
do a websites que quebram o MD5 pois só funcionam para senhas fáceis. Lembre-se
que o Joomla já concatenou a PALAVRA SECRETA e o HASH está muito grande.
Siga os passos da próxima figura.
Página 468
6) Agora, basta você acessar o backend, digitar o nome de usuário e a nova senha
criada, correto? Errado. Não haveria motivo para este tutorial se tudo acabasse agora.
Experimente verificar o HASH da senha criada e perceba que não existem mais o :
(dois pontos) nem tão pouco a PALAVRA SECRETA. O motivo é simples: " Ao criar
a nova senha dentro do phpmyadmin, você efetuou uma operação ilegal aos "olhos" do
CMS e por isso, ele não sincronizou a senha concatenando o HASH com a PALAVRA
SECRETA."
Você está subutilizando os recursos de segurança do Joomla e poderá sofrer com as
consequências advindas dessa falha de operação. Mas calma, pois a solução é simples:
Acesse o backend com o usuário e a nova senha criada;
crie um novo usuário com perfil de super administrador;
altere o grupo do usuário antigo para registered ou qualquer outro abaixo de
super administrador;
Faça logout;
Acesse o backend com o novo usuário criado; e
Exclua, eu disse e x c l u a o usuário antigo.
Desta forma, além de ter resolvido o problema de sincronização, você fez o que todo
usuário com o mínimo de responsabilidade deve fazer:
Mudar o nome do usuário padrão do sistema, que geralmente é admin.
Duvida? acesse o phpmyadmin agora e perceba que o novo usuário criado por você,
com perfil de super administrador, possui sua senha completa. Ou seja: HASH + PA-
LAVRA SECRETA.
Os profissionais que têm a incumbência de preparar um ambiente de hospedagem de
qualquer site em PHP, especialmente que utilizará CMS Joomla, deverão consultar o
Anexo I para conhecerem as melhores práticas para montagem de um servidor Web
seguro.
Página 469
Anexo I
Abaixo listo as boas práticas para montagem de um servidor web seguro, voltado a
aplicações PHP, particularmente Joomla, baseado em tecnologia Linux-Apache-
MySQL-PHP.
Server Tokens
De
ServerTokens Full
Página 470
Para
ServerTokens Prod
ServerSignature
De
ServerSignature On
Para
ServerSignature Off
TraceEnable
De
TraceEnable On
Para
TraceEnable Off
<Document />
Order Deny,Allow
Deny from All
Options FollowSymLinks
AllowOverride None
</Document>
ExtendedStatus On
Habilite o módulo *info*
a2enmod info
Habilite o SSL
Página 471
Tunning do Apache
Página 472
(*) Dica Importante: Para testes de benchmark do Apache2 é recomendado o uso do
AB (Apache Benchmark - http://httpd.apache.org/docs/2.0/programs/ab.html)
/usr/bin/mysql_secure_installation
MySQL Tunning
Hardening do PHP
Página 473
Além do suhosin é necessário desabilitar os seguintes parâmetros do arquivo
|/etc/php5/apache2/php.ini|:
Desabilite o exim4
invoke-rc.d exim4 stop
update-rc.d exim4 remove
Hardening do SSH
Modifique as seguintes linhas do arquivo |/etc/ssh/sshd_config|:
Port 22 para, por exemplo Port 3000
PermitRootLogin yes para PermitRootLogin no
Limite o uso do sudo somente para o grupo admin
Crie o grupo admin - addgroup admin
Adicione seu usuário nesse grupo adduser seuuser admin
Configure o sudo adicionando a seguinte linha: %admin ALL=(ALL) ALL
Desabilite o usuário root - usermod -L root
Monitoramento de performance
Página 474
Com o`` server-status`` funcionando habilite os plugins do Apache:
cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/apache_processes apache_processes
ln -s /usr/share/munin/plugins/apache_accesses apache_accesses
vim /etc/munin/plugin-conf.d/munin-node
[apache2]
user www-data
(*) Durante a instalação do Ossec opte pela instalação *local* ao invés do *server*,
assim a instalação será standalone.
Script de Firewall
#!/bin/bash
# Server firewall
# Alexandro Silva
# April 27th '2010
PATH=/bin:/usr/bin:/sbin:/usr/sbin
TCPOK="123 80 443"
UDPOK="53"
iptables -F INPUT
Página 475
iptables -F OUTPUT
iptables -F FORWARD
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#Drop incoming malformed NULL packets
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#Drop incoming malformed XMAS packets
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
#Syn flood protection
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
#Drop incoming ping request
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j LOG -i ! lo -s 127.0.0.1/255.0.0.0
iptables -A INPUT -j DROP -i ! lo -s 127.0.0.1/255.0.0.0
iptables -A OUTPUT -j ACCEPT -o lo
# Permit SSH in the 3000 port
iptables -A INPUT -s 0.0.0.0 -p tcp --dport 3000 -j ACCEPT
# Permit access in some TCP ports
for PORTA in $TCPOK
do
iptables -A INPUT -p tcp --dport $PORTA -j ACCEPT
done
# Permit access in some UDP ports
for PORTA in $UDPOK
do
iptables -A INPUT -p udp --dport $PORTA -j ACCEPT
done
Página 476
# Drop other entering connections checking the state
iptables -A INPUT -m state --state ! ESTABLISHED,RELATED -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j AC-
CEPT
Após a conclusão de todos estes passos use as seguintes ferramentas para scanear o
servidor e validar todo o trabalho
* W3af - http://w3af.sourceforge.net/
* Nikto – http://cirt.net/nikto2
*Netsparker - www.mavitunasecurity.com/netsparker/
Página 477
Referências
Livros
Nielsen Jakob. Projetando Websites. Brasil, 2000.
Silva, Maurício Samy. Construindo sites com CSS e (X)HTML. Brasil, 2008.
Websites e Blogs
http://joomla.org
http://www.joomla.org/announcements/release-news/5586-joomla-3-4-is-here.html
http://developer.joomla.org/news/583-announcing-joomla-cms-3-4.html
http://www.joomlabrasilia.com.br
http://php.net/manual/pt_BR/index.php
http://blog.alexos.com.br/
http://docs.joomla.org/Release_and_support_cycle
http://www.youtube.com/cout45
http://www.apachefriends.org/pt_br/xampp.html
http://support.google.com/webmasters/bin/answer.py?hl=en&hlrm=en&answer=35769
http://docs.joomla.org/International_Enhancements_for_Version_1.6#Unicode_URLs
Página 478
http://pt.wikipedia.org/wiki/Sendmail
http://pt.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
http://w3c.br/divulgacao/guiasreferencia/css2/#mod-texto
http://www.suicidiovirtual.net/dados/lerolero.html
http://extensions.joomla.org/
http://joomlacode.org/gf/project/jtranslation3_x/frs/
http://pixlr.com/editor/
http://msdn.microsoft.com/pt-br/library/ms142509.aspx
http://en.wikipedia.org/wiki/P3P
http://www.w3.org/
http://br.mozdev.org/firefox/download/
https://addons.mozilla.org/pt-BR/firefox/addon/firebug/
http://pt.wikipedia.org/wiki/Brainstorming
http://pt.wikipedia.org/wiki/MVC
http://www.smartaddons.com/joomla/templates/template-showcase/item/345-sj-joomla3-free-
template-for-joomla-30
http://pt.wikipedia.org/wiki/Navega%C3%A7%C3%A3o_estrutural
http://pt.wikipedia.org/wiki/Google_Analytics
http://blog.joomlatools.com/2013/11/composer-for-joomla-an-extension-installer-for-
developers.html
https://getcomposer.org/
http://blog.helvecio.com/2014/08/13/introducao-publica-texto-completo-bloqueado.html#more-
1738
Página 479