Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Temas 2.0: Difference between revisions

From MoodleDocs
(Note about plan not to migrate this page to the new developer resources. See template for more info.)
 
(86 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Template:WillNotMigrate}}
{{Template:Themes}}{{Moodle 2.0}}Bem vindo ao novo mundo de temas do moodle 2.0 !!
{{Template:Themes}}{{Moodle 2.0}}Bem vindo ao novo mundo de temas do moodle 2.0 !!


O '''Moodle Temas''' permite que você mude o visual do seu site moodle. Você pode contribuir com temas já existentes ou criar seus próprios temas para compartilha com a comunidade moodle. Os temas podem também ser baseados em temas já existentes com algumas personalizações. Você pode fazer isso através do CSS, mudando a estrutura de marcação subjacente e também adicionando javascript para adicionar novos recursos.
O '''Moodle Temas''' permite que você mude o visual do seu site moodle. Você pode usar temas já existentes ou criar seus próprios temas para compartilha com a comunidade moodle. Os temas podem também ser baseados em temas já existentes com algumas personalizações. Você pode fazer isso através do CSS, mudando a estrutura base e também adicionando javascript para adicionar recursos mais avaçados.


A maioria dos temas Moodle são desenvolvidos adicionando algumas mudanças no novo tema baseando-se  em um tema que já existe.[A arquitetura do Tema Moodle é desenvolvido de tal forma que o tema base funcionará como uma queda-back que é usado quando nada foi definido no tema com base nele]. Isso torna mais fácil para quem deseja criar novos temas apenas fazendo algumas mudanças em temas já existentes.
A maioria dos temas Moodle são desenvolvidos adicionando algumas mudanças em um tema que já existe. A arquitetura dos Temas do Moodle é desenvolvida de tal forma que a mesma funcione como base quando nada for definido no tema editado. Isso torna mais fácil para quem deseja criar novos temas apenas fazendo algumas mudanças em temas já existentes.


Essa documentação explica como trabalhar com temas do Moodle e pretende ajudar você a criar ou modificar a maioria do temas do Moodle 2.0
Essa documentação explica como trabalhar com no Moodle e pretende ajudar você a criar ou modificar a maioria do temas do Moodle 2.0.


== O que há de novo na versão 2.0 ==
== O que há de novo na versão 2.0 ==
Line 14: Line 15:
* As classes CSS ficaram mais claras e consistentes, alem de IDs em todas paginas do Moodle
* As classes CSS ficaram mais claras e consistentes, alem de IDs em todas paginas do Moodle
* Introdução a arquivos de layout (templates), descrevendo o layout HTML para diferentes tipos de paginas do Moodle
* Introdução a arquivos de layout (templates), descrevendo o layout HTML para diferentes tipos de paginas do Moodle
* Introdução de processadores, que produzem as pequenas “partes” de uma página HTML. Temas avançados podem ter eles ativados manualmente se for decido
* Introdução a métodos padronizados para adição de Javascript aos templetes  
* Introdução a métodos padronizados para adição de Javascript aos templetes  
* Controle mais fácil dos ícones e imagens do Moodle
* Controle mais fácil dos ícones e imagens do Moodle
* O antigo tema "standaed" (padrão) foi dividio em dois temas:
* O antigo tema "standard" (padrão) foi dividio em dois temas:
**'''base''' - contem o layout absolutamente básico, e   
**'''base''' - contem o layout absolutamente básico, e   
**'''standard''' - Que adiciona CSS no tema base para torna-lo parecido com antigo tema padrão   
**'''standard''' - que adiciona CSS no tema base para torna-lo parecido com antigo tema padrão   
*Ajuste de desempenho: Em condições normais de produção, os arquivos CSS são combinados em um único arquivo otimizado, e ambos, arquivo CSS e javaScript são minimizados para assegurar que não haja desperdício  de conexão e trafico.
*Ajuste de desempenho: Em condições normais de produção, os arquivos CSS são combinados em um único arquivo otimizado, e ambos, arquivo CSS e javaScript são minimizados para assegurar que não haja desperdício  de conexão e trafico.


Line 25: Line 27:
Algumas coisas importantes para quem deseja construir bons temas:
Algumas coisas importantes para quem deseja construir bons temas:


# '''config.php''' - Esse arquivo é requisitado em muitos temas. Ele define as configurações  e define requisitos para funcionar o tema Moodle.  
# '''config.php''' - Esse arquivo é requisitado em muitos temas. Ele define as configurações  e define requisitos para funcionar o tema Moodle. Isso inclui o tema, arquivo, região, região padrão e opções
# '''Layouts e arquivo de layout''' - Em config.php existe uma definição para cada tipo de pagina (veja [[#theme_layouts_table|Appendix A: Theme layouts]] para ver uma lista de 12 tipos ). Cada tipo de pagina definido diz qual arquivo de layout será utilizado, que região do bloco essa tipo de pagina deve exibir e assim por diante. O arquivo de layout contem o HTML e o PHP minimo exigido para exibir a estrutura básica das paginas. (Se você conhece Moodle 1.9, Isso seria uma combinação de header.html e footer.html).
# '''Layouts e arquivo de layout''' - Em config.php existe uma definição para cada tipo de pagina (veja [[#theme_layouts_table|Appendix A: Theme layouts]] para ver uma lista de 12 tipos). Cada tipo de definição de página diz qual arquivo de layout será utilizado, qual regiões de bloco esse modelo de página deve exibir e assim por diante. O arquivo de layout contém o HTML e o PHP minimo exigido para exibir a estrutura básica das paginas. (Se você conhece Moodle 1.9, Isso seria uma combinação de header.html e footer.html)
# '''O tema base ''' - Não se destina a ser usado para produção de sites. Estabelece o esquema genérico mais simples possível e inclui apenas CSS essencial para o layout ou para o Moodle como um todo. È a base perfeita para se começar a desenha um tema, pois ha poucos cores, bordas, margens e alinhamentos para substituir. Voce pode simplesmente começar a adicionar o que você precisar
# '''O tema base ''' - Não se destina a ser usado para produção de sites. Estabelece o esquema genérico mais simples possível e inclui apenas CSS essencial para o layout ou para o Moodle como um todo. É a base perfeita para se começar a desenha um tema, pois há poucas cores, bordas, margens e alinhamentos para substituir. Você pode simplesmente começar a adicionar o que você precisar.


===Arquivos  e Pastas===
===Arquivos  e Pastas===
Os arquivos dos temas são localizados em uma pasta com caminho Moodle/Theme e possui varias subpastas. Cada subpastas da pasta Theme corresponde a um tema. Cada tema é definido da seguinte forma:
Os arquivos dos temas são localizados em uma pasta com caminho Moodle/Theme e possui subpastas. Cada tema é definido da seguinte forma:


{| class="nicetable"
{| class="wikitable"
|-
|-
! Diretório
! Diretório
Line 40: Line 42:
|  
|  
| /config.php
| /config.php
| Contem todas as configurações e definições para cada tema.  
| Contém todas as configurações e definições para cada tema.
|-
|-
|  
|  
| /lib.php  
| /lib.php  
| Contem classes especificas e funções que são usadas pelos temas.
| Contém classes especificas e funções que são usadas pelos temas.
|-
|-
|  
|  
| /renderers.php  
| /renderers.php  
| Contem alguns renderes personalizados para o tema.
| Contém qualquer processador personalizado para o tema.
|-
|-
|  
|  
| /settings.php  
| /settings.php  
| Contem configurações personalizadas do tema. Essas configurações locais são definidos para permitir que o usuário do tema possa modifica-lo facilmente. (por exemplo, uma cor de fundo ou uma imagem de cabeçalho)
| Contém configurações personalizadas do tema. Essas configurações locais são definidos pelo tema, permitindo que o usuário do tema possa modificá-lo facilmente. (por exemplo, uma cor de fundo ou uma imagem de cabeçalho)
|-
|-
| /javascript/  
| /javascript/  
|  
|  
| Todos os arquivos JavaScript para o tema especifico devem ser localizados aqui.
| Todos os arquivos JavaScript específicos para o tema devem ser localizados aqui.
|-
|-
| /lang/  
| /lang/  
|  
|  
| Quaisquer arquivos de linguagem especial que o tema exige devem ser localizados aqui.
| Quaisquer arquivos de linguagem especial que o tema exige devem ser localizados aqui.
|-
|-
| /layout/  
| /layout/  
|  
|  
| Contem os arquivos de layout do tema.
| Contém os arquivos de layout do tema.
|-
|-
| /pix/  
| /pix/  
|  
|  
| Contem todas as imagens que o tema usa tanto do CSS quanto dos arquivo de layout.
| Contém todas as imagens que o tema usa tanto do CSS quanto dos arquivo de layout.
|-
|-
|  /pix
|  /pix
Line 80: Line 82:
| /style  
| /style  
|  
|  
| Default location for CSS files.
| Localização padrão para os arquivos CSS.
|-
|-
|
|
|/*.css
|/*.css
|CSS files the theme requires
|CSS arquivos que o tema precisa
|}
|}
Há também diversos lugares que folhas de estilo podem ser incluídas (veja o a seção CSS de como e porquê  abaixo).
==Opções de temas==
Todas as opções de temas são definidos dentro do arquivo config.php. As configurações que são mais usadas são: parents,sheets, layouts e javascripts.
Dê uma olhada em  '''[[#theme_options_table|theme options table]]''' para completar essa lista de opções de temas que incluem algumas configurações menos usadas e mais avançadas.


There are also several other places that stylesheets can be included from (see the CSS how and why section below).


==Theme options==
===Exemplo de uma configuração basica ===
All theme options are set within the config.php file for the theme.  The settings that are most used are: parents, sheets, layouts, and javascripts. Have a look at the '''[[#theme_options_table|theme options table]]''' for a complete list of theme options which include lesser used specialised or advanced settings.
Vamos dar uma olhada em um arquivo com configuração básica de tema e as diferentes partes que a estruturam:
 
<syntaxhighlight lang="php">
 
===Basic theme config example===
Lets have a look at a basic theme configuration file and the different bits that make it up:
<code php>
$THEME->name = 'newtheme';
$THEME->name = 'newtheme';


Line 131: Line 132:
     'navigation'
     'navigation'
);
);
</code>
</syntaxhighlight>


===Basic theme example settings explained===
===Expandindo as configurações de um exemplo básico===
First up you will notice everything is added to $THEME. This is the theme's configuration object, it is created by Moodle using default settings and is then updated by whatever settings you add to it.
Primeiramente, antes de tudo, você vai notar que tudo é adicionado para $THEME. Esse é o objeto para configuração de tema. Ele é criado usando a configuração padrão do Moodle e em seguida atualizado para qualquer configuração que você adicionar.


; $THEME->name : The first setting, is the theme's name. This should simply be whatever your theme's name is, most likely whatever you named your theme directory.
; $THEME->name : A primeira configuração, é o nome do tema. Ele deve ser simplesmente o nome do tema que você quiser nomear. O mais recomendado é que você use o mesmo nome do diretório do tema.


; $THEME->parents : This defines the themes that the theme will extend. In this case it is extending only the base theme.
; $THEME->parents : Esse define os temas que o tema estendera. Nesse caso, você esta apenas ampliando o tema base. Então seu tema será uma extensão de outro tema base.  


; $THEME->sheets : An array containing the names of the CSS stylesheets to include for this theme. Note that it is just the name of the stylesheet and does not contain the directory or the file extension. Moodle assumes that the theme's stylesheets will be located in the styles directory of the theme and have .css as an extension.
; $THEME->sheets : Um vetor contendo os nomes das folhas de estilo CSS para incluir em esse tema. Note que é apenas o nome da folha de estilo e não contém o caminho do diretório ou a extensão do arquivo. No moodle assume que as folhas de estilo do tema serão localizadas no diretório de estilos do tema e tem .css como extensão.


; $THEME->layouts : In this example, two layouts have been defined to override the layouts from the base theme. For more information see the [[#Layouts|layouts]] section below.
; $THEME->layouts : Nesse exemplo, dois layouts foram definidos para substituir o layouts do tema base. Para mais informações você deve ver sessão abaixo [[#Layouts|layouts]].


; $THEME->javascripts_footer : The final setting is to include a JavaScript file. Much like stylesheets, you only need to provide the files name. Moodle will assume it is in your themes JavaScript directory and be a .js file.
; $THEME->javascripts_footer :A configuração final é incluir um arquivo JavaScript. Assim como as folhas de estilo, você só precisa fornecer o nome dos arquivos. Moodle assumirá que eles estarão no diretório JavaScript do seu tema e serão um arquivo .js .


'''''Note''''': When you first begin writing themes, make sure you take a look at the configuration files of the other themes that get shipped with Moodle. You will get a good picture of how everything works, and what is going on in a theme, simply by reading it and taking notice of what it is including or excluding.
'''''Note''''': Quando você começar a escrever seus temas, Certifique-se de dar uma olhada nos arquivos de configuração de outros temas que já vem no Moodle. Você vai ter uma boa idéia de como tudo funciona e vai perceber o que esta acontecendo dentro do tema moodle, conhecendo o que é inclusão ou exclusão dentro do tema.


==CSS==
==CSS==
===Locations of CSS files===
===Localização dos arquivos CSS===
First lets look at where CSS can be included from within Moodle:
Primeiramente vamos da uma olhada onde o CSS pode ser incluído dentro do Moodle:  
; \theme\themename\style\*.css : This is the default location for all of the stylesheets that are used by a theme and the place which should be used by a theme designer.
; \theme\themename\style\*.css :Essa é a localização padrão das folhas de estilo que são usadas por um tema e o local que deve ser usado para o desenvolvimento do seu tema.
 
Novos desenvolvedores de temas devem notar que a ordem em que os arquivos CSS são encontrados e incluídos cria uma hierarquia. Essa ordem assegura que as regras, dentro das folhas de estilo dos temas, tenham prioridade sobre regras idênticas em outros arquivos que podem ter sido introduzidas antes. Isso pode também se extender a outras definições de arquivo (veja vetor principal no arquivo de configuração) e também garante que as regras/definições do tema CSS tenha a última palavra.
 
Há outras localizações que podem ser usadas (embora muito raramente) para incluir CSS em uma página. Um desenvolvedor de um arquivo PHP pode especificar manualmente onde se encontra a folha de estilo no Moodle, como um banco de dados. Normalmente, se código esta fazendo isso, é porque existe uma configuração de um não tema ou de um plugin que precisa de uma informação especial de CSS. Como desenvolvedor de temas, você deve estar ciente da localização de arquivos CSS, mas não tem que se preocupar com isso. Aqui estão alguns exemplos:


New theme developers should note that the order in which CSS files are found and included creates a hierarchy.  This order ensures that the rules, within a theme's style sheets, take precedence over identical rules in other files that may have been introduced before. This can both extend another files definitions (see parent array in the config file) and also ensures that the current theme's CSS rules/definitions have the last say.
; {pluginpath}\styles.css e.g. \block\blockname\styles.css or \mod\modname\styles.css : Cada plugin pode ter seu próprio arquivo styles.css . Este arquivo deve conter apenas as normas CSS necessárias para o módulo e não deve acrescentar qualquer alteração para a aparência do plugin como cores, tamanho das fontes, ou margens. Nada além daqueles que são verdadeiramente requisitados.
Estilos de tema específicos para um plugin devem ser localizados dentro do diretório de estilo do tema.


There are other locations that can be used (although very rarely) to include CSS in a page. A developer of a php file can manually specify a stylesheet from anywhere within Moodle, like the database. Usually, if code is doing this, it is because there is a non-theme config or plugin setting that contains information requires special CSS information. As a theme designer you should be aware of, but not have to worry about, these locations of CSS files. Here are some examples:
; {pluginpath}\styles_themename.css : Este só deve ser usado por desenvolvedores de plugins. Permite escrever CSS, que é projetado para um tema específico sem ter que fazer alterações a esse tema. Você irá notar que esse nunca é usado dentro do Moodle e é destinado para ser usado apenas como código de contribuição.


; {pluginpath}\styles.css e.g. \block\blockname\styles.css or \mod\modname\styles.css : Every plugin can have its own styles.css file. This file should only contain the required CSS rules for the module and should not add anything to the look of the plugin such as colours, font sizes, or margins other than those that are truly required.<br />Theme specific styles for a plugin should be located within the themes styles directory.
===Organização do Núcleo CSS do Moodle===
; {pluginpath}\styles_themename.css : This should only ever be used by plugin developers. It allows them to write CSS that is designed for a specific theme without having to make changes to that theme. You will notice that this is never used within Moodle and is designed to be used only by contributed code.
O próximo passo é olhar para a organização e regras do CSS dentro de um tema. Embora, como um desenvolvedor de temas, é responsabilidade sua criar e organizar seu CSS. Por favor, note que os temas padrões que já vem no Moodle tem uma organização muito clara do CSS.


As theme designers, we will only use the first method of introducing CSS: adding rules to a stylesheet file located in the theme's style directory.
Primeiro tem-se arquivo pagelayout.css. Ele contém o CSS necessário para criar o visual do seu layout. Ele não contém regras que afetam o conteúdo gerado pelo Moodle.


===Moodle's core CSS organisation===
Próximo arquivo é o core.css. Se você abrir o núcleo vai notar que ele contém regras de uso geral (geralmente simples) que não se aplicam a uma seção especifica do Moodle e sim ao Moodle como um todo.
The next thing to look at is the organisation of CSS and rules within a theme. Although as a theme designer it is entirely up to you as to how you create and organise your CSS. Please note that within the themes provided in the standard install by Moodle there is a very clear organisation of CSS.


First is the  pagelayout.css file. This contains the CSS required to give the layouts their look and feel.  It doesn't contain any rules that affect the content generated by Moodle.
Também pode haver regras que se relacionam com seções específicas. No entanto, isso é feito apenas quando há apenas algumas regras para essa seção. Esses pequenos grupos de regras são agrupados e separados por comentários de identificação para cada seção.


Next is the core.css file. If you open up core you will notice that it contains all manner of general (usually simple) rules that don't relate to a specific section of Moodle but to Moodle as a whole.
Finalmente, existem todos os outros arquivos CSS, você vai notar que há um arquivo para cada seção do Moodle, que tem uma coleção significativa de regras.


There can also be rules that relate to specific sections. However, this is done only when there are only a handful of rules for that section. These small clusters of rules are grouped together and separated by comments identifying for which section each relates.
:Para aqueles que estão familiarizados com tema Moodle 1.9, esta organização terá uma grande mudança. Em 1.9, o CSS foi organizado pela sua natureza (por exemplo: cores, layout, outros.)


Finally there are all the other CSS files, you will notice that there is a file for each section of Moodle that has a significant collection of rules.


:For those who are familiar with Moodle 1.9 theme's, this organisation will be a big change. In 1.9, CSS was organised by its nature (for example: colours, layout, other).
===Como escrever regras do CSS eficazes dentro do Moodle===
Em Moodle 2.0, escrever boas regras de CSS é muito importante.


===How to write effective CSS rules within Moodle===
Devido a requisitos de desempenho e limitações do navegador, todos os arquivos CSS são combinados em um único arquivo CSS que é incluído sempre. Isto significa que as regras precisam ser escritas de tal forma que minimize as chances de uma colisão, levando a aplicação de estilos indesejados. Por outro lado, escrever um bom CSS é algo que muitos desenvolvedores aspiram para que nós implementemos em diversas classes da estrutura e acaba estimulando desenvolvedores a usar o nome apropriado das classes.
In Moodle 2.0, writing good CSS rules is incredibly important.


Due to performance requirements and browser limitations, all of the CSS files are combined into a single CSS file that gets included every time. This means that rules need to be written in such a way as to minimise the chances of a collision leading to unwanted styles being applied. Whilst writing good CSS is something most designers strive for we have implemented several new body classes and prompt developers to use appropriate classnames.


====<body> CSS id and classes ====
====<body> CSS id e classes ====
As of Moodle 2.0 the ID tag that gets applied to the body will always be a representation of the URI. For example if you are looking at a forum posting and the URI is '/mod/forum/view.php' then the body tags ID will be '#page-mod-forum-view'.


As well as the body's ID attribute the URI is also exploded to form several CSS classes that get added to the body tag, so in the above example '/mod/forum/view' you would end up with the following classes being added to the body tag '.path-mod', '.path-mod-forum'. Note that '.path-mod-forum-view' is not added as a class, this is intentionally left out to lessen confusion and duplication as rules can relate directly to the page by using the ID and do not require the final class.
A partir do Moodle 2.0 a tag ID (etiqueta de identificação) que é aplicado à estrutura será sempre uma representação de seu endereço. Por exemplo, se você está olhando para uma mensagem do fórum e o endereço é "mod / forum / / view.php ', então a tag ID da estrutura será " # page-mod-forum-view ".


The body ID and body classes described above will form the bread and butter for many of the CSS rules you will need to write for your theme, however there are also several other very handy classes that get added to the body tag that will be beneficial to you once you start your journey down the rabbit hole that is themeing. Some of the more interesting classes are listed below.
Como a identificação da estrutura atribuida ao URI também é explodida para formar diversar classes CSS que são adicionadas para a estrutura, então o exemplo '/mod/forum/view' deveria acabar com a seguinte classe adicionada para a estrutura '.path-mod', '.path-mod-forum'. Observe que '.path-mod-forum-view' não é adicionado como uma classe, sendo intencionalmente deixado de for a para evitar confusão e duplicação, visto que as regras podem ligar diretamente para a página usando o ID e não precisa da classe final.


* If JavaScript is enabled then 'jsenabled' will be added as a class to the body tag allowing you to style based on JavaScript being enabled or not.
O ID e as classes do corpo descrito acima irão forma o básico para muitas das regras CSS que você terá que escrever para o seu tema, no entanto, existe muitas outras classes muito úteis que podem ser adicionadas as tags do corpo. Algumas das classes mais interessantes estão listadas abaixo.
* Either 'dir-rtl' or 'dir-ltr' will be added to the body as a class depending on the direction of the language pack: rtl = right to left, ltr = left to right. This allows you to determine your text-alignment based on language if required.
* A class will be added to represent the language pack currently in use, by default en_utf8 is used by Moodle and will result in the class 'lang-en_utf8' being added to the body tag.
* The wwwroot for Moodle will also be converted to a class and added to the body tag allowing you to stylise your theme based on the URL through which it was reached. e.g. http://sam.moodle.local/moodle/ will become '.sam-moodle-local—moodle'
* If the current user is not logged then '.notloggedin' will be added to the body tag.


What does all of this look like in practise? Well using the above example /mod/forum/view.php you would get at least the following body tag:
* Se o JavaScript é habilitado, então 'jsenabled1' será adicionado como uma classe para a tag do corpo, permitindo-lhe estilo baseado em JavaScript ser ativado ou não
<code html4strict><body id=”page-mod-forum-view” class=”path-mod path-mod-forum” /></code>
* Ou 'dir-rtl "ou" dir-ltr' será adicionado ao corpo como uma classe, dependendo da direção do pacote de idioma: rtl = direita para a esquerda, ltr = esquerda para a direita. Isto permite determinar o seu alinhamento de texto com base na língua, se necessário.
* A classe será adicionada para representar o pacote de idioma em uso atualmente, por padrão en_utf8 é usada pelo Moodle e resultará na adição da na classe 'lang-en_utf8 " à tag do corpo
* O wwwroot para Moodle também será convertido em uma classe e adicionado à tag do corpo, o que lhe permite criar um estilo para seu tema baseado na URL através do qual ele foi atingido. Por exemplo,http://sam.moodle.local/moodle/ se tornará ". sam-moodle-local-moodle '
* Se o usuario corrente não esta logado então '.notloggedin' 'será adicionado à tag do corpo.


====Writing your rules====
O que tudo isso parece na prática? Bem, usando o exemplo acima / mod / forum / view.php, você teria pelo menos a seguinte etiqueta de corpo:
<syntaxhighlight lang="html4strict"><body id=”page-mod-forum-view” class=”path-mod path-mod-forum” /></syntaxhighlight>


By following CSS best-practices and understanding the [http://htmlhelp.com/reference/css/structure.html#cascade cascading order] of CSS a theme developer will reduce collisions and lines CSS that is written. CSS classes have been placed where it is believed anyone may want to apply their own styles.
====Escrevendo suas regras====


When starting to write rules make sure that you have a good understanding of where you want those rules to be applied, it is a good idea to make the most of the body classes mentioned above.
Seguindo as melhores praticas de CSS e compreendendo a ordem em cascata de CSS , o desenvolvedor do tema poderá reduzir colisões e linhas do CSS que é escrito. Classes CSS foram colocadas em locais onde se acredita que qualquer um possa querer aplicar seus próprios estilos CSS.
If you want to write a rule for a specific page make use of the body tag's ID, e.g.:


<code css>#page-mod-forum-view .forumpost {border:1px solid orange;)</code>
Ao começar a escrever regras certifique-se que você tem um bom entendimento de onde você quer que essas regras sejam aplicadas, é uma boa idéia para tirar o máximo partido das classes do body acima mencionadas. Se você quiser escrever uma regra para uma página específica deve-se usar o ID para a tag do corpo:


If you want to write a rule that will be applied all throughout the forum.:
<syntaxhighlight lang="css">#page-mod-forum-view .forumpost {border:1px solid orange;)</syntaxhighlight>


<code css>.path-mod-forum .forumpost {border:1px solid orange;}</code>
Se você quiser escrever uma regra que seja aplicada para todo o forum:


The other very important thing to take into consideration is the structure leading up to the tag you want to style. Browsers apply conflicting styles with priority on the more specific selectors. It can be very beneficial to keep this in mind and write full selectors that rely on the structure of the tags leading to the tag you wish to style.
<syntaxhighlight lang="css">.path-mod-forum .forumpost {border:1px solid orange;}</syntaxhighlight>


By making use of body id's and classes and writing selectors to take into account the leading structure you can greatly minimise the chance of a collision both with Moodle now and in the future.
Outra coisa muito importante para levar em consideração é a estrutura que antecederam a tag que você quer editar. O navegador adota entre os estilos conflitantes aquele que possui seletores mais específicos. Pode ser muito benéfico manter isso em mente e escrever seletores completos que dependem da estrutura das etiquetas direcionando para o caminho que você espera alterar.
 
Ao fazer o uso de classes, identificação de etiquetas e escrevendo seletores para funcionar na estrutura principal se consegue minimizar as chances de uma colisão do Moodle agora e no futuro.


==Layouts==
==Layouts==
Layouts are defined in '''config.php'''.
Layouts são definidos em config.php.


All themes are required to define the layouts they wish to be responsible for as well as create; however, many layout files are required by those layouts. If the theme is overriding another theme then it is a case of deciding which layouts this new theme should override. If the theme is a completely fresh start then you will need to define a layout for each of the different possibilities.  
Todos os temas são requeridos para definir os layouts que eles querem se responsabilizar ou criar; contudo, muitos arquivos de layout são requeridos por aqueles layouts. Se um tema está substituindo outro tema, então este é um caso de decidir qual dos layouts, o mais novo será substituído. Se o tema é completamente novo, então você precisará definir um layout para casa uma das diferentes possibilidades.


It is also important to note that a new theme that will base itself on another theme (overriding it) does not need to define any layouts or use any layout files if there are no changes that it wishes to make to the layouts of the existing theme. The standard theme in Moodle is a good example of this as it extends the base theme simply adding CSS to achieve its look and feel.
É também importante notar que um novo tema que se baseará em se mesmo em outro tema (substituindo ele) não precisa definir qualquer layout ou usar qualquer arquivo de layout se não há mudanças que se quer fazer no layout do tema existente. O tema padrão no Moodle é um bom exemplo disso, pois ele estende o tema base adicionando CSS para conseguir o visual.


So layouts... as mentioned earlier layouts are defined in config.php within $THEME->layouts. The following is an example of one such layout definition:
Então layouts... como mencionado antes, são definidos em config.php em $THEME->layouts. O seguinte é um exemplo de tal definição:
<code php>
<syntaxhighlight lang="php">
$THEME->layouts = array(
$THEME->layouts = array(
     // Standard layout with blocks, this is recommended for most pages with general information
     // Standard layout with blocks, this is recommended for most pages with general information
Line 231: Line 234:
     )
     )
)
)
</code>
</syntaxhighlight>
The first thing Moodle looks at is the name of the layout, in this case it is `standard` (the array key in PHP), it then looks at the settings for the layout, this is the theme, file, regions, and default region. There are also a couple of other options that can be set by a layout.
A primeira coisa que o Moodle olha é o nome do layout, neste caso é o ‘padrão’ (o vetor chave em PHP), depois procura pelas configurações de layout, que é o tema, arquivo, regiões, e região padrão. Há também algumas outras opções que podem ser configuradas por um layout.
 
;Tema - theme : é o tema em que o arquivo de layout existe. Isso mesmo, você pode fazer uso dos layouts a partir de outros temas instalados. '''Opcional'''
;Arquivo - file : é o nome do arquivo do layout que o layout quer usar. '''Requerido'''
;Regiões - regions : são os diferentes bloco de regiões (lugares onde você pode colocar blocos) no tema. '''Requerido'''
;Regiõespadrões – defaultregion : é a localização padrão quando adicionados novos blocos. '''Requerido se região não é vazia, se não, opcional'''
;Opções – options : um vetor das opções específicas do layout mencionado em detalhes abaixo. '''Opcional'''


; theme : is the theme the layout file exists in. That's right you can make use of layouts from other installed themes. ''Optional''
; file : is the name of the layout file this layout wants to use. ''Required''
; regions : is the different block regions (places you can put blocks) within the theme. ''Required''
; defaultregion : is the default location when adding new blocks. '''Required if regions is non-empty, otherwise optional'''
; options : an array of layout specific options described in detail below. '''Optional'''


The '''theme''' is optional. Normally the the layout file is looked for in the current theme, or, if it is not there, in the parent theme. However, you can use a layout file from any other theme by giving the theme name here.
O '''tema''' é opcional. Normalmente o arquivo de layout é preso ao tema atual, ou, se não está lá, no tema principal. Contudo, você pode usar um arquivo de layout de qualquer outro tema adicionando o nome.  


You can define whatever regions you like. You just need to pick an name for each one. Most themes just use one or both of '''side_pre''' and '''side_post''', which is like 'left side' and 'right side', except in right to left languages, when they are reversed. If you say in config.php that your the layout provides regions called 'fred' and 'barney', then you must call $OUTPUT->blocks_for_region('fred') and $OUTPUT->blocks_for_region('barney') somewhere in the layout file.
Você pode definir quais regiões você prefere. Você só precisa escolher o nome de cada qual. A maioria dos temas só usam um ou ambos de '''side_pre''' e '''side_post''', que seria como ‘lado esquerdo’ e ‘lado direito’, exceto na linguagem direita para esquerda, quando são trocados. Se você disser em config.php que seus layouts regiões chamadas ‘fred’ e ‘barney’, então você deve chamar $OUTPUT->blocks_for_region('fred') and $OUTPUT->blocks_for_region('barney') em algum lugar no arquivo de layout.


The final setting '''options''' is a special case that only needs to be set if you want to make use of it. This setting allows the theme designer to specify special options that they would like to create that can be later accessed within the layout file. This allows the theme to make design decisions during the definition and react upon those decisions in what ever layout file is being used.
A configuração final de opções é um caso especial que só precisa ser ligada se você quiser usar disto. Essas configurações permitem que o desenvolvedor do tema especifique opções especiais que eles gostaria de criar e podem ser acessadas dentro do arquivo do layout. Isso permite que o tema tome decisões de design durante a definição e seja capaz de reagir de acordo com essas decisões em qualquer arquivo de layout que esteja sendo usado.


One such place this has been used is infact within the base theme. If you take a look first at theme/base/config.php you will notice that several layouts specify options '''nonavbar''' and '''nofooter''' which can both be set to either true or false. Then if we take a look at theme/base/layout/general.php you will spot lines like the following:
Um desses lugares que isso vem sido usado é no tema base. Se você observar em theme/base/config.php, perceberá que há diversas opções específicas '''nonavbar''' e '''nofooter''' que podem ambas ser marcadas como verdadeiro ou falso. Então se você olhar em  theme/base/layout/general.php você identificará linhas como as seguintes:
<code php>
<syntaxhighlight lang="php">
<?php
<?php
$hasnavbar = (empty($PAGE->layout_options['nonavbar']) && $PAGE->has_navbar());
$hasnavbar = (empty($PAGE->layout_options['nonavbar']) && $PAGE->has_navbar());
Line 259: Line 263:
</div>
</div>
<?php } ?>
<?php } ?>
</code>
</syntaxhighlight>
What you are seeing here is the use of those settings from the layout within the layout file. In this case it is being used to toggle the display of the navigation bar and page footer.
O que você está vendo aqui é o uso de algumas dessas configurações do layout existentes dentro do arquivo de layout. Neste caso, está sendo usado para barra de rolagem e rodapé da página.


==Layout files==
==Arquivo Layout==
A layout file is a file that contains the core HTML structure for a layout including the header, footer, content and block regions. For those of you who are familiar with themes in Moodle 1.9 this is simply header.html and footer.html combined. Of course it is not all HTML, there are bits of HTML and content that Moodle needs to put into the page, within each layout file this will be done by a couple of simple PHP calls to get bits and pieces including content.
O arquivo layout é o arquivo que contem a estrutura do codigo HTML para o layout incluindo o header , conteúdo e regiões de bloco.
Para aqueles de vocês que estão familiarizados com os temas em Moodle 1.9 isto é simplesmente a combinação dos arquivos header.html e footer.html. Claro que não é tudo HTML, há pedaços de codigo e conteúdos que o Moodle precisa colocar na paginas, dentro de cada arquivo de layout isso sera feito por uma simples chamada PHP para obter pedaços e incluir conteúdo.  


Before learning more it is good to understand the two primary objects that will be used in your layout files: $OUTPUT and $PAGE.
Antes de aprender mais, é bom conhecer os dois objetos primários que serão usados ​​em seus arquivos de layout: $OUTPUT e $PAGE.


'''$OUTPUT''' is an instance of the <code>core_renderer</code> class which is defined in lib/outputrenderers.php. Each method is clearly documented there, along with which is appropriate for use within the layout files.
'''$OUTPUT''' é uma instância da classe <syntaxhighlight lang="php">core_renderer</syntaxhighlight> que é definido em lib / outputrenderers.php. Cada método é claramente documentados lá, junto com o que é apropriado para uso dentro dos arquivos de layout.


'''$PAGE''' is an instance of the <code>moodle_page</code> class defined in lib/pagelib.php. Most of the things you will want to use are the properties that are all documented at the top of the file. If you are not familiar with PHP properties, you access them like $PAGE->activityname, just like fields of an ordinary PHP object. (However, behind the scenes the value you get is produced by calling a function. Also, you cannot change these values, they are '''read-only'''. However, you don't need to understand all that if you are just using these properties in your theme.)
'''$PAGE''' é uma instância da classe <syntaxhighlight lang="php">moodle_page</syntaxhighlight> definido no lib / pagelib.php. A maioria das coisas que você vai querer usar são as propriedades que estão documentadas no topo do arquivo. Se você não estiver familiarizado com propriedades do PHP, você deve acessá-los como $ PAGE-> activityname, assim como campos de um objeto PHP comum. (No entanto, em segundo plano, o valor que você recebe é produzido pela chamada de uma função. Além disso, você não pode alterar esses valores, eles são somente de leitura. No entanto, você não precisa entender tudo isso se você está apenas usando essas propriedades no seu tema).


The following is a very simple layout file to illustrate the different bits that make it up:
O seguinte arquivo de layout é uma simples ilustração dos pedaços que o compõem:
<code php>
<syntaxhighlight lang="php">
<?php echo $OUTPUT->doctype() ?>
<?php echo $OUTPUT->doctype() ?>
<html <?php echo $OUTPUT->htmlattributes() ?>>
<html <?php echo $OUTPUT->htmlattributes() ?>>
Line 313: Line 318:
</body>
</body>
</html>
</html>
</code>
</syntaxhighlight>
 
Nós assumimos que você sabe o suficiente de HTML para compreender a estrutura básica acima, mas vamos explicar o código PHP uma vez que é menos óbvio.


We assume you know enough HTML to understand the basic structure above, but let's explain the PHP code since that is less obvious.
<syntaxhighlight lang="php">
<code php>
<?php echo $OUTPUT->doctype() ?>
<?php echo $OUTPUT->doctype() ?>
</code>
</syntaxhighlight>
This occurs at the VERY top of the page, it must be the first bit of output and is responsible for adding the (X)HTML document type definition to the page. This of course is determined by the settings of the site and is one of the things that the theme designer has no control over.
This occurs at the VERY top of the page, it must be the first bit of output and is responsible for adding the (X)HTML document type definition to the page. This of course is determined by the settings of the site and is one of the things that the theme designer has no control over.


<code php>
<syntaxhighlight lang="php">
<html <?php echo $OUTPUT->htmlattributes() ?>>
<html <?php echo $OUTPUT->htmlattributes() ?>>
</code>
</syntaxhighlight>
Here we have started writing the opening html tag and have asked Moodle to give us the HTML attributes that should be applied to it. This again is determined by several settings within the actual HTML install.
Aqui nós começamos a escrever a tag de abertura html e pedimos ao Moodle para nos dar os atributos HTML que deve ser aplicada a ele. Isso novamente é determinada por várias configurações dentro do HTML gerado da instalação do Moodle.


<code php>
<syntaxhighlight lang="php">
<?php echo $PAGE->title ?>
<?php echo $PAGE->title ?>
</code>
</syntaxhighlight>
This gets us the title for the page.
Isso dá o titulo para a pagina.


<code php>
<syntaxhighlight lang="php">
<?php echo $OUTPUT->standard_head_html() ?>
<?php echo $OUTPUT->standard_head_html() ?>
</code>
</syntaxhighlight>
This very important call gets us the standard head HTML that needs to be within the HEAD tag of the page. This is where CSS and JavaScript requirements for the top of the page will be output as well as any special script or style tags.
Essa chamada é muito importante pois nos leva ao cabeçalho html padrão que precisamos para esta dentro da tag HEAD da pagina. É onde o CSS e o JavaScript são requisitados no topo do arquivo, bem como qualquer script especial ou tags de estilo.


<code php>
<syntaxhighlight lang="php">
<body id="<?php p($PAGE->bodyid); ?>" class="<?php p($PAGE->bodyclasses); ?>">
<body id="<?php p($PAGE->bodyid); ?>" class="<?php p($PAGE->bodyclasses); ?>">
</code>
</syntaxhighlight>
Much like the html tag above we have started writing the body tag and have asked for Moodle to get us the desired ID and classes that should be applied to it.
Muito parecido com o tag html acima nós começamos a escrever a tag body and have asked for Moodle to get us the desired ID and classes that should be applied to it.


<code php>
<syntaxhighlight lang="php">
<h1 class="headermain"><?php echo $PAGE->heading; ?></h1>
<h1 class="headermain"><?php echo $PAGE->heading; ?></h1>
<div class="headermenu"><?php echo $OUTPUT->login_info(); echo $PAGE->headingmenu; ?></div>
<div class="headermenu"><?php echo $OUTPUT->login_info(); echo $PAGE->headingmenu; ?></div>
</code>
</syntaxhighlight>
Here we are creating the header for the page. In this case we want the heading for the page, we want to display the login information which will be the current users username or a link to log in if they are not logged in, and we want the heading menu if there is one.
Aqui estamos criando o cabeçalho da página,Neste caso, queremos o título da página, queremos mostrar as informações de login, que será o nome de usuário username corrente ou um link para efetuar login, se não estiver logado, e queremos o título do menu se existir um.


<code php>
 
<syntaxhighlight lang="php">
<?php echo $OUTPUT->blocks_for_region('side-pre') ?>
<?php echo $OUTPUT->blocks_for_region('side-pre') ?>
</code>
</syntaxhighlight>
Here we get the HTML to display the blocks that have been added to the page. In this case we have asked for all blocks that have been added to the area labelled ''side-pre''.
Aqui temos o HTML para mostrar os blocos que foram adicionados à página. Neste caso, pedimos para todos os blocos que foram adicionados à área denominada ''side-pre''.


<code php>
<syntaxhighlight lang="php">
<?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
<?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
</code>
</syntaxhighlight>
This is one of the most important calls within the file, it determines where the actual content for the page gets inserted.
Esse é um dos mais importantes chamadas dentro do arquivo, ele determina onde o conteúdo real da pagina sera inserido.


<code php>
<syntaxhighlight lang="php">
<?php echo $OUTPUT->blocks_for_region('side-post') ?>
<?php echo $OUTPUT->blocks_for_region('side-post') ?>
</code>
</syntaxhighlight>
Here we get the HTML to display the blocks that have been added to the page. In this case we have asked for all blocks that have been added to the area labelled ''side-post''.
Aqui temos o HTML para mostrar os blocos que foram adicionados à página. Neste caso, pedimos para todos os blocos que foram adicionados à área denominada ''side-post''.


<code php>
<syntaxhighlight lang="php">
<?php
<?php
echo $OUTPUT->login_info();
echo $OUTPUT->login_info();
Line 368: Line 375:
echo $OUTPUT->standard_footer_html();
echo $OUTPUT->standard_footer_html();
?>
?>
</code>
</syntaxhighlight>
This final bit of code gets the content for the footer of the page. It gets the login information which is the same as in the header, a home link, and the standard footer HTML which like the standard head HTML contains all of the script and style tags required by the page and requested to go in the footer.
Esse pedaço final de codigo obtém o conteúdo para o rodapé da página. Ele recebe as informações de login, que é o mesmo que no cabeçalho,[ and the standard footer HTML which like the standard head HTML contains all of the script and style tags required by the page and requested to go in the footer.]
 
'''''Note''''': Within Moodle 2.0 most of the JavaScript for the page will be included in the footer. This greatly helps reduce the loading time of the page.


When writing layout files think about the different layouts and how the HTML that each makes use of will differ. You will most likely find you do not need a different layout file for each layout, most likely you will be able to reuse the layout files you create across several layouts. You can of course make use of layout options as well to further reduce the number of layout files you need to produce.
'''''Nota''''': Dentro Moodle 2.0 a maioria dos JavaScript para a página serão incluídos no rodapé. Isso ajuda muito a reduzir o tempo de carregamento da página.


Of course as mentioned above if you are customising an existing theme then you may not need to create any layouts or layout files at all.
Quando você for escrever arquivos de layout deve lembrar que existe diferentes layouts e que o HTML faz o uso de cada um desses diferentes layout. É muito provavel que você nao precisará de um arquivo diferente para cada tema, caso você seja capaz de reutilizar os arquivos que você criou para os varios temas.Você pode naturalmente fazer uso de opções de layout também para reduzir ainda mais o número de arquivos de layout que você precisa para produzir um tema.
É claro que, como mencionado acima, se você estiver personalizando um tema já existente, então talvez você não precise de criar qualquer layouts ou todos arquivos de layout.


==Language File==
==Arquivo de idiomas==


You need to create a language file for your theme with a few standard strings in it. At a minimum create a file called lang/en.theme_themename.php in your theme folder. For example, the 'standard' theme has a language file called lang/en/theme_standard.php.  
Você precisa criar um arquivo de idioma para seu tema com algumas strings padrões nele. No minimo criar um arquivo chamado lang/en.theme_themename.php na sua pasta Tema. Por exemplo, o tema 'standard' tem um arquivo de idioma chamado lang / en / theme_standard.php.


You '''must''' define the following lines in your file (example is from standard theme, adapt as required):
Você '''deve''' definir as seguintes linhas em seu arquivo(exemplo do tema padrão):


<code php>
<syntaxhighlight lang="php">
$string['pluginname'] = 'Standard';
$string['pluginname'] = 'Standard';
$string['region-side-post'] = 'Right';
$string['region-side-post'] = 'Right';
Line 389: Line 395:
$string['choosereadme'] = 'This theme is a very basic white theme, with a minimum amount of  
$string['choosereadme'] = 'This theme is a very basic white theme, with a minimum amount of  
  CSS added to the base theme to make it actually usable.';
  CSS added to the base theme to make it actually usable.';
</code>
</syntaxhighlight>
 
Without the above you will get notices for the missing strings.


==Making use of images==
==Fazendo uso de imagens==
Right at the start when listing the features of the new themes system one of the features mentioned was the ability to override any of the standard images within Moodle from within your theme. At this point we will look at both how to make use of your own images within your theme, and secondly how to override the images being used by Moodle.
Logo no inicio, quando listamos as novas características do sistema de temas, uma das características mencionadas foi a capacidade de substituir qualquer uma das imagens padrões do tema e imagens dentro do Moodle. Neste ponto, vamos olhar para ambos, como fazer uso das suas próprias imagens dentro do seu tema e em seguida vamos ver como substituir as imagens sendo usadas pelo Moodle. Então, vamos ver primeiro um pouco sobre as imagens dentro do Moodle,  
So first up a bit about images within Moodle,


# Images you want to use within your theme '''need''' to be located within your theme's pix directory.
# Imagens que desejam ser usadas dentro do seu tema '''precisam''' ser colocadas dentro do diretório do seu tema pix.
# You can use sub directories within the pix directory of your theme.
# Você pode usar sub-diretórios dentro do diretório pix de seu tema.
# Images used by Moodle's core are located within the pix directory of Moodle.
# As imagens usadas pelo codigo do Moodle estão localizados dentro do diretório pix do Moodle.
# Modules, blocks and other plugins should also store there images within a pix directory.
# Módulos, blocos e outros plugins também devem armazenar suas imagens dentro de um diretório pix.


So making use of your own images first up. Lets assume you have added two image files to the pix directory of your theme.
Assim, vamos fazer uso de suas próprias imagens primeiro. Vamos suponha que você tenha adicionado dois arquivos de imagem para o diretório pix de seu tema.


* /theme/yourthemename/pix/imageone.jpg
* /theme/yourthemename/pix/imageone.jpg
* /theme/yourthemename/pix/subdir/imagetwo.png
* /theme/yourthemename/pix/subdir/imagetwo.png


Notice that one image is a JPEG image, and the second is a PNG. Also the second image is in a subdirectory.
Note que a primeira imagem é JPEG e a segunda é uma PNG. Veja também que a segunda imagem esta em um subdiretório.
O trecho de código a seguir ilustra como fazer uso de suas imagens dentro de HTML, se você quisesse usá-los dentro de um arquivo de layout.


The following code snippet illustrates how to make use of your images within HTML, such as if you wanted to use them within a layout file.
<syntaxhighlight lang="php">
<code php>
<img src="<?php echo $OUTPUT->pix_url('imageone', 'theme');?>" alt="" />  
<img src="<?php echo $OUTPUT->pix_url('imageone', 'theme');?>" alt="" />  
<img src="<?php echo $OUTPUT->pix_url('subdir/imagetwo', 'theme');?>" alt="" />  
<img src="<?php echo $OUTPUT->pix_url('subdir/imagetwo', 'theme');?>" alt="" />  
</code>
</syntaxhighlight>


'''DO NOT''' include the image file extension. Moodle will work it out automatically and it will not work if you do include it.
'''Não''' incluir a extensão do arquivo de imagem. O Moodle trabalhará com isso automaticamente e não funcionará se você incluir a extensão.  


In this case rather than writing out the URL to the image we use a method of Moodle's output library. Its not too important how that functions works but it is important that we use it as it is what allows images within Moodle to be over-rideable.
Neste caso, ao invés de escrever a URL para a imagem usamos um método da biblioteca Moodle de saída.[Its not too important how that functions works but it is important that we use it as it is what allows images within Moodle to be over-rideable.]


The following is how you would use the images from within CSS as background images.
O seguinte trecho de código mostra como você usaria as imagens de dentro do CSS como imagens de fundo.
<code css>
<syntaxhighlight lang="css">
.divone {background-image:url([[pix:theme|imageone]]);}
.divone {background-image:url([[pix:theme|imageone]]);}
.divtwo {background-image:url([[pix:theme|subdir/imagetwo]]);}
.divtwo {background-image:url([[pix:theme|subdir/imagetwo]]);}
</code>
</syntaxhighlight>
If this case we have to use some special notations that Moodle looks for. Whenever Moodle hands out a CSS file it first searches for all ''[[something]]'' tags and replaces them with what is required.
 
Neste caso temos que usar algumas notações especiais que o Moodle procura. Quando Moodle tem em mãos um ficheiro CSS,  ele procura primeiro por todas as tags e substitui-as com o que for necessário.
 
A última coisa a notar em ambos os casos acima, é que em nenhum momento podemos incluir a extensão do arquivo de imagens. A razão para isto nos leva ao próximo tópico, como substituir as imagens.


The final thing to notice with both of the cases above is that at no point do we include the images file extension.  
A partir de um tema, você pode facilmente substituir qualquer imagem padrão no Moodle simplesmente adicionando a imagem de reposição para o diretório do tema pix na mesma estrutura de diretório do Moodle. Assim, por exemplo se quiséssemos substituir os seguintes duas imagens:
The reason for this leads us into the next topic, how to override images.


From within a theme you can VERY easily override any standard image within Moodle by simply adding the replacement image to the theme's pix directory in the same sub directory structure as it is in Moodle.
So for instance we wanted to override the following two images:
# /pix/moodlelogo.gif
# /pix/moodlelogo.gif
# /pix/i/user.gif
# /pix/i/user.gif
We would simply need to add our replacement images to the theme in the following locations
Nós simplesmente precisamos adicionar imagens de reposição ao tema nos seguintes locais:
# /theme/themename/pix_core/moodlelogo.gif
# /theme/themename/pix_core/moodlelogo.gif
# /theme/themename/pix_core/i/user.gif
# /theme/themename/pix_core/i/user.gif
''Note that we have created a '''pix_core''' directory in our theme. For module images we need a '''pix_mod''' directory. See [[Themes_2.0_How_to_use_images_within_your_theme|using images within your theme]] for the full story.
Note que criamos um diretório pix_core em nosso tema. Para as imagens do módulo precisamos de um diretório pix_mod. Ver [[Themes_2.0_How_to_use_images_within_your_theme|using images within your theme]] para o tutorial completa..


Now the other very cool thing to mention is that Moodle looks for not just replacements of the same image type (jpg, gif, etc...) but also replacements in any image format. This is why above when working with our images we never specified the images file extension.
Agora, outra coisa muito legal de mencionar é que o Moodle procura não apenas substituições do mesmo tipo de  imagem (jpg, gif, etc ..), mas também substituições em qualquer formato de imagem. É por isso que acima quando trabalhamos com nossas imagens nunca especificamos a extensão do arquivo de imagens. Isto significa que isso também deve funcionar
This means that the following would also work:
# /theme/themename/pix_core/moodlelogo.png
# /theme/themename/pix_core/moodlelogo.png
# /theme/themename/pix_core/i/user.bmp
# /theme/themename/pix_core/i/user.bmp


For a more detailed description of how this all works see the page on [[Themes_2.0_How_to_use_images_within_your_theme|using images within your theme]]
Para uma descrição mais detalhada de como tudo isso funciona, veja a página sobre [[Themes_2.0_How_to_use_images_within_your_theme|using images within your theme]]


==Unobvious Things==
==Coisas não óbvias==
===Getting Your Theme to Appear Correctly in Theme Selector===
===Getting Your Theme to Appear Correctly in Theme Selector===
If you follow the examples on this page to the letter, when you go to the Theme Selector page you may be discouraged to find that your theme does not appear like the other themes do. In fact, instead of your theme's name, you will see something along the lines of <nowiki>[[pluginname]]</nowiki>.  
If you follow the examples on this page to the letter, when you go to the Theme Selector page you may be discouraged to find that your theme does not appear like the other themes do. In fact, instead of your theme's name, you will see something along the lines of <nowiki>[[pluginname]]</nowiki>.  
Line 463: Line 466:
==Appendix A==
==Appendix A==
===Theme options as of April 28th, 2010===
===Theme options as of April 28th, 2010===
{| class="nicetable" id="theme_options_table"
{| class="wikitable" id="theme_options_table"
|-
|-
! Setting
! Setting
Line 523: Line 526:
|}
|}
===The different layouts as of August 17th, 2010===
===The different layouts as of August 17th, 2010===
{| class="nicetable" id="theme_layouts_table"
{| class="wikitable" id="theme_layouts_table"
|-
|-
! Layout
! Layout
Line 586: Line 589:
* [[Styling and customising the dock]] - How to style and customise the dock.
* [[Styling and customising the dock]] - How to style and customise the dock.
* [[Theme changes in 2.0]]
* [[Theme changes in 2.0]]
* [[Using jQuery with Moodle 2.0]]
* [[jQuery]]
* [[Themes 2.0 how to clone a Moodle 2.0 theme]]  
* [[Themes 2.0 how to clone a Moodle 2.0 theme]]  
* [http://www.youtube.com/watch?v=OvaU54uh-qA New themes in Moodle 2.0 video]
* [http://www.youtube.com/watch?v=OvaU54uh-qA New themes in Moodle 2.0 video]

Latest revision as of 13:55, 24 June 2022


Warning: This page is no longer in use. The information contained on the page should NOT be seen as relevant or reliable.


Moodle 2.0

Bem vindo ao novo mundo de temas do moodle 2.0 !!

O Moodle Temas permite que você mude o visual do seu site moodle. Você pode usar temas já existentes ou criar seus próprios temas para compartilha com a comunidade moodle. Os temas podem também ser baseados em temas já existentes com algumas personalizações. Você pode fazer isso através do CSS, mudando a estrutura base e também adicionando javascript para adicionar recursos mais avaçados.

A maioria dos temas Moodle são desenvolvidos adicionando algumas mudanças em um tema que já existe. A arquitetura dos Temas do Moodle é desenvolvida de tal forma que a mesma funcione como base quando nada for definido no tema editado. Isso torna mais fácil para quem deseja criar novos temas apenas fazendo algumas mudanças em temas já existentes.

Essa documentação explica como trabalhar com no Moodle e pretende ajudar você a criar ou modificar a maioria do temas do Moodle 2.0.

O que há de novo na versão 2.0

O sistema de temas foi completamente redesenhado no Moodle 2.0. Problemas conhecidos foram endereçados e novas características foram adicionadas para atender solicitações da comunidade Moodle. Infelizmente não foi possível manter a compatibilidade com verões anteriores, então todos os temas de Moodle 1.x devem ser recriados para o Moodle 2.0.

Maiores mudanças incluem:

  • As classes CSS ficaram mais claras e consistentes, alem de IDs em todas paginas do Moodle
  • Introdução a arquivos de layout (templates), descrevendo o layout HTML para diferentes tipos de paginas do Moodle
  • Introdução de processadores, que produzem as pequenas “partes” de uma página HTML. Temas avançados podem ter eles ativados manualmente se for decido
  • Introdução a métodos padronizados para adição de Javascript aos templetes
  • Controle mais fácil dos ícones e imagens do Moodle
  • O antigo tema "standard" (padrão) foi dividio em dois temas:
    • base - contem o layout absolutamente básico, e
    • standard - que adiciona CSS no tema base para torna-lo parecido com antigo tema padrão
  • Ajuste de desempenho: Em condições normais de produção, os arquivos CSS são combinados em um único arquivo otimizado, e ambos, arquivo CSS e javaScript são minimizados para assegurar que não haja desperdício de conexão e trafico.

A estrutura de um tema

Algumas coisas importantes para quem deseja construir bons temas:

  1. config.php - Esse arquivo é requisitado em muitos temas. Ele define as configurações e define requisitos para funcionar o tema Moodle. Isso inclui o tema, arquivo, região, região padrão e opções
  2. Layouts e arquivo de layout - Em config.php existe uma definição para cada tipo de pagina (veja Appendix A: Theme layouts para ver uma lista de 12 tipos). Cada tipo de definição de página diz qual arquivo de layout será utilizado, qual regiões de bloco esse modelo de página deve exibir e assim por diante. O arquivo de layout contém o HTML e o PHP minimo exigido para exibir a estrutura básica das paginas. (Se você conhece Moodle 1.9, Isso seria uma combinação de header.html e footer.html)
  3. O tema base - Não se destina a ser usado para produção de sites. Estabelece o esquema genérico mais simples possível e inclui apenas CSS essencial para o layout ou para o Moodle como um todo. É a base perfeita para se começar a desenha um tema, pois há poucas cores, bordas, margens e alinhamentos para substituir. Você pode simplesmente começar a adicionar o que você precisar.

Arquivos e Pastas

Os arquivos dos temas são localizados em uma pasta com caminho Moodle/Theme e possui subpastas. Cada tema é definido da seguinte forma:

Diretório Arquivo Descrição
/config.php Contém todas as configurações e definições para cada tema.
/lib.php Contém classes especificas e funções que são usadas pelos temas.
/renderers.php Contém qualquer processador personalizado para o tema.
/settings.php Contém configurações personalizadas do tema. Essas configurações locais são definidos pelo tema, permitindo que o usuário do tema possa modificá-lo facilmente. (por exemplo, uma cor de fundo ou uma imagem de cabeçalho)
/javascript/ Todos os arquivos JavaScript específicos para o tema devem ser localizados aqui.
/lang/ Quaisquer arquivos de linguagem especial que o tema exige devem ser localizados aqui.
/layout/ Contém os arquivos de layout do tema.
/pix/ Contém todas as imagens que o tema usa tanto do CSS quanto dos arquivo de layout.
/pix /favicon.ico O favicon para exibir o tema.
/pix /screenshot.jpg Um screenshot do tema pode ser visualizado na tela de seleção dos temas.
/style Localização padrão para os arquivos CSS.
/*.css CSS arquivos que o tema precisa

Há também diversos lugares que folhas de estilo podem ser incluídas (veja o a seção CSS de como e porquê abaixo).

Opções de temas

Todas as opções de temas são definidos dentro do arquivo config.php. As configurações que são mais usadas são: parents,sheets, layouts e javascripts. Dê uma olhada em theme options table para completar essa lista de opções de temas que incluem algumas configurações menos usadas e mais avançadas.


Exemplo de uma configuração basica

Vamos dar uma olhada em um arquivo com configuração básica de tema e as diferentes partes que a estruturam:

$THEME->name = 'newtheme';

$THEME->parents = array(
    'base'
);

$THEME->sheets = array(
    'admin',
    'blocks',
    'calendar',
    'course',
    'grade',
    'message',
    'question',
    'user'
);

$THEME->layouts = array(
    'base' => array(
        'theme' => 'newtheme',
        'file' => 'general.php',
        'regions' => array(),
    ),
    'standard' => array(
        'theme' => 'newtheme',
        'file' => 'general.php',
        'regions' => array('side-pre', 'side-post'),
        'defaultregion' => 'side-post',
    )
    //.......
);

$THEME->javascripts_footer = array(
    'navigation'
);

Expandindo as configurações de um exemplo básico

Primeiramente, antes de tudo, você vai notar que tudo é adicionado para $THEME. Esse é o objeto para configuração de tema. Ele é criado usando a configuração padrão do Moodle e em seguida atualizado para qualquer configuração que você adicionar.

$THEME->name
A primeira configuração, é o nome do tema. Ele deve ser simplesmente o nome do tema que você quiser nomear. O mais recomendado é que você use o mesmo nome do diretório do tema.
$THEME->parents
Esse define os temas que o tema estendera. Nesse caso, você esta apenas ampliando o tema base. Então seu tema será uma extensão de outro tema base.
$THEME->sheets
Um vetor contendo os nomes das folhas de estilo CSS para incluir em esse tema. Note que é apenas o nome da folha de estilo e não contém o caminho do diretório ou a extensão do arquivo. No moodle assume que as folhas de estilo do tema serão localizadas no diretório de estilos do tema e tem .css como extensão.
$THEME->layouts
Nesse exemplo, dois layouts foram definidos para substituir o layouts do tema base. Para mais informações você deve ver sessão abaixo layouts.
$THEME->javascripts_footer
A configuração final é incluir um arquivo JavaScript. Assim como as folhas de estilo, você só precisa fornecer o nome dos arquivos. Moodle assumirá que eles estarão no diretório JavaScript do seu tema e serão um arquivo .js .

Note: Quando você começar a escrever seus temas, Certifique-se de dar uma olhada nos arquivos de configuração de outros temas que já vem no Moodle. Você vai ter uma boa idéia de como tudo funciona e vai perceber o que esta acontecendo dentro do tema moodle, conhecendo o que é inclusão ou exclusão dentro do tema.

CSS

Localização dos arquivos CSS

Primeiramente vamos da uma olhada onde o CSS pode ser incluído dentro do Moodle:

\theme\themename\style\*.css
Essa é a localização padrão das folhas de estilo que são usadas por um tema e o local que deve ser usado para o desenvolvimento do seu tema.

Novos desenvolvedores de temas devem notar que a ordem em que os arquivos CSS são encontrados e incluídos cria uma hierarquia. Essa ordem assegura que as regras, dentro das folhas de estilo dos temas, tenham prioridade sobre regras idênticas em outros arquivos que podem ter sido introduzidas antes. Isso pode também se extender a outras definições de arquivo (veja vetor principal no arquivo de configuração) e também garante que as regras/definições do tema CSS tenha a última palavra.

Há outras localizações que podem ser usadas (embora muito raramente) para incluir CSS em uma página. Um desenvolvedor de um arquivo PHP pode especificar manualmente onde se encontra a folha de estilo no Moodle, como um banco de dados. Normalmente, se código esta fazendo isso, é porque existe uma configuração de um não tema ou de um plugin que precisa de uma informação especial de CSS. Como desenvolvedor de temas, você deve estar ciente da localização de arquivos CSS, mas não tem que se preocupar com isso. Aqui estão alguns exemplos:

{pluginpath}\styles.css e.g. \block\blockname\styles.css or \mod\modname\styles.css
Cada plugin pode ter seu próprio arquivo styles.css . Este arquivo deve conter apenas as normas CSS necessárias para o módulo e não deve acrescentar qualquer alteração para a aparência do plugin como cores, tamanho das fontes, ou margens. Nada além daqueles que são verdadeiramente requisitados.

Estilos de tema específicos para um plugin devem ser localizados dentro do diretório de estilo do tema.

{pluginpath}\styles_themename.css
Este só deve ser usado por desenvolvedores de plugins. Permite escrever CSS, que é projetado para um tema específico sem ter que fazer alterações a esse tema. Você irá notar que esse nunca é usado dentro do Moodle e é destinado para ser usado apenas como código de contribuição.

Organização do Núcleo CSS do Moodle

O próximo passo é olhar para a organização e regras do CSS dentro de um tema. Embora, como um desenvolvedor de temas, é responsabilidade sua criar e organizar seu CSS. Por favor, note que os temas padrões que já vem no Moodle tem uma organização muito clara do CSS.

Primeiro tem-se arquivo pagelayout.css. Ele contém o CSS necessário para criar o visual do seu layout. Ele não contém regras que afetam o conteúdo gerado pelo Moodle.

Próximo arquivo é o core.css. Se você abrir o núcleo vai notar que ele contém regras de uso geral (geralmente simples) que não se aplicam a uma seção especifica do Moodle e sim ao Moodle como um todo.

Também pode haver regras que se relacionam com seções específicas. No entanto, isso é feito apenas quando há apenas algumas regras para essa seção. Esses pequenos grupos de regras são agrupados e separados por comentários de identificação para cada seção.

Finalmente, existem todos os outros arquivos CSS, você vai notar que há um arquivo para cada seção do Moodle, que tem uma coleção significativa de regras.

Para aqueles que estão familiarizados com tema Moodle 1.9, esta organização terá uma grande mudança. Em 1.9, o CSS foi organizado pela sua natureza (por exemplo: cores, layout, outros.)


Como escrever regras do CSS eficazes dentro do Moodle

Em Moodle 2.0, escrever boas regras de CSS é muito importante.

Devido a requisitos de desempenho e limitações do navegador, todos os arquivos CSS são combinados em um único arquivo CSS que é incluído sempre. Isto significa que as regras precisam ser escritas de tal forma que minimize as chances de uma colisão, levando a aplicação de estilos indesejados. Por outro lado, escrever um bom CSS é algo que muitos desenvolvedores aspiram para que nós implementemos em diversas classes da estrutura e acaba estimulando desenvolvedores a usar o nome apropriado das classes.


<body> CSS id e classes

A partir do Moodle 2.0 a tag ID (etiqueta de identificação) que é aplicado à estrutura será sempre uma representação de seu endereço. Por exemplo, se você está olhando para uma mensagem do fórum e o endereço é "mod / forum / / view.php ', então a tag ID da estrutura será " # page-mod-forum-view ".

Como a identificação da estrutura atribuida ao URI também é explodida para formar diversar classes CSS que são adicionadas para a estrutura, então o exemplo '/mod/forum/view' deveria acabar com a seguinte classe adicionada para a estrutura '.path-mod', '.path-mod-forum'. Observe que '.path-mod-forum-view' não é adicionado como uma classe, sendo intencionalmente deixado de for a para evitar confusão e duplicação, visto que as regras podem ligar diretamente para a página usando o ID e não precisa da classe final.

O ID e as classes do corpo descrito acima irão forma o básico para muitas das regras CSS que você terá que escrever para o seu tema, no entanto, existe muitas outras classes muito úteis que podem ser adicionadas as tags do corpo. Algumas das classes mais interessantes estão listadas abaixo.
  • Se o JavaScript é habilitado, então 'jsenabled1' será adicionado como uma classe para a tag do corpo, permitindo-lhe estilo baseado em JavaScript ser ativado ou não
  • Ou 'dir-rtl "ou" dir-ltr' será adicionado ao corpo como uma classe, dependendo da direção do pacote de idioma: rtl = direita para a esquerda, ltr = esquerda para a direita. Isto permite determinar o seu alinhamento de texto com base na língua, se necessário.
  • A classe será adicionada para representar o pacote de idioma em uso atualmente, por padrão en_utf8 é usada pelo Moodle e resultará na adição da na classe 'lang-en_utf8 " à tag do corpo
  • O wwwroot para Moodle também será convertido em uma classe e adicionado à tag do corpo, o que lhe permite criar um estilo para seu tema baseado na URL através do qual ele foi atingido. Por exemplo,http://sam.moodle.local/moodle/ se tornará ". sam-moodle-local-moodle '
  • Se o usuario corrente não esta logado então '.notloggedin' 'será adicionado à tag do corpo.

O que tudo isso parece na prática? Bem, usando o exemplo acima / mod / forum / view.php, você teria pelo menos a seguinte etiqueta de corpo:

<body id=”page-mod-forum-view” class=”path-mod path-mod-forum />

Escrevendo suas regras

Seguindo as melhores praticas de CSS e compreendendo a ordem em cascata de CSS , o desenvolvedor do tema poderá reduzir colisões e linhas do CSS que é escrito. Classes CSS foram colocadas em locais onde se acredita que qualquer um possa querer aplicar seus próprios estilos CSS.

Ao começar a escrever regras certifique-se que você tem um bom entendimento de onde você quer que essas regras sejam aplicadas, é uma boa idéia para tirar o máximo partido das classes do body acima mencionadas. Se você quiser escrever uma regra para uma página específica deve-se usar o ID para a tag do corpo:

#page-mod-forum-view .forumpost {border:1px solid orange;)

Se você quiser escrever uma regra que seja aplicada para todo o forum:

.path-mod-forum .forumpost {border:1px solid orange;}

Outra coisa muito importante para levar em consideração é a estrutura que antecederam a tag que você quer editar. O navegador adota entre os estilos conflitantes aquele que possui seletores mais específicos. Pode ser muito benéfico manter isso em mente e escrever seletores completos que dependem da estrutura das etiquetas direcionando para o caminho que você espera alterar.

Ao fazer o uso de classes, identificação de etiquetas e escrevendo seletores para funcionar na estrutura principal se consegue minimizar as chances de uma colisão do Moodle agora e no futuro.

Layouts

Layouts são definidos em config.php.

Todos os temas são requeridos para definir os layouts que eles querem se responsabilizar ou criar; contudo, muitos arquivos de layout são requeridos por aqueles layouts. Se um tema está substituindo outro tema, então este é um caso de decidir qual dos layouts, o mais novo será substituído. Se o tema é completamente novo, então você precisará definir um layout para casa uma das diferentes possibilidades.

É também importante notar que um novo tema que se baseará em se mesmo em outro tema (substituindo ele) não precisa definir qualquer layout ou usar qualquer arquivo de layout se não há mudanças que se quer fazer no layout do tema existente. O tema padrão no Moodle é um bom exemplo disso, pois ele estende o tema base adicionando CSS para conseguir o visual.

Então layouts... como mencionado antes, são definidos em config.php em $THEME->layouts. O seguinte é um exemplo de tal definição:

$THEME->layouts = array(
    // Standard layout with blocks, this is recommended for most pages with general information
    'standard' => array(
        'theme' => 'base',
        'file' => 'general.php',
        'regions' => array('side-pre', 'side-post'),
        'defaultregion' => 'side-post'
    )
)

A primeira coisa que o Moodle olha é o nome do layout, neste caso é o ‘padrão’ (o vetor chave em PHP), depois procura pelas configurações de layout, que é o tema, arquivo, regiões, e região padrão. Há também algumas outras opções que podem ser configuradas por um layout.

Tema - theme
é o tema em que o arquivo de layout existe. Isso mesmo, você pode fazer uso dos layouts a partir de outros temas instalados. Opcional
Arquivo - file
é o nome do arquivo do layout que o layout quer usar. Requerido
Regiões - regions
são os diferentes bloco de regiões (lugares onde você pode colocar blocos) no tema. Requerido
Regiõespadrões – defaultregion
é a localização padrão quando adicionados novos blocos. Requerido se região não é vazia, se não, opcional
Opções – options
um vetor das opções específicas do layout mencionado em detalhes abaixo. Opcional


O tema é opcional. Normalmente o arquivo de layout é preso ao tema atual, ou, se não está lá, no tema principal. Contudo, você pode usar um arquivo de layout de qualquer outro tema adicionando o nome.

Você pode definir quais regiões você prefere. Você só precisa escolher o nome de cada qual. A maioria dos temas só usam um ou ambos de side_pre e side_post, que seria como ‘lado esquerdo’ e ‘lado direito’, exceto na linguagem direita para esquerda, quando são trocados. Se você disser em config.php que seus layouts regiões chamadas ‘fred’ e ‘barney’, então você deve chamar $OUTPUT->blocks_for_region('fred') and $OUTPUT->blocks_for_region('barney') em algum lugar no arquivo de layout.

A configuração final de opções é um caso especial que só precisa ser ligada se você quiser usar disto. Essas configurações permitem que o desenvolvedor do tema especifique opções especiais que eles gostaria de criar e podem ser acessadas dentro do arquivo do layout. Isso permite que o tema tome decisões de design durante a definição e seja capaz de reagir de acordo com essas decisões em qualquer arquivo de layout que esteja sendo usado.

Um desses lugares que isso vem sido usado é no tema base. Se você observar em theme/base/config.php, perceberá que há diversas opções específicas nonavbar e nofooter que podem ambas ser marcadas como verdadeiro ou falso. Então se você olhar em theme/base/layout/general.php você identificará linhas como as seguintes:

<?php
$hasnavbar = (empty($PAGE->layout_options['nonavbar']) && $PAGE->has_navbar());
$hasfooter = (empty($PAGE->layout_options['nofooter']));
?>
............
<?php if ($hasnavbar) { ?>
<div class="navbar clearfix">
    <div class="breadcrumb"><?php echo $OUTPUT->navbar(); ?></div>
    <div class="navbutton"> <?php echo $PAGE->button; ?></div>
</div>
<?php } ?>

O que você está vendo aqui é o uso de algumas dessas configurações do layout existentes dentro do arquivo de layout. Neste caso, está sendo usado para barra de rolagem e rodapé da página.

Arquivo Layout

O arquivo layout é o arquivo que contem a estrutura do codigo HTML para o layout incluindo o header , conteúdo e regiões de bloco. Para aqueles de vocês que estão familiarizados com os temas em Moodle 1.9 isto é simplesmente a combinação dos arquivos header.html e footer.html. Claro que não é tudo HTML, há pedaços de codigo e conteúdos que o Moodle precisa colocar na paginas, dentro de cada arquivo de layout isso sera feito por uma simples chamada PHP para obter pedaços e incluir conteúdo.

Antes de aprender mais, é bom conhecer os dois objetos primários que serão usados ​​em seus arquivos de layout: $OUTPUT e $PAGE.

$OUTPUT é uma instância da classe

core_renderer

que é definido em lib / outputrenderers.php. Cada método é claramente documentados lá, junto com o que é apropriado para uso dentro dos arquivos de layout. $PAGE é uma instância da classe

moodle_page

definido no lib / pagelib.php. A maioria das coisas que você vai querer usar são as propriedades que estão documentadas no topo do arquivo. Se você não estiver familiarizado com propriedades do PHP, você deve acessá-los como $ PAGE-> activityname, assim como campos de um objeto PHP comum. (No entanto, em segundo plano, o valor que você recebe é produzido pela chamada de uma função. Além disso, você não pode alterar esses valores, eles são somente de leitura. No entanto, você não precisa entender tudo isso se você está apenas usando essas propriedades no seu tema).

O seguinte arquivo de layout é uma simples ilustração dos pedaços que o compõem:

<?php echo $OUTPUT->doctype() ?>
<html <?php echo $OUTPUT->htmlattributes() ?>>
<head>
    <title><?php echo $PAGE->title ?></title>
    <?php echo $OUTPUT->standard_head_html() ?>
</head>
<body id="<?php p($PAGE->bodyid) ?>" class="<?php p($PAGE->bodyclasses) ?>">
<?php echo $OUTPUT->standard_top_of_body_html() ?>
<table id="page">
    <tr>
        <td colspan="3">
            <h1 class="headermain"><?php echo $PAGE->heading ?></h1>
            <div class="headermenu"><?php echo $OUTPUT->login_info(); echo $PAGE->headingmenu; ?></div>
        </td>
    </tr>
    <tr>
        <td>
            <?php echo $OUTPUT->blocks_for_region('side-pre') ?>
        </td>
        <td>
            <?php echo core_renderer::MAIN_CONTENT_TOKEN ?>
        </td>
        <td>
            <?php echo $OUTPUT->blocks_for_region('side-post') ?>
        </td>
    </tr>
    <tr>
        <td colspan="3">
            <p class="helplink"><?php echo page_doc_link(get_string('moodledocslink')) ?></p>
            <?php
            echo $OUTPUT->login_info();
            echo $OUTPUT->home_link();
            echo $OUTPUT->standard_footer_html();
            ?>
        </td>
    </tr>
</table>
<?php echo $OUTPUT->standard_end_of_body_html() ?>
</body>
</html>

Nós assumimos que você sabe o suficiente de HTML para compreender a estrutura básica acima, mas vamos explicar o código PHP uma vez que é menos óbvio.

<?php echo $OUTPUT->doctype() ?>

This occurs at the VERY top of the page, it must be the first bit of output and is responsible for adding the (X)HTML document type definition to the page. This of course is determined by the settings of the site and is one of the things that the theme designer has no control over.

<html <?php echo $OUTPUT->htmlattributes() ?>>

Aqui nós começamos a escrever a tag de abertura html e pedimos ao Moodle para nos dar os atributos HTML que deve ser aplicada a ele. Isso novamente é determinada por várias configurações dentro do HTML gerado da instalação do Moodle.

<?php echo $PAGE->title ?>

Isso dá o titulo para a pagina.

<?php echo $OUTPUT->standard_head_html() ?>

Essa chamada é muito importante pois nos leva ao cabeçalho html padrão que precisamos para esta dentro da tag HEAD da pagina. É onde o CSS e o JavaScript são requisitados no topo do arquivo, bem como qualquer script especial ou tags de estilo.

<body id="<?php p($PAGE->bodyid); ?>" class="<?php p($PAGE->bodyclasses); ?>">

Muito parecido com o tag html acima nós começamos a escrever a tag body and have asked for Moodle to get us the desired ID and classes that should be applied to it.

<h1 class="headermain"><?php echo $PAGE->heading; ?></h1>
<div class="headermenu"><?php echo $OUTPUT->login_info(); echo $PAGE->headingmenu; ?></div>

Aqui estamos criando o cabeçalho da página,Neste caso, queremos o título da página, queremos mostrar as informações de login, que será o nome de usuário username corrente ou um link para efetuar login, se não estiver logado, e queremos o título do menu se existir um.


<?php echo $OUTPUT->blocks_for_region('side-pre') ?>

Aqui temos o HTML para mostrar os blocos que foram adicionados à página. Neste caso, pedimos para todos os blocos que foram adicionados à área denominada side-pre.

<?php echo core_renderer::MAIN_CONTENT_TOKEN ?>

Esse é um dos mais importantes chamadas dentro do arquivo, ele determina onde o conteúdo real da pagina sera inserido.

<?php echo $OUTPUT->blocks_for_region('side-post') ?>

Aqui temos o HTML para mostrar os blocos que foram adicionados à página. Neste caso, pedimos para todos os blocos que foram adicionados à área denominada side-post.

<?php
echo $OUTPUT->login_info();
echo $OUTPUT->home_link();
echo $OUTPUT->standard_footer_html();
?>

Esse pedaço final de codigo obtém o conteúdo para o rodapé da página. Ele recebe as informações de login, que é o mesmo que no cabeçalho,[ and the standard footer HTML which like the standard head HTML contains all of the script and style tags required by the page and requested to go in the footer.]

Nota: Dentro Moodle 2.0 a maioria dos JavaScript para a página serão incluídos no rodapé. Isso ajuda muito a reduzir o tempo de carregamento da página.

Quando você for escrever arquivos de layout deve lembrar que existe diferentes layouts e que o HTML faz o uso de cada um desses diferentes layout. É muito provavel que você nao precisará de um arquivo diferente para cada tema, caso você seja capaz de reutilizar os arquivos que você criou para os varios temas.Você pode naturalmente fazer uso de opções de layout também para reduzir ainda mais o número de arquivos de layout que você precisa para produzir um tema. É claro que, como mencionado acima, se você estiver personalizando um tema já existente, então talvez você não precise de criar qualquer layouts ou todos arquivos de layout.

Arquivo de idiomas

Você precisa criar um arquivo de idioma para seu tema com algumas strings padrões nele. No minimo criar um arquivo chamado lang/en.theme_themename.php na sua pasta Tema. Por exemplo, o tema 'standard' tem um arquivo de idioma chamado lang / en / theme_standard.php.

Você deve definir as seguintes linhas em seu arquivo(exemplo do tema padrão):

$string['pluginname'] = 'Standard';
$string['region-side-post'] = 'Right';
$string['region-side-pre'] = 'Left';
$string['choosereadme'] = 'This theme is a very basic white theme, with a minimum amount of 
 CSS added to the base theme to make it actually usable.';

Fazendo uso de imagens

Logo no inicio, quando listamos as novas características do sistema de temas, uma das características mencionadas foi a capacidade de substituir qualquer uma das imagens padrões do tema e imagens dentro do Moodle. Neste ponto, vamos olhar para ambos, como fazer uso das suas próprias imagens dentro do seu tema e em seguida vamos ver como substituir as imagens sendo usadas pelo Moodle. Então, vamos ver primeiro um pouco sobre as imagens dentro do Moodle,

  1. Imagens que desejam ser usadas dentro do seu tema precisam ser colocadas dentro do diretório do seu tema pix.
  2. Você pode usar sub-diretórios dentro do diretório pix de seu tema.
  3. As imagens usadas pelo codigo do Moodle estão localizados dentro do diretório pix do Moodle.
  4. Módulos, blocos e outros plugins também devem armazenar suas imagens dentro de um diretório pix.

Assim, vamos fazer uso de suas próprias imagens primeiro. Vamos suponha que você tenha adicionado dois arquivos de imagem para o diretório pix de seu tema.

  • /theme/yourthemename/pix/imageone.jpg
  • /theme/yourthemename/pix/subdir/imagetwo.png

Note que a primeira imagem é JPEG e a segunda é uma PNG. Veja também que a segunda imagem esta em um subdiretório.

O trecho de código a seguir ilustra como fazer uso de suas imagens dentro de HTML, se você quisesse usá-los dentro de um arquivo de layout.

<img src="<?php echo $OUTPUT->pix_url('imageone', 'theme');?>" alt="" /> 
<img src="<?php echo $OUTPUT->pix_url('subdir/imagetwo', 'theme');?>" alt="" />

Não incluir a extensão do arquivo de imagem. O Moodle trabalhará com isso automaticamente e não funcionará se você incluir a extensão.

Neste caso, ao invés de escrever a URL para a imagem usamos um método da biblioteca Moodle de saída.[Its not too important how that functions works but it is important that we use it as it is what allows images within Moodle to be over-rideable.]

O seguinte trecho de código mostra como você usaria as imagens de dentro do CSS como imagens de fundo.

.divone {background-image:url([[pix:theme|imageone]]);}
.divtwo {background-image:url([[pix:theme|subdir/imagetwo]]);}

Neste caso temos que usar algumas notações especiais que o Moodle procura. Quando Moodle tem em mãos um ficheiro CSS, ele procura primeiro por todas as tags e substitui-as com o que for necessário.

A última coisa a notar em ambos os casos acima, é que em nenhum momento podemos incluir a extensão do arquivo de imagens. A razão para isto nos leva ao próximo tópico, como substituir as imagens.

A partir de um tema, você pode facilmente substituir qualquer imagem padrão no Moodle simplesmente adicionando a imagem de reposição para o diretório do tema pix na mesma estrutura de diretório do Moodle. Assim, por exemplo se quiséssemos substituir os seguintes duas imagens:

  1. /pix/moodlelogo.gif
  2. /pix/i/user.gif

Nós simplesmente precisamos adicionar imagens de reposição ao tema nos seguintes locais:

  1. /theme/themename/pix_core/moodlelogo.gif
  2. /theme/themename/pix_core/i/user.gif

Note que criamos um diretório pix_core em nosso tema. Para as imagens do módulo precisamos de um diretório pix_mod. Ver using images within your theme para o tutorial completa..

Agora, outra coisa muito legal de mencionar é que o Moodle procura não apenas substituições do mesmo tipo de imagem (jpg, gif, etc ..), mas também substituições em qualquer formato de imagem. É por isso que acima quando trabalhamos com nossas imagens nunca especificamos a extensão do arquivo de imagens. Isto significa que isso também deve funcionar

  1. /theme/themename/pix_core/moodlelogo.png
  2. /theme/themename/pix_core/i/user.bmp

Para uma descrição mais detalhada de como tudo isso funciona, veja a página sobre using images within your theme

Coisas não óbvias

Getting Your Theme to Appear Correctly in Theme Selector

If you follow the examples on this page to the letter, when you go to the Theme Selector page you may be discouraged to find that your theme does not appear like the other themes do. In fact, instead of your theme's name, you will see something along the lines of [[pluginname]].

To correct this, you must add the /lang/en/theme_THEMENAME.php file, where THEMENAME is the name of the theme folder. Inside that file, add the string "$string['pluginname'] = 'THEMENAME'; ". Make THEMENAME the name of your theme, however you want it displayed in the Theme selector.

The screenshot for the theme should be about 500x400 px.

Required theme divs

Some parts of Moodle may rely on particular divs, for example the div with id 'page-header'.

Consequently all themes must include at least the divs (with the same ids) that are present in the 'base' theme.

Missing out these elements may result in unexpected behaviour within specific modules or other plugins.

Appendix A

Theme options as of April 28th, 2010

Setting Effect
$THEME->csspostprocess Allows the user to provide the name of a function that all CSS should be passed to before being delivered.
$THEME->editor_sheets An array of stylesheets to include within the body of the editor.
$THEME->enable_dock If set to true the side dock is enabled for blocks
$THEME->hidefromselector Used to hide a theme from the theme selector (unless theme designer mode is on). Accepts true or false.
$THEME->filter_mediaplugin_colors Used to control the colours used in the small media player for the filters
$THEME->javascripts An array containing the names of JavaScript files located in /javascript/ to include in the theme. (gets included in the head)
$THEME->javascripts_footer As above but will be included in the page footer.
$THEME->larrow Overrides the left arrow image used throughout Moodle
$THEME->layouts An array setting the layouts for the theme
$THEME->name Name of the theme. Most likely the name of the directory in which this file resides.
$THEME->parents An array of themes to inherit from
$THEME->parents_exclude_javascripts An array of JavaScript files NOT to inherit from the themes parents
$THEME->parents_exclude_sheets An array of stylesheets not to inherit from the themes parents
$THEME->plugins_exclude_sheets An array of plugin sheets to ignore and not include.
$THEME->rarrow Overrides the right arrow image used throughout Moodle
$THEME->renderfactory Sets a custom render factory to use with the theme, used when working with custom renderers.
$THEME->resource_mp3player_colors Controls the colours for the MP3 player
$THEME->sheets An array of stylesheets to include for this theme. Should be located in the theme's style directory.

The different layouts as of August 17th, 2010

Layout Purpose
base Most backwards compatible layout without the blocks - this is the layout used by default.
standard Standard layout with blocks, this is recommended for most pages with general information.
course Main course page.
coursecategory Use for browsing through course categories.
incourse Default layout while browsing a course, typical for modules.
frontpage The site home page.
admin Administration pages and scripts.
mydashboard My dashboard page.
mypublic My public page.
login The login page.
popup Pages that appear in pop-up windows - no navigation, no blocks, no header.
frametop Used for legacy frame layouts only. No blocks and minimal footer.
embedded Embeded pages, like iframe/object embedded in moodleform - it needs as much space as possible
maintenance Used during upgrade and install. This must not have any blocks, and it is good idea if it does not have links to other places - for example there should not be a home link in the footer.
print Used when the page is being displayed specifically for printing.

See also