Joomla! Avançado
mmm Dan Rahmel
Rio de Janeiro, 2014
BOOK_AdvancedJoomla.indb 1
13/10/2014 13:21:31
Joomla! Avançado Copyright © 2014 da Starlin Alta Editora e Consultoria Eireli. ISBN: 978-85-7608-861-5 Translated from original Advanced Joomla! © 2014 by Dan Rahmel ISBN 978-1-4302-1628-5. This translation is published and sold by permission by Apress, the owner of all rights to publish and sell the same. PORTUGUESE language edition published by Starlin Alta Editora e Consultoria Eireli, Copyright © 2014 by Starlin Alta Editora e Consultoria Eireli. Todos os direitos reservados e protegidos por Lei. Nenhuma parte deste livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida. Erratas: No site da editora relatamos, com a devida correção, qualquer erro encontrado em nossos livros (Procure pelo título do livro). Marcas Registradas: Todos os termos mencionados e reconhecidos como Marca Registrada e/ou Comercial são de responsabilidade de seus proprietários. A Editora informa não estar associada a nenhum produto e/ou fornecedor apresentado no livro. Impresso no Brasil — 1ª Edição, 2014 Vedada, nos termos da lei, a reprodução total ou parcial deste livro. Produção Editorial Editora Alta Books Gerência Editorial Anderson Vieira
Supervisão e Qualidade Editorial Angel Cabeza Sergio Luiz de Souza
Design Editorial Auleriano Messias Aurélio Corrêa
Editoria de Informática Marcelo Vieira
Captação e Contratação Vendas Atacado e Varejo Daniele Fonseca de Obras Viviane Paiva Cristiane Santos J. A. Rugeri
[email protected] Marco Pace Marketing e Promoção
[email protected] [email protected]
Ouvidoria
[email protected]
Equipe Editorial
Anna Karolina Lima Claudia Braga Hannah Carriello
Letícia Vitoria Livia Brazil Mayara Coelho
Milena Lepsch Natália Gonçalves Raquel Ferreira
Tradução Rafael Reis
Revisão Técnica Jefferson Teixeira
Revisão Gramatical Tássia Carvalho
Diagramação Joyce Matos
Analista de Sistemas, Especialista em CMS e GED
Rodrigo Araujo Thiê Alves
416
Rua Viúva Cláudio, 291 – Bairro Industrial do Jacaré CEP: 20970-031 – Rio de Janeiro – Tels.: (21) 3278-8069/8419 www.altabooks.com.br – e-mail:
[email protected] www.facebook.com/altabooks – www.twitter.com/alta_books
BOOK_AdvancedJoomla.indb 4
13/10/2014 13:21:32
Sumário Resumido Sobre o Autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Sobre o Revisor Técnico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Agradecimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii ■■Capítulo 1: Agilizando o Processo de Criação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
■■Capítulo 2: Customizando o Joomla com Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
■■Capítulo 3: Construindo um Template Dinâmico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
■■Capítulo 4: Usando Template Overrides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
■■Capítulo 5: Usando JavaScript e Ajax para Carregar
Elementos da Página de Forma Dinâmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 ■■Capítulo 6: Joomla e Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
133
■■Capítulo 7: Administração de Segurança Joomla . . . . . . . . . . . . . . . . . . . . . . . . . . . .
161
■■Capítulo 8: Administração e Configuração da Base de Dados Joomla . . . . . . . . .
187
■■Capítulo 9 : Testando um Site com ApacheBench, JMeter e Selenium . . . . . . . . .
215
■■Capítulo 10: Usando Ferramentas de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . .
253
■■Capítulo 11: Criando Menus Joomla, Artigos e Categorias com PHP . . . . . . . . . . .
277
■■Capítulo 12: Criando Extensões de Núcleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
297
■■Capítulo 13: Conectando Joomla e Facebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
341
■■Capítulo 14: Desenvolvimento e Implantação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
359
Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 v
BOOK_AdvancedJoomla.indb 5
13/10/2014 13:21:32
Sumário Sobre o Autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Sobre o Revisor Técnico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Agradecimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii ■■Capítulo 1: Agilizando o Processo de Criação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
Configurando as Folhas de Estilo do Editor...................................................................................................... 2 Preparando um Artigo de Categoria Staging (Homologação)...................................................................... 5 Anatomia do Processo de Exibição do Artigo................................................................................................. 7 Configurando a Exibição do Artigo.................................................................................................................... 8 Configurações do Artigo................................................................................................................................................................. 8 Configurações Globais.................................................................................................................................................................... 9 Configurações de Menu................................................................................................................................................................ 11 O Título da Página Inicial.............................................................................................................................................................. 13 A Avaliação do Artigo.................................................................................................................................................................... 14 Resumo da Apresentação do Artigo........................................................................................................................................... 15
URLs e Seus Desafios........................................................................................................................................ 16 Decifrando uma URL...................................................................................................................................................................... 16 Examinando a URL amigável (SEF).............................................................................................................................................. 18
Configurando a Página de Resultados de Busca.......................................................................................... 19 Resumo................................................................................................................................................................. 23
■■Capítulo 2: Customizando o Joomla com Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
Criando um Módulo Custom HTML.................................................................................................................. 26 Adicionando Widgets Customizados ao Seu Site......................................................................................... 27
vii
BOOK_AdvancedJoomla.indb 7
13/10/2014 13:21:32
m Sumário
Implementando o Google Calendar............................................................................................................................................. 28 Adicionando um Google Map no Seu Site Joomla................................................................................................................... 31 Adicionando o Google Translate ao Seu Site Joomla............................................................................................................. 33 Adicionando um Bate-papo ao Seu Site com o Chatango...................................................................................................... 35 Adicionando o Survey Monkey ao seu Site............................................................................................................................... 36 Adicionando um Módulo Conteúdo Relacionado (rcmodule) ao Seu Site........................................................................... 39 Usando a Loja PayPal Storefront (PayPal Storefront)............................................................................................................. 41
Resumo................................................................................................................................................................. 44
■■Capítulo 3 : Construindo um Template Dinâmico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
Desenvolvendo o Template.............................................................................................................................. 46 Definindo Objetivos para o Template.......................................................................................................................................... 47 Tipos de Páginas Exibidas por um Template............................................................................................................................. 48 Esboçando o Template com uma Planilha................................................................................................................................. 48
Implementando o Template.............................................................................................................................. 51 Crie os Arquivos Index e de Detalhes do Template (templateDetail.xml)............................................................................ 52 Editando o Template em um Servidor Remoto com o jEdit..................................................................................................... 54 Examinando a Estrutura do Template......................................................................................................................................... 56 Aumentando o Template Básico................................................................................................................................................. 58 Criando a Seção Head................................................................................................................................................................... 58 Crie a Seção Body.......................................................................................................................................................................... 62 Criando um Body Multicoluna...................................................................................................................................................... 63 Usando Parâmetros de Template................................................................................................................................................ 68 Selecionando Múltiplos Arquivos CSS em um Template Único............................................................................................. 72
Otimizando o Template Dinâmico para Celulares, Tablets e Outras Plataformas de Visualização..... 73 Usando o Design Responsivo Para Navegadores Móveis...................................................................................................... 74
Orientações Gerais para Templates Portáteis.............................................................................................. 75 Refinando o Template Dinâmico...................................................................................................................... 80 Evitando Armadilhas Comuns de Template............................................................................................................................... 81 Criando uma Estrutura de Template Compartilhada para Compartilhar Recursos em um Site de Templates Múltiplos................................................................................................................... 83 Adotando as Melhores Práticas Básicas de Folha de Estilo.................................................................................................. 84 Usando o Page Class Suffix para Criar Estilos Customizados................................................................................................ 87
viii
BOOK_AdvancedJoomla.indb 8
13/10/2014 13:21:32
m Sumário
Usando CSS Sprites....................................................................................................................................................................... 87 Usando Ferramentas de Teste de Template.............................................................................................................................. 91
Resumo................................................................................................................................................................. 95
■■Capítulo 4: Usando Template Overrides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
O que um Template Override Pode Fazer....................................................................................................... 97 Incluindo um Módulo Customizado em um Pacote de Template............................................................... 98 Criando um Módulo de Login Customizado.................................................................................................... 99 Incluindo um Componente de Customização em um Pacote de Template............................................ 103 Modificando a Página Offline..................................................................................................................................................... 105
Adicionando uma Página 404 Customizada................................................................................................. 109 Resumo............................................................................................................................................................... 110
■■Capítulo 5: Usando JavaScript e Ajax para Carregar
Elementos da Página de Forma Dinâmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Como o Ajax Muda a Interação Web............................................................................................................ 112 Carregamento Dinâmico ou Lazy Loading de Conteúdo............................................................................ 114 Injetando Bibliotecas JavaScript em uma Página................................................................................................................. 116 Implementando o Carregamento Dinâmico JavaScript........................................................................................................ 117
Criando o Componente Injetor de Artigos.................................................................................................... 119 Criando a Estrutura do Diretório e o Arquivo de Instalação................................................................................................. 120 Construindo a Visão do Componente........................................................................................................................................ 121 Codificando o Script Ajax........................................................................................................................................................... 123 Construindo o Controller (Controlador).................................................................................................................................... 125
Adicionando o Lazy Loading de imagens..................................................................................................... 128 Particularidades da Implementação do Ajax.............................................................................................. 129 InnerText e TextContent.............................................................................................................................................................. 130 Compatibilidade Entre Bibliotecas JavaScript........................................................................................................................ 130 Criando os Retornos de Requisição Ajax................................................................................................................................. 131
Resumo............................................................................................................................................................... 132
ix
BOOK_AdvancedJoomla.indb 9
13/10/2014 13:21:32
m Sumário
■■Capítulo 6: Joomla e Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
133
Visão Geral dos Web Services....................................................................................................................... 133 Usando um Web Service com uma API................................................................................................................................... 134 Alguns Serviços de API Gratuitos............................................................................................................................................. 137
Usando o Yahoo Finance com o Joomla...................................................................................................... 138 Criando um Arquivo de Cache Simples.................................................................................................................................... 138 Criando o Módulo Yahoo Finance............................................................................................................................................. 140
Adicionando tuítes ao Seu Site...................................................................................................................... 142 Acessando a API do Twitter....................................................................................................................................................... 143 Formatando os tuítes Dentro de um Módulo........................................................................................................................... 145
API do Bing News............................................................................................................................................ 149 Adicionando um Mashup do Flickr................................................................................................................ 154 Resumo............................................................................................................................................................... 159
■■Capítulo 7: Administração de Segurança Joomla . . . . . . . . . . . . . . . . . . . . . . . . . . . .
161
Implementando a Segurança do Site e do Servidor................................................................................... 161 Criando a Segurança do Site.......................................................................................................................... 162 Criando um Grupo de Amostra com o User Manager do Joomla........................................................................................ 163 Protegendo Contra Ataques Automáticos............................................................................................................................... 170 Garantindo Configurações de Cookie Seguras....................................................................................................................... 172
Configurando a Segurança do Servidor....................................................................................................... 173 Selecionando o Tipo de Configuração de Segurança........................................................................................................... 174 Configuração de Segurança...................................................................................................................................................... 175 Refinando o Htaccess para o Joomla....................................................................................................................................... 175 Bloqueando Endereços de IP Específicos............................................................................................................................... 177 Implementando o SSL no Seu Servidor.................................................................................................................................... 180
Resumo............................................................................................................................................................... 186
■■Capítulo 8: Administração e Configuração da Base de Dados Joomla . . . . . . . . .
187
Dicionário SQL.................................................................................................................................................. 188 Examinando Alguns Exemplos De Consulta Simples............................................................................................................. 188 Usando Consultas Mais Complexas para Relatório............................................................................................................... 190
x
BOOK_AdvancedJoomla.indb 10
13/10/2014 13:21:32
m Sumário
Usando phpMyAdmin (PMA) na Administração da Base de Dados....................................................... 191 Instalando o PMA......................................................................................................................................................................... 193 Usando o PMA para Examinar a Base de Dados Joomla..................................................................................................... 194 Usando a Interface QBE em Relatórios.................................................................................................................................... 196 Instalando Tabelas PMA Especiais.......................................................................................................................................... 198 Gerando um PDF do Schema Joomla....................................................................................................................................... 200 Usando o PMA para Converter Tabelas Joomla para InnoDB............................................................................................. 202 Criando o Script para a Conversão de Tabelas Joomla para InnoDB................................................................................ 204
Gerenciando o Servidor da Base de Dados MySQL................................................................................... 205 Usando o PMA para Back-up da Sua Base de Dados........................................................................................................... 205 Usando o PMA para Buscas de Texto em Toda a Base de Dados...................................................................................... 206 Sincronizando Bases de Dados Remotas................................................................................................................................ 207 Refinando a Configuração do Servidor MySQL...................................................................................................................... 210 Rastreando Mudanças na Base de Dados.............................................................................................................................. 211
Resumo............................................................................................................................................................... 214
■■Capítulo 9: Testando um Site com ApacheBench, JMeter e Selenium . . . . . . . . .
215
Visão Geral dos Testes.................................................................................................................................... 216 Teste Funcional............................................................................................................................................................................ 216 Teste de Integração..................................................................................................................................................................... 217 Teste de Regressão..................................................................................................................................................................... 217 Teste de Unidade......................................................................................................................................................................... 217 Teste de Performance................................................................................................................................................................. 218 Entendendo a Terminologia de Teste....................................................................................................................................... 219
Usando o ApacheBench no Teste de Performance................................................................................... 220 Apresentando a Suíte Selenium.................................................................................................................... 222 Selenium IDE................................................................................................................................................................................. 222 Selenium Core............................................................................................................................................................................... 224 Selenium Server (Antigo Selenium Remote Control ou RC).................................................................................................. 225 Selenium Grid................................................................................................................................................................................ 225
xi
BOOK_AdvancedJoomla.indb 11
13/10/2014 13:21:32
m Sumário
Usando o Selenium IDE em um Site Joomla................................................................................................ 225 Instalando o Selenium IDE no Firefox....................................................................................................................................... 226 Gravando Testes.......................................................................................................................................................................... 226 Modificando o Script................................................................................................................................................................... 229 Examinando o Código do Script................................................................................................................................................. 230 Criando e Executando uma Suíte de Teste.............................................................................................................................. 231 Incorporando o JavaScript para Obter um Teste de Registro Dinâmico........................................................................... 233 Refinando os Testes Selenium................................................................................................................................................... 236 Outras Opções do Selenium IDE................................................................................................................................................ 236 Trabalhando com as Limitações do Selenium........................................................................................................................ 237 Extensões do Selenium............................................................................................................................................................... 237 Adicionando Formatos de Linguagem...................................................................................................................................... 238 Configurando o Selenium para Gravações de Flash.............................................................................................................. 238 Modificando e Customizando o Selenium IDE........................................................................................................................ 238
Usando o Selenium Core................................................................................................................................. 238 Usando o Apache JMeter............................................................................................................................... 240 Criando um Teste de Carregamento Simplesmente............................................................................................................... 241 Usando o Servidor Proxy para Capturar uma Sessão Web.................................................................................................. 250 Editando um Teste do JMeter.................................................................................................................................................... 252
Resumo............................................................................................................................................................... 252
■■Capítulo 10: Usando Ferramentas de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . .
253
Usando o Git no Controle de Código-fonte (SCC)........................................................................................ 253 Vantagens do Controle de Código-fonte.................................................................................................................................. 254 O Controle de Versão é Como um Registro de Escritura....................................................................................................... 256 Criando um Repositório e Fazendo o Commit de Arquivos no Git........................................................................................ 257 Alguns Conceitos Básicos Sobre a Terminologia SCC.......................................................................................................... 259 Usando o Git Gui........................................................................................................................................................................... 260 Usando o Git para Desenvolver Extensões Joomla............................................................................................................... 267
xii
BOOK_AdvancedJoomla.indb 12
13/10/2014 13:21:33
m Sumário
Usando o Eclipse e o XDebug no Desenvolvimento Joomla..................................................................... 268 Instale o XDebug no Seu Servidor Web................................................................................................................................... 270 Configure o Eclipse para se Comunicar com o XDebug........................................................................................................ 273 Dicas e Truques do Eclipse........................................................................................................................................................ 273
Usando o NetBeans......................................................................................................................................... 274 Usando o jEdit para o Desenvolvimento Joomla......................................................................................... 274 Visão Geral do Site do Desenvolvedor Joomla........................................................................................... 275 Resumo............................................................................................................................................................... 276
■■Capítulo 11: Criando Menus Joomla, Artigos e Categorias com PHP . . . . . . . . . . .
277
Criando um Artigo por meio de Código......................................................................................................... 278 Criando o Arquivo do Componente Principal.......................................................................................................................... 279 Construindo o Controller (Controlador).................................................................................................................................... 280 Criando um Modelo para o Acesso de Dados......................................................................................................................... 284 Criando o Arquivo view.html.php............................................................................................................................................... 286 Criando o Template de Visualização......................................................................................................................................... 288
Criando um Menu por meio de Código......................................................................................................... 292 Alguns Exemplos de Criação de Menu Automatizado........................................................................................................... 292 Adicionando o Método insertMenu() em um Controller (Controlador)............................................................................... 293
Criando uma Categoria por meio de Código................................................................................................ 294 Resumo............................................................................................................................................................... 296
■■Capítulo 12: Criando Extensões de Núcleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
297
Criando o Componente Article Historian...................................................................................................... 297 Duplique a Tabela de Artigo do Joomla................................................................................................................................... 298 Adicionando o Trigger para Armazenar a Revisão Antiga.................................................................................................... 299 Criando o componente Article Historian.................................................................................................................................. 301
Criando o Form Builder.................................................................................................................................... 309 Examinando a Arquitetura do Form Builder............................................................................................................................. 309 Criando o Componente Administrator do Form Builder......................................................................................................... 311 Criando o Componente Ajax do Form Builder......................................................................................................................... 317 Criando o Plugin do Form Builder.............................................................................................................................................. 319
xiii
BOOK_AdvancedJoomla.indb 13
13/10/2014 13:21:33
m Sumário
Geração de Imagem On-the-fly com o GD................................................................................................... 324 Quais são as Vantagens da Geração de Gráfico Server-Side?................................................................ 325 Criando uma Lista de Nomes de Cores PHP................................................................................................ 326 Verificando a GD............................................................................................................................................... 328 Crie a Classe cChart......................................................................................................................................... 329 Conceito Geral de Design da Classe......................................................................................................................................... 330 Criando as Rotinas de Cor.......................................................................................................................................................... 331 Criando o Renderizador de Texto.............................................................................................................................................. 332 Criando o Renderizador de Grade............................................................................................................................................. 332 Criando a Barra de Gradiente.................................................................................................................................................... 333 Criando o Renderizador de Barra.............................................................................................................................................. 334 Criando a rotina do Gráfico de Núcleo..................................................................................................................................... 334 Gerando Dados de Amostra....................................................................................................................................................... 336
Criando o Componente Wrapper (Encapsulador) do Joomla................................................................... 336 Incorporando a Imagem.................................................................................................................................. 338 Resumo............................................................................................................................................................... 340
■■Capítulo 13: Conectando Joomla e Facebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
341
Crie uma Fan Page no Facebook................................................................................................................... 341 Crie uma App do Facebook............................................................................................................................. 343 Adicionando OG Tags do Facebook.............................................................................................................. 344 Examinando as OG Tags Básicas.............................................................................................................................................. 345 Crie um Módulo de OG Tags....................................................................................................................................................... 346
Usando e Customizando o Botão Curtir do Facebook................................................................................ 350 Adicione o Botão Curtir do Facebook....................................................................................................................................... 350 Criando Botões Curtir Múltiplos na Mesma Página............................................................................................................... 351
Adicionando Comentários do Facebook....................................................................................................... 352 Entendendo o Facebook Insights................................................................................................................... 352 Programando as Páginas de Tópico do Facebook..................................................................................... 354 Botão Curtir do Facebook vs. Botão Compartilhar................................................................................................................. 357
Resumo............................................................................................................................................................... 358
xiv
BOOK_AdvancedJoomla.indb 14
13/10/2014 13:21:33
m Sumário
■■Capítulo 14: Desenvolvimento e Implantação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
359
Otimizando o Ambiente de Desenvolvimento.............................................................................................. 359 Usando Hosts Virtuais do Apache para Hospedar Múltiplos Sites em Um Servidor....................................................... 361 Configurações de Exibição de Erros e Overrides................................................................................................................... 364 Usando o XHProf no Profiling de Execução............................................................................................................................ 365 Execução de Profiling em uma Página do Joomla................................................................................................................. 367
Otimizando o Ambiente de Produção............................................................................................................ 370 Movendo o Arquivo de Configuração do Joomla................................................................................................................... 370 Analisando o Setup do Servidor................................................................................................................................................ 371 Configurando Expiração de Imagens no Servidor.................................................................................................................. 375 Criando Redirecionamentos Customizados............................................................................................................................. 375 Configurando um Servidor Memcache.................................................................................................................................... 376 Usando o Autoloader do Joomla............................................................................................................................................... 378
Resumo............................................................................................................................................................... 379 Obrigado............................................................................................................................................................. 380
■■Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
381
xv
BOOK_AdvancedJoomla.indb 15
13/10/2014 13:21:33
Sobre o Autor Dan Rahmel vem escrevendo sobre Joomla! por mais de uma década. Ele é autor de mais de 24 livros, incluindo Dominando Joomla! - Do Iniciante ao Profissional (Editora Alta Books, 2010). Os seus livros têm sido traduzidos para inúmeros idiomas, incluindo Chinês, Japonês, Espanhol, Francês e Português. Quando não está focando em Joomla!, Dan se especializa em tecnologia web de alta escalabilidade e aplicações de aprendizagem automática. Ele é hoje engenheiro PHP chefe na eHow.com, um site com mais de 90 milhões de visitantes distintos todo mês. Dan desenvolveu vários aplicativos iOS e Android e foi autor do aplicativo Sonic Flashcards que ficou entre os top 25 por cento no concurso de aplicativos para celular Google Android.
xvii
BOOK_AdvancedJoomla.indb 17
13/10/2014 13:21:33
Sobre o Revisor Técnico Chad Windnagle fez bacharelado em Negócios e Gerenciamento de TI em 2013 pela SUNY Delhi University em Upstate, Nova York, e recebeu o prêmio Web Design Student of Note (Aluno Web Design de Destaque) da TC31 em 2010. Ele contribuiu significantemente no projeto Joomla! e colabora ativamente com a comunidade em vários esforços, como o Framework para desenvolvedores Joomla!; bem como os principais esforços da comunidade, como o programa Joomla! Google Summer of Code. Chad é hoje desenvolvedor-chefe, e trabalha para a Cohesivesites.com desde 2006.
Crédito da Foto: Dianne Henning
1
Tompkins Cortland Community College
xix
BOOK_AdvancedJoomla.indb 19
13/10/2014 13:21:33
Agradecimentos Este livro nunca teria sido possível não fosse a paciência, a persistência e o apoio de Ben Renow-Clarke. O seu cuidado e as sugestões frequentes melhoraram em mil vezes a qualidade deste livro. Também Dominic Shakeshaft, que esteve no projeto desde o início e acreditou no livro durante os dias mais sombrios, quando parecia que o trabalho talvez nunca fosse se completar. Eu não tenho palavras para agradecer aos dois. A equipe superior da Apress sempre fez o difícil parecer fácil. Eu gostaria de agradecer às pessoas com as quais trabalhei diretamente (Anamika Panchoo, Chad Windnagle, Ralph Moore, Nancy Sixsmith e todos os outros que tiveram de trabalhar incansavelmente na produção e na edição deste livro). Agradeço, também, à minha esposa Elizabeth, que me apoiou durante o período em que trabalhei neste livro por mais tempo do que qualquer um jamais iria suportar. Quantos fins de semana ela teve de ouvir as temidas palavras “eu tenho que trabalhar no livro” e graciosamente cuidou das crianças? Pelos seus muitos sacrifícios, não existem palavras adequadas para expressar a minha gratidão. Agradeço também aos meus amigos (Don Murphy, Greg Mickey, John Taylor, Juan Leonffu, Ed Gildred, David Rahmel e Weld O’Connor) pelo apoio incondicional. Acima de tudo, gostaria de agradecer aos leitores. Ao comprarem este livro, vocês tornam possível que todos nós da indústria do livro trabalhemos para alcançar um resultado de qualidade. Trabalhar por longas horas para completar um livro, sabendo que cada pequeno melhoramento irá ajudar a comunidade Joomla!, é o que realmente faz toda a diferença. Obrigado.
xxi
BOOK_AdvancedJoomla.indb 21
13/10/2014 13:21:33
Introdução Se você abriu este livro, imagino que já aprecie o quanto o Joomla! facilita a administração de um site ou blog. Como eu, você deve estar perplexo com o fato de os excelentes desenvolvedores do Joomla! terem criado um sistema de gerenciamento de Conteúdo2 tão sólido e profissional e, então, terem disponibilizado-o gratuitamente para todo o mundo. Parecido com o seu primo de código aberto WordPress, o Joomla! tem deixado de ser usado apenas em alguns sites rudimentares para ter milhões de implantações em sites avançados. O Joomla! evoluiu para se tornar um sistema tão compreensivo que você pode literalmente fazer qualquer coisa em um site Joomla!, assim como possível de se fazer em um site customizado caro. E, muitas vezes, existe uma extensão gratuita disponível que aumenta o núcleo Joomla! para fazer exatamente o que você quer — com o seu único investimento sendo o tempo que você leva para instalar e configurar. Se você leu o meu outro livro, Dominando Joomla! - Do Iniciante ao Profissional, já terá visto as possibilidades disponíveis para você, se for além das funções básicas do Joomla!. Este livro irá levá-lo aos próximos níveis. Tenha você criado um pequeno site Joomla! que deseja lapidar ou administre um site enorme que esteja se esforçando para dar o próximo passo em direção ao crescimento, este livro irá mostrá-lo como levar o Joomla! ao seu limite e além. Escrevi este livro de modo que você possa dar capacidades tremendas ao seu site Joomla! mesmo tendo algum treinamento relacionado a desenvolvimento ou não. Eu vou envolver tudo, desde a implantação de um servidor avançado até o uso de extensões sofisticadas para a criação de templates de primeira classe. Se você já tem alguma experiência anterior relacionada a desenvolvimento, a informação e os códigos-fonte citados aqui irão dar a você um entendimento avançado sobre como o sistema Joomla! opera de um nível de estrutura subindo até os seus recursos mais interessantes. Se você nunca escreveu uma linha de código na vida, contanto que consiga usar um editor de texto tão simples quanto o Notepad, conseguirá tirar vantagem da maior parte da tecnologia apresentada neste livro. Eu incluí todos os códigos-fonte no texto do livro porque considero a minha experiência de aprendizado frustrante se eu tiver de deixar o texto e consultar algum repositório para examinar o código real. Eu gosto de ter o código bem onde eu possa vê-lo no contexto. Dito isso, eu não iria querer que você precisasse inserir tediosamente as inúmeras linhas de fonte para fazer com que os vários projetos funcionem. Todos os códigosfonte estão disponíveis no site da Alta Books e criei também um projeto no Github em https://github.com/ drahmel/Advanced-Joomla. Eu vou adorar que você implemente, critique os códigos e faça melhorias neles. O Joomla! tem dado certo por causa do número de pessoas que tem feito significantes contribuições ao projeto, desde códigos até templates e tutoriais. A força real do Joomla! é a sua comunidade. Eu espero que você se torne um de nós!
2
CMS - Content Management System.
xxiii
BOOK_AdvancedJoomla.indb 23
13/10/2014 13:21:33
CAPÍTULO 1 mmm
Agilizando o Processo de Criação Se você usou o Joomla para criar e gerenciar um site, provavelmente está maravilhado pelo poder e pela flexibilidade que ele pode proporcionar. Você criou um site robusto e atraente no tempo que gastaria para criar manualmente uma página simples. Agora está pronto para turbinar o seu site com uma configuração avançada e extensões customizadas. Você quer adicionar conteúdo novo rapidamente e contornar alguns dos obstáculos do caminho para dominar o Joomla. Para isso, você veio ao lugar certo. As novas funcionalidades disponíveis no Joomla têm tornado possível manter um site profissional de alto tráfego sem forçá-lo a aprender programação. Você literalmente obtém milhares de homens-hora de desenvolvimento — tudo para download gratuito. Ainda melhor, o Joomla foi escrito por programadores que possuem entendimento aguçado das melhores formas de permitir que desenvolvedores criem uma extensão do sistema existente, sem comprometer a estrutura e a segurança do núcleo do Framework1. Dessa forma, você pode fazer tantas ou tão poucas customizações ao seu site quanto quiser. Eu talvez esteja tentando converter os convertidos aqui, mas a seguir estão algumas das incríveis funções do Joomla, nas quais nos basearemos neste livro:
1
••
Sistema de template robusto e fácil de usar: O sistema de template, é, de certo modo, o núcleo do Joomla, no qual a ampla variedade de templates fantásticos (tanto gratuitos quanto comerciais) tem permitido a qualquer webmaster instalar o Joomla de forma simples e adicionar um template para criar um site completamente profissional e elegante. O sistema de template tem sido aumentado de muitas formas, para permitir que um site Joomla tenha toda a variedade e a flexibilidade de um site customizado (mais sobre esse assunto será abordado no Capítulo 3).
••
Gerenciamento de conteúdo: O Joomla possui algumas das maneiras superiores de se gerenciar conteúdo, que incluem a habilidade de mover centenas de artigos ao mesmo tempo ou definir a URL para um artigo específico. Você pode compartilhar as responsabilidades de edição de conteúdo, criando um sistema de autorização. O Joomla também inclui as capacidades mais básicas, como a edição de rich text, entrada de metadados, paginação e mais (a administração de conteúdo avançado será abordada no Capítulo 8).
••
Sistema de extensão que permite todo tipo de customização: O Joomla possui um dos sistemas de extensão mais robustos e bem desenvolvidos, que permitem que módulos, componentes e plugins estendam a funcionalidade do site. Você talvez já saiba como criar a suas próprias extensões simples, mas, neste livro, eu o levarei ao próximo nível, em que você poderá criar praticamente qualquer funcionalidade que possa precisar em seu site (e, para quem não é programador, você irá aprender como usar widgets terceirizados no próximo capítulo).
Ambiente que adiciona funcionalidades e estrutura de programação a uma linguagem. Neste Caso, o Joomla é Framework e o PHP, a linguagem.
1
BOOK_AdvancedJoomla.indb 1
13/10/2014 13:21:33
CAPÍTULO 1 m Agilizando o Processo de Criação
••
Completa interface Administrator GUI2: A interface Administrator é atrativa e poderosa. Com cada nova versão do Joomla, surgem muitos aperfeiçoamentos e revisões, e a interface de gerenciamento do usuário se tornou consistente entre os vários Gerenciadores (Gerenciador de Extensão, Gerenciador de Conteúdo e assim por diante).
••
Opções de Otimização das Funções do Mecanismo de Busca (SEO3): Os desenvolvedores do Joomla dedicaram muito esforço para “assar” as funções do SEO de modo que um webmaster Joomla possa receber otimizações, as quais as empresas normalmente precisam pagar a fim que um especialista possa detalhá-las para elas. A maioria dos problemas mais comuns que importunam os sites customizados nunca afeta os sites criados no Joomla. O sistema garante que cada página tenha um título, que as URLs sejam amigáveis aos mecanismos de busca (se essa opção estiver ligada), inclui suporte de redirecionamento 301 para gerenciar a colocação da página, e uma série de outras funções (você irá aprender como configurar essas funções no Capítulo 7).
Embora o Joomla seja um produto fantástico, quase não existe um treinamento formal para que ele seja configurado e usado. Isso significa que algumas das funções mais poderosas não são usadas ou são usadas de forma incorreta. Para muitos criadores de conteúdo Joomla, às vezes, criar e ajustar a apresentação daquele conteúdo pode ser um processo desafiador. Neste capítulo, irei ajudá-lo a resolver alguns dos problemas comuns e tornar a vida de um administrador de site muito mais fácil e mais satisfatória. Uma maior produtividade com o sistema aumentará tanto a qualidade quanto a quantidade do conteúdo do site porque o seu tempo não será gasto lidando com esses obstáculos. Depois que você tiver ganhado um entendimento fundamental da tecnologia básica por trás do sistema Joomla — saiba que isso é difícil de obter sem um exame rotineiro do código Joomla real —, você terá um longo caminho até dominar o Joomla. Tirar vantagem das novas funções Joomla e adotar tecnologias auxiliares (tais como a tecnologia Search-Engine-Friendly4 ou instalando um editor terceirizado como o WYSIWYG5) pode significar a diferença entre manutenção efetiva de conteúdo e frustração diária. Este capítulo irá descrever as causas de alguns desses problemas e várias soluções ou alternativas. Na maioria das vezes, as soluções vêm de repensar como um resultado desejado precisa ser alcançado. O Joomla foi desenvolvido para ser usado de maneiras específicas, e, às vezes, forçá-lo em um processo de operação inadequado pode ser contraprodutivo.
Configurando as Folhas de Estilo do Editor Você já notou que frequentemente a aparência de um artigo no editor não bate com aquela exibida na página final? As fontes mudam, os tamanhos aumentam e diminuem, e, às vezes, apesar de dar bastante atenção à exatidão dos formatos definidos no editor, a aparência é completamente diferente. Essa situação pode ser frustrante para um webmaster Joomla, mas isso serve como um exemplo útil para se aprender como rastrear e corrigir um problema usando a interface Administrator do Joomla. Vamos dar uma olhada em um exemplo. Na Figura 1-1, você verá uma exibição paralela de um artigo no TinyMCE6 Editor e outra na exibição da página principal. A fonte, no caso do editor, é do tipo sans serif (como a Arial ou Helvetica), mas a página mostra uma fonte serif (como a Times New Roman). O tamanho parece completamente diferente também. Quando o editor e a exibição final se diferem tanto assim, é difícil para qualquer autor de site confiar na exibição do seu trabalho.
2
Graphical User Interface — Interface Gráfica do usuário.
Search Engine Optimization. URL amigáveis — URL que possuem uma nomenclatura fácil de se entender. WHAT YOU SEE WHAT YOU GET — Editor de textos Visual. 6 Editor WEB WYSWYG. 3 4 5
2
BOOK_AdvancedJoomla.indb 2
13/10/2014 13:21:33
CAPÍTULO 1 m AgiLizAndO O PrOCessO de CriAçãO
Figura 1-1. Esta exibição lado a lado da visão de um artigo no editor (à esquerda) e a exibição do mesmo artigo no site (à direita) mostra o quão diferentes eles podem ser. Como resolver isso? O primeiro local para tentar resolver o problema é nos ajustes de configuração do plugin do editor. Nesse caso, você pode acessar facilmente as configurações do editor TinyMCE abaixo do menu Extensions Plugin Manager. Quando os plugins forem exibidos, você encontrará TinyMCE listado sob Editor — TinyMCE (caso não seja exibido, navegue entre as páginas dos Plugins ou faça uma busca). Clique no link fornecido pelo título. Na aba Basic Options, você verá duas opções relevantes para a exibição do editor. A primeira, Template CSS Classes, é definida como “Yes”. A segunda, Custom CSS Classes, fica em branco. Poderíamos ir em frente e passar o diagrama de estilo para uma opção customizada, mas primeiro vamos reparar no porquê de, em muitos casos, a primeira opção não funcionar automaticamente. Devido ao fato de a configuração padrão do template CSS estar definida em “Yes”, é evidente que a exibição do editor deveria ser similar àquela mostrada na página principal. No entanto, o problema não está no editor TinyMCE, mas na maioria dos templates — incluindo alguns dos templates padrão que são fornecidos com o sistema Joomla. O editor TinyMCE busca especificamente por um arquivo CSS com o nome editor.css no diretório / {TEMPLATESELECIONADO}/css. Muitos criadores de templates não incluem esse arquivo no diretório /css. Isso significa que o editor reverte os estilos padrão para exibição. Para ver como isso funciona na prática, selecione o template Beez como sendo o template de exibição padrão para a sua instalação do Joomla. Então, crie um arquivo editor.css no diretório CSS do template. Na minha máquina Windows, o caminho do novo arquivo foi:
Para fazer a demonstração de uma forma meio que ultrajante, vamos deixar a fonte do parágrafo principal 300% maior do que o padrão e defini-la em itálico. Para fazer isso, adicione a definição a seguir ao arquivo editor.css:
Depois de ter salvo o arquivo, abra qualquer documento no editor na interface Administrator do Joomla. Como mostrado na Figura 1-2, todo o texto do parágrafo no seu editor deve estar muito grande e em itálico. O arquivo editor.css dá a você o poder para incluir exatamente os estilos de template que você quer no editor, excluindo, ainda, aqueles que iriam apenas bagunçar a interface.
3
BOOK_AdvancedJoomla.indb 3
13/10/2014 13:21:34
CAPÍTULO 1 m Agilizando o Processo de Criação
Figura 1-2. A aparência de tamanho exagerado do texto do parágrafo deve mostrar que o editor.css está funcionando. Se você quiser pode usar a configuração Custom CSS Classes para especificar o template.css principal do template selecionado. Na interface Administrator, selecione Plugin Manager no menu Extensions. Clique no plugin Editor-TinyMCE, que irá exibir as opções para o TinyMCE. Na caixa de texto Custom CSS Classes, insira o nome do arquivo na pasta de template css que você quer usar para o editor, e o TinyMCE irá carregar esses estilos. Isso coloca todos os estilos disponíveis para o template no menu Styles, como você pode ver na Figura 1-3. A apresentação do editor também adota instantaneamente o estilo que será usado na exibição geral do conteúdo do seu site.
4
BOOK_AdvancedJoomla.indb 4
13/10/2014 13:21:34
CAPÍTULO 1 m Agilizando o Processo de Criação
Figura 1-3. Os estilos do template.css serão exibidos no menu suspenso do editor. Eu prefiro duplicar o CSS principal do template e renomeá-lo para editor.css. Dessa forma, consigo controlar exatamente os estilos que estão disponíveis para os meus colaboradores. Ao criar o arquivo da folha de estilo do editor, você também não precisa usar configurações customizadas ao gerenciar múltiplos sites. A simples instalação de um template com o editor.css irá ativar os estilos apropriados no editor. Qualquer que seja a sua preferência de configuração, o editor TinyMCE agora pode exibir o conteúdo exatamente da mesma maneira como ele será postado no site. Com a estilização final disponível diretamente no editor, a exibição irá se tornar realmente What-You-See-Is-What-You-Get (O que você vê é o que você tem).
m Dica No passado, fazer com que essa funcionalidade desse certo era uma tarefa frustrante para muitos administradores Joomla. Ainda que eu não esteja certo da fonte da dificuldade, muitos administradores finalmente resolveram o problema garantindo que o Joomla estivesse procurando pelo arquivo editor.css no lugar certo. Se você possui algum conhecimento de PHP, pode abrir o arquivo Joomla que inicializa o TinyMCE (localizado em /plugins/editors/tinymce/tinymce.php). Nesse arquivo, você encontrará uma linha parecida com (!file_ exists($templates_path . ‘/’ . $template . ‘/css/editor.css’)) e pode simplesmente adicionar um echo PHP como echo $templates_path . ‘/’ . $template . ‘/css/editor.css’; na linha anterior. Quando você atualizar a página do editor e executar o View Source no seu navegador, deve ver o caminho exato onde o Joomla está buscando pelo arquivo do template CSS.
Preparando um Artigo de Categoria Staging (Homologação) Na maioria dos sites em produção, você não vai querer que edições em progresso apareçam no site. Devido ao fato de o Joomla não distinguir entre versões de um artigo da forma como outros CMSs fazem, você precisará de uma alternativa que garanta que o artigo, que ainda não está pronto para ser publicado mundialmente, não seja visto prematuramente. A forma mais fácil de resolver esse problema é a criação de uma categoria staging. Em desenvolvimento profissional, os sites muitas vezes criam uma “área de homologação” ou um “servidor de homologação” presentes no servidor de produção ou que reproduzem exatamente o ambiente do servidor. Nessa área, os itens que estão quase prontos para produção podem ser testados para assegurar a qualidade antes de serem publicados. A criação de uma categoria staging no seu servidor de produção oferece o mesmo ambiente de teste pré-publicação.
5
BOOK_AdvancedJoomla.indb 5
13/10/2014 13:21:34
CAPÍTULO 1 m Agilizando o Processo de Criação
Além de conter o novo conteúdo, uma categoria staging pode conter também artigos criados para substituir outros artigos. Se o artigo é um conteúdo novo, simplesmente definir a data de publicação para o futuro pode ser o suficiente para mantê-lo indisponível, de modo que colocá-lo na categoria staging não será necessário. No entanto, no caso de um conteúdo existente em edição, você provavelmente não quer que ele seja tirado do ar enquanto está sendo revisado, e muito menos que o público veja o trabalho de edição acontecendo. Será necessário então, fazer uma cópia do artigo existente e colocá-lo em um local onde ele não será confundido com a outra versão. Por exemplo, se você abrir o artigo em Article Manager, clicando no botão Save as Copy, uma cópia será criada na mesma categoria em que o original está. No entanto, a diferença entre os dois não é muito óbvia, como mostrado na Figura 1-4.
Figura 1-4. A única diferença entre o artigo atualmente publicado e a atualização em processo é o ID de ambos. Ainda que você possa checar a coluna da direita em busca do ID de artigo mais alto (o novo artigo sempre terá um número maior), existe uma possibilidade substancial de o artigo errado ser atualizado. Um método muito melhor seria criar uma categoria de onde os artigos atualizados possam ser copiados — a categoria staging7. Dessa forma, não haveria confusão, pois a categoria sempre iria declarar que o artigo não está em uma categoria que será exibida no site. Configure a sua categoria staging da seguinte forma:
7
1.
Selecione o conteúdo Category Manager opção Add New Category para exibir o gerenciador.
2.
Defina o título da nova categoria como Categoria Staging.
3.
Defina Status como Unpublished.
4.
Defina as permissões como quiser. Geralmente, você deve reservar as propriedades Delete e Edit Own para editores, publicadores e administradores.
5.
Clique no botão Save & Close para criar a nova categoria.
6.
Selecione o conteúdo Article Manager para mostrar todos os artigos atuais.
7.
Abra um artigo publicado que precisa ser editado clicando no título.
8.
No menu suspenso Category, selecione Categoria Staging.
9.
Clique no botão Save as Copy para criar a duplicata na área de staging.
O nome da categoria é apenas uma opção, podemos utilizar outros nomes como homolog. O importante é o objetivo.
6
BOOK_AdvancedJoomla.indb 6
13/10/2014 13:21:34
CAPÍTULO 1 m Agilizando o Processo de Criação
Agora você pode editar a cópia na categoria staging sem qualquer risco de o artigo original ou de um documento em processo de edição ser exposto ao público. Quando você estiver pronto para publicar a versão revisada, pegue a versão atual offline abrindo o artigo original, incluindo um sufixo ao codinome como “-antigo” (dois documentos não podem ter o mesmo codinome na mesma categoria), e altere o status para Unpublished (Não publicado). Quanto ao novo artigo, defina o status como Published (Publicado) e defina a categoria para o local do artigo original e a nova versão estará no ar. Se quiser deixar o seu ambiente de staging ainda mais próximo da produção, você pode criar um item de menu que consulte essa categoria e a torne disponível apenas para o pessoal nos bastidores (como os editores e administradores). Essa técnica irá permitir que você veja os artigos em uma configuração publicada como um layout Category Blog para a sintonização de links “leia mais” e outros aspectos da exibição do artigo. Esse tipo de sistema também fornece um local conveniente para editores de sites visualizarem todas as atualizações que estão sendo trabalhadas. Criar uma categoria chamada “staging” em todas as seções principais do seu site pode simplificar bastante o processo de gerenciamento de atualizações.
m Dica Em desenvolvimento profissional de software, o termo “staging” se refere a um servidor (por exemplo, “leve o código até o servidor staging”) ou a uma designação de onde o código ou dado está sendo mantido antes de ser levado à produção. Isso vem do ramo da construção civil, em que o termo se refere a uma estrutura temporária usada no processo de construção, como as plataformas horizontais que permitem que os trabalhadores fiquem de pé sobre o andaime. Em se tratando de desenvolvimento de software, “staging” é uma área de espera ou servidor especial onde as coisas podem ser modificadas e testadas em um ambiente próximo ao de uma produção.
Anatomia do Processo de Exibição do Artigo Depois de usar o Joomla por qualquer período de tempo, você provavelmente terá obtido alguns resultados confusos ao tentar fazer com que os artigos fossem exibidos de uma maneira específica. Existem dezenas de problemas que podem causar essa frustração. Uma escolha de fonte, tamanho e estilo pode ter exatamente a mesma aparência no editor, ainda que, quando renderizada pelo site, ela mude completamente. Talvez uma configuração que você tenha usado por dezenas de vezes não funcione da forma como esperava. Por exemplo, você talvez tenha desabilitado a opção Show Title (Exibir Título) para um artigo, e acaba descobrindo que o título continua sendo exibido. Em outras vezes, alterações nas preferências globais parecem não ter qualquer efeito que seja. Talvez se gastem horas tentando rastrear a fonte da adversidade. Esse tipo de problemas de configuração é raramente causado por um problema real no Joomla. Devido ao fato de o gerenciador ter sido criado para se obter o máximo de controle, ele possui muitas configurações interligadas e conectadas que podem afetar quando, onde e como os itens de um artigo são exibidos. Isso significa que uma configuração de exibição em um lugar pode ser ignorada em outro. Infelizmente, quando muitas dessas configurações entram em cena para um único artigo, às vezes é difícil determinar qual delas é a dominante que está sendo usada. O número de locais para várias configurações pode confundir até mesmo um usuário experiente. A seção a seguir irá ajudá-lo a desenrolar as relações das várias configurações e fornecer um mapa de modo que você possa alcançar a apresentação que deseja rapidamente. Aprender onde e como configurar várias peças de metadados usados pelo sistema de apresentação irá permitir que você alcance a aparência desejada no seu site. Isso também agilizará os seus esforços para dar ao seu site uma identidade consistente e aos seus visitantes uma experiência coerente. Nós iremos nos aprofundar em cada uma dessas áreas e demostraremos as várias situações em que uma configuração que parece afetar diretamente a exibição não o faz. Então a configuração que realmente fará as mudanças é demonstrada.
7
BOOK_AdvancedJoomla.indb 7
13/10/2014 13:21:34