Este documento trata de uma customização simples do tema base do Mapas Culturais para novas instalações, e se restringe a customização das cores, imagens, textos e configuração do posicionamento inicial dos mapas. Este é o nível de customização utilizado nos diversos temas do repositório, como por exemplo os temas de Blumenau (blumenaumaiscultura.com.br), Ceará (mapa.cultura.ce.gov.br), Sobral (cultura.sobral.ce.gov.br) e SaoJose (lugaresdacultura.org.br).
Neste documento será feito um tema de exemplo para uma Secretaria Municipal de Cultura cuja sigla é SECONDO, de uma cidade fictícia chamada Macondo. O nome do site será Macondo Cultural.
Veja também como criar campos de informações adicionais no seu tema.
- Estrutura do Tema
- Criando o tema
- Criando um repositório do tema no Github
- Estrutura de arquivos do tema BaseV1
O tema padrão que do mapas é o tema BaseV1
, localizado na pasta src/protected/application/themes
, e esse tema contém todos os templates, imagens, estilos e scripts que são usados para renderizar as páginas (Ex: Mapa, Painel, Home..).
É possível estender o tema criando uma pasta, de modo que todos os arquivos que forem adicionados no tema "filho" irão sobrescrever os arquivos originais do tema BaseV1
, isso inclui os templates, imagens, estilos e scripts. A estrutura completa está na seção Estrutura de arquivos do tema BaseV1.
IMPORTANTE: É necessário tomar cuidado ao sobrescrever os arquivos, já que posteriormente os arquivos do tema
BaseV1
podem ser alterados (incluindo uma nova funcionalidade, por exemplo) e isso não afetará o tema estendido.
Antes de decidir sobrescrever um arquivo, é indicado que verificar se não é possível efetuar a alteração desejada utilizando hooks
, que pode ser consultado na documentação Guia do Desenvolvedor
O primeiro passo é copiar o template de tema, disponível na pasta src/protected/application/themes/TemplateV1, para a pasta do novo tema: src/protected/application/themes/Macondo ¹.
Feito isto renomeie o namespace TemplateV1, na primeira linha do arquivo Theme.php, para o namespace do Tema (de preferência o mesmo nome da pasta)
<?php
namespace Macondo;
...
¹ A princípio o tema pode estar em qualquer pasta acessível pelo usuário que roda a aplicação, porém por limitações do SASS é necessário colocar hardcoded o caminho para o tema BaseV1. Por esta razão colocamos o tema dentro da pasta src/protected/application/themes/ e importamos os arquivos SASS do tema BaseV1 utilizando a linha abaixo:
@import "../../../../BaseV1/assets/css/sass/main";
O tema BaseV1 do Mapas Culturais utiliza uma extensão da linguagem CSS chamada SASS, e é através desta que são feitas as personalizações dos estilos do tema.
A personalização das cores, fontes e estilos é feita de duas maneiras: definindo os valores das variáveis utilizadas nos diversos arquivos sass (.scss) e, nos casos em que a definição das variáveis não é suficiente, sobrescrevendo as classes/estilos CSS.
A definição de novos valores para as variáveis deve ser feita no arquivo assets/css/sass/_variables.scss do tema filho, e uma lista completa das variáveis, assim como seus valores padrão, pode ser encontrada no arquivo _variables.scss do tema BaseV1.
No exemplo abaixo são definidas as variáveis das cores principais² que são utilizadas em diversos lugares do tema¹.
$brand-primary: #5064A5 !default;
$brand-event: #F7931D !default;
$brand-agent: #5FB643 !default;
$brand-space: #AB1F24 !default;
$brand-project: #795099 !default;
$brand-seal: #795099 !default;
$brand-devs: #CE5AA1 !default;
¹ Para saber com mais precisão aonde uma variável é utilizada e, por consequência, o que será afetado e aonde estarão os efeitos de uma modificação, a melhor maneira é fazer uma busca pelo nome da variável (por exemplo $brand-primary) dentro da pasta sass do tema BaseV1.
² Alterar as cores dos eventos, agentes e/ou espaços implica em recriar os arquivos dos pins (ver os arquivos de imagens que começam com pin- e agrupador-) utilizados nos mapas para estas entidades.
Quando a modificação que se deseja fazer é mais complexa e não é possível de fazê-la com uma simples mudança de valor de uma variável, ou a propriedade que se quer alterar não é definida por uma variável, ou ainda se a alteração deve ser num caso muito específico, como exemplo o tamanho da caixinha de edição do nome de agentes, o caminho a ser adotado é sobrescrever a classe/estilo.
Este nível de personalização deve ser feito no arquivo assets/css/sass/_overrides.scss do tema filho.
No exemplo abaixo mudamos a altura da imagem de verificado para 100px;
.widget-verified {
height: 100px;
}
Se for utilizar imagens nos estilos, como por exemplo imagens de fundo, ver a seção Utilizando imagens nos estilos.
Durante o processo de desenvolvimento do tema, a melhor maneira de se compilar o sass é utilizando o comando sass --watch (ver documentação do sass) que este recompilará o .css sempre que houver modificações nos arquivos .css.
Entre pela linha de comando na pasta assets/css do tema filho e execute o seguinte comando:
sass --watch sass/main.scss:main.css
Qualquer imagem utilizada pelo tema BaseV1 pode ser substituída facilmente bastando, para isto, colocar uma imagem de mesmo nome na pasta assets/img do tema filho.
Por exemplo, para personalizar as imagens utilizadas como selo de que o conteúdo é verificado/oficial, basca colocar os arquivos com o brasão da instituição na pasta assets/img, obviamente respeitando os tamanhos e proporções (largura e altura).
assets/img/unverified-seal.png
assets/img/verified-icon.png
assets/img/verified-seal.png
assets/img/verified-seal-small.png
Para utilizar uma nova imagem no tema filho, primeiro coloque o arquivo da imagem na pasta assets/img e em seguida chame o arquivo da seguinte forma no template, utilizando a função asset do tema:
<img src="<?php $this->asset('img/nome-da-imagem.png'); ?>" >
Para utilizar uma imagem nos estilos é necessário pedir para a aplicação publicar esta imagem antes de utilizá-la. Para tal basta chamar, no método _publishAssets do arquivo Theme.php do tema filho, a função asset do tema passando false como segundo parâmetro, que indicando que não é para imprimir a url do asset publicado.
Exemplos:
protected function _publishAssets() {
// somente publica o asset
$this->asset('img/imagem-de-fundo.png', false);
// publica e coloca a url do asset publicado no objeto MapasCulturais.assets para o js
$this->jsObject['assets']['logo-instituicao'] = $this->asset('img/logo-instituicao.png', false);
}
Da mesma forma como acontece com as imagens, qualquer arquivo .php das pastas views e layouts pode ser substituído facilmente, bastando para isto, que seja criado um arquivo com o mesmo nome no tema filho.
Os três arquivos mais comumente substituídos, e que já são incluídos no template de tema TemplateV1, são os seguintes:
layouts/parts/editable-entity-logo.php // logo que aparece na barrinha cinza da edição de entidades
layouts/parts/header-about-nav.php // menu da direita do header
layouts/parts/header-logo.php // logo do site, a esquerda do header
Os textos utilizados na home e em alguns outros lugares do site, como nos textos das páginas "Sobre" e "Como Usar", são definidos no método _getTexts arquivo Theme.php. O template de tema TemplateV1 contém todos os textos configuráveis comentados com os valores padrão.
Abaixo configuramos alguns textos de acordo com nossa instalação fictícia:
'site: name' => 'Macondo Cultural',
'site: in the region' => 'na cidade de Macondo',
'site: of the region' => 'da cidade de Macondo',
'site: owner' => 'Secretaria Municipal de Cultura de Macondo',
'site: by the site owner' => 'pela Secretaria Municipal de Cultura de Macondo',
'home: abbreviation' => "SECONDO",
'home: colabore' => "Colabore com o Macondo Cultural",
'search: verified results' => 'Resultados da SECONDO',
'search: verified' => "SECONDO"
Os textos das páginas Sobre e Como Usar são pensados para serem genéricos e utilizam dos textos definidos acima.
Caso os textos fornecidos pelo tema BaseV1 não supra as necessidades, basta criar os arquivos na pasta pages do tema filho e escrever, utilizando as linguagens Markdown ou HTML para formatação, os novos textos.
O primeiro passo para configurar¹ o mapas da busca e das páginas de criação de agentes e espaços, é conseguir os valores exatos da latitude, longitude e zoom.
A maneira mais simples de se fazer isto é através da própria página de busca, posicionando e definindo o zoom do mapa exatamente como ele deve se encontrar quando um usuário entrar na busca, e copiando os valores que aparecem na URL como no exemplo abaixo:
/busca/##(global:(enabled:(agent:!t),filterEntity:agent,map:(center:(lat:10.590252550882942,lng:-74.18719768524169),zoom:15)))
latitude: 10.590252550882942
longitude: -74.18719768524169
zoom: 15
Após obter os valores, defina no arquivo conf-base.php do tema filho os valores das chaves 'maps.center' e 'maps.zoom.default' com os valores obtidos.
// latitude,longitude do centro do mapa da busca e do mapa da criação de agentes e espaços
'maps.center' => [10.590252550882942, -74.18719768524169],
// zoom padrão do mapa da busca
'maps.zoom.default' => 15,
¹ Há mais opções de configurações dos mapas que não serão abordadas neste documento mas que estão comentadas com os valores padrão no arquivo conf-base.php do TemplateV1.
As divisões geográficas configuradas devem ser as mesmas que foram importadas pelos shapefiles. No nosso exemplo usaremos somente zona e bairro.
'app.geoDivisionsHierarchy' => [
'zona' => 'Zona',
'bairro' => 'Bairro'
],
É recomendado que ao criar o tema ou efetuar alterações no tema, as alterações estejam em um repositório git para posteriormente seja possível clonar o tema de qualquer lugar, seja para utilizar em um servidor em produção ou para utilizar um ambiente de desenvolvimento.
Para criar o repositório é necessário seguir os seguintes passos:
- Criar uma conta no Github
- No menu superior direito apertar a opção New Repository
- Preencher a caixa de texto Repository name com o nome do repositório (recomendável utilizar o mesmo nome escolhido na pasta do tema, para que ao clonar o repositório o nome fique correto)
- Apertar o botão Create repository
- Executar os seguintes comandos após criar o repositório (alterando Macondo para o nome do seu repositório/tema):
$ echo "# Macondo" >> README.md
$ git init
$ git add --all
$ git commit -m "first commit"
$ git remote add origin https://github.com/[endereco_github]/Macondo.git
$ git push -u origin master
Dentro da pasta do tema, se alguma alteração for feita em qualquer arquivo será possível ver os arquivos que foram alterados utilizando o comando git status
, mostrando os arquivos modificados. Ao alterar arquivos o resultado deve ser parecido com isso:
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Theme.php
modified: conf-base.php
no changes added to commit (use "git add" and/or "git commit -a")
Neste exemplo, houveram alterações nos arquivos Theme.php e no arquivo conf-base.php. Para publicar esse arquivos é necessário utilizar os comandos
git add [nome_do_arquivo]
git commit -m "[mensagem_com_descricao_da_alteracao]"
git push
Como no exemplo, para publicar os arquivos Theme.php e conf-base.php os comando seriam assim:
$git add Theme.php
$git add conf-base.php
$git commit -m "Alterações de configurações do Tema"
$git push
Após as alterações estarem publicadas em um repositório do Github, podemos obter o código publicado com o comando git clone https://github.com/[endereco_github]/Macondo
, isso irá criar uma pasta chamada Macondo onde o comando foi executado. Preferencialmente executado da pasta themes
da instalação do mapas:
$ cd src/protected/application/themes
$ git clone https://github.com/[endereco_github]/Macondo
Se alguma alteração for efetuada no repositório do Github e for necessário atualizar o tema localmente, pode se utilizar o comando git pull
para atualizar o código localmente.
IMPORTANTE: Ao utilizar o comando
git pull
verificar se não existem arquivos locais que foram alterados e podem ser sobrescritar ou gerar algum conflito.
Para mais detalhes sobre como utilizar o git, é recomendável a leitura da documentação e artigos úteis:
- https://git-scm.com/book/pt-br/v1/Primeiros-passos-No%C3%A7%C3%B5es-B%C3%A1sicas-de-Git
- http://rogerdudler.github.io/git-guide/index.pt_BR.html
- BaseV1/
- db-updates.php scripts para atualização de banco que afetam todos os temas filhos.
- Theme.php classe MapasCulturais\Themes\BaseV1\Theme. Todos os temas filhos estendem esta classe.
- assets/ pasta onde ficam os arquivos estáticos
- css/
- sass/ arquivos fonte .scss (precisam ser compilados).
- fonts/ as fontes utilizadas no tema BaseV1.
- img/ as imagens utilizadas no tema BaseV1.
- agrupador-agente.png pin para grupo de agentes no mapa da busca.
- agrupador-combinado-agente-evento.png pin para grupo de agentes e eventos no mapa da busca.
- agrupador-combinado-espaco-agente.png pin para grupo de agentes e espaços no mapa da busca.
- agrupador-combinado-espaco-evento.png pin para grupo de espaços e eventos no mapa da busca.
- agrupador-combinado.png pin para grupo de agentes, espaços e eventos no mapa da busca.
- agrupador-espaco.png pin para grupo de espaços no mapa da busca.
- agrupador-evento.png pin para grupo de eventos no mapa da busca.
- avatar--agent.png avatar padrão do agente - imagem que aparece como avatar do agente quando o usuário não subiu nunhuma imagem.
- avatar--event.png avatar padrão do evento - imagem que aparece como avatar do evento quando o usuário não subiu nunhuma imagem.
- avatar--project.png avatar padrão do projeto - imagem que aparece como avatar do projeto quando o usuário não subiu nunhuma imagem.
- avatar--space.png avatar padrão do espaço - imagem que aparece como avatar do espaço quando o usuário não subiu nunhuma imagem.
- favicon-32.ico favicon de 32px.
- favicon.ico favicon de 16px.
- fundo.png
- icon-circulo.png ícone do botão de selecionar uma área do mapa da busca.
- icon-fullscreen.png ícone do botão fullscreen dos mapas.
- icon-localizacao.png ícone do botão que centraliza o mapa baseado na localização do usuário.
- icon-zoom-in.png ícone do botão de zoom + dos mapas.
- icon-zoom-out.png ícone do botão de zoom - dos mapas.
- instituto-tim-white.png
- layers.png ícone do botão para selecionar as camadas para serem exibidas no mapa da busca.
- marca-da-org.png logotipo da marca da organização.
- marker-icon.png pin que exibe a localização do usuário no mapa da busca.
- pin-agente.png pin do agente (não agrupado) nos mapas.
- pin-espaco.png pin do espaço (não agrupado) nos mapas.
- pin-evento.png pin do evento (não agrupado) nos mapas.
- pin-sombra.png sombra dos pins.
- setinhas-editable.png setinhas utilizadas nas caixas de edição dos campos das entidades.
- share.png imagem padrão utilizada nos compartilhamentos (facebook, google+, etc.) quando não há outra imagem a ser utilizada, como por exemplo o avatar da entidade.
- spinner_192.gif spinner que é utilizado no carregamento dos vídeos das entidades.
- spinner-black.gif spinner que é utilizado em diversas partes do tema quando o fundo é claro.
- spinner.gif spinner que é utilizado em diversas partes do tema quando o fundo é escuro.
- tim.png
- unverified-seal.png
- verified-icon.png
- verified-seal.png
- verified-seal-small.png
- tour/
- js/
- vendor/
- css/
- layouts/
- default.php
- search.php
- panel.php
- parts/
- agenda-content.php
- agenda-header.php
- agenda.php
- ajax-uploader.php
- busca-avancada.php
- downloads.php
- editable-entity-logo.php
- editable-entity.php
- entity-parent.php
- entity-status.php
- footer.php
- gallery.php
- header-about-nav.php
- header-logo.php
- header-main-nav.php
- header.php
- link-list.php
- metalist-form-template.php
- owner.php
- panel-agent.php
- panel-app.php
- panel-em-cartaz.php
- panel-event.php
- panel-nav.php
- panel-project.php
- panel-registration.php
- panel-space.php
- panel-seal.php
- redes-sociais.php
- related-agents.php
- templates.php
- verified.php
- video-gallery.php
- widget-areas.php
- widget-tags.php
- pages/
- views/
- agent/
- create.php -> single.php
- edit.php -> single.php
- single.php
- app/
- create.php
- edit.php
- single.php -> edit.php
- auth/
- event/
- create.php -> single.php
- edit.php -> single.php
- single.php
- generic/
- panel/
- project/
- create.php -> single.php
- edit.php -> single.php
- report.php
- single.php
- registration/
- site/
- space/
- create.php -> single.php
- edit.php -> single.php
- single.php
- agent/