Switching Theme What is Handlebars? About Ghost themes File Structure Create your own Built-in Helpers Troubleshooting Themes Mudando de Tema Os temas para o Ghost esto em content/themes/ Se voc quer usar um tema diferente do padro Casper, d uma olhada nos nossos temas personalizados na nosso marketplace gallery (http://marketplace.ghost.org/). Baixe o tema de sua escolha, extraia ele e coloque em content/themes ao lado do Casper. Se voc quer fazer seu prprio, ns recomendamos copiar e renomear o diretrio casper e editar os templates para parecerem e funcionarem da maneira que voc quer. Para mudar para seu mais novo tema: 1. Reinicie o Ghost. Nesse momento o Ghost no sabe que voc colocou uma nova pasta dentro de content/themes ento precisamos reiniciar ele 2. Entre na parte de administrao do Ghost e navegue para /ghost/settings/general/ 3. Selecione o nome do tema nas opes 'Theme', no menu dropdown 4. Clique em 'Salvar' 5. Visite seu blog e maravilhe-se com seu novo tema. ** Nota: ** Se voc est no com um servio de hospedagem do Ghost, ao invs de uma auto-instalao, para mudar o tema que voc precisa ir para a adminsitrao do seu blog (https://ghost.org/blogs/) e clique em "Editar" ao lado do nome do seu blog. O que so Handlebars? Handlebars (http://handlebarsjs.com/) a linguagem de templates usada pelo Ghost. A handlebars fornece os poderes necessrios para criar templates semnticos efetivamente e sem frustraes. Se voc est querendo comear a escrever seu prprio tema, voc porovavelmente ir querer se familiarizar com a sintaxe do Handlebars primeiro. D uma lida na documentao do handlebars (http://handlebarsjs.com/expressions.html), ou veja esse tutorial do Treehouse (http://blog.teamtreehouse.com/getting-started-with-handlebars-js) voc pode pular a primeira seo da instalao e uso (ns fizemos essa parte para voc) e focar na parte de Basic Expressions. Ghost tambm faz uso de uma biblioteca adicional chamada express-hbs , que acrescenta algumas novas funcionalidades (https://github.com/barc/express- hbs#syntax) ao handlebars e o Ghost acaba se utilizando muito de, como por exemplo, as funcionalidades de layouts e partials. Sobre os Temas do Ghost Temas do Ghost so para ser simples de construir e manter. Eles se guiam por uma grande separao entre os templates (o HTML) e qualquer arquivo de lgica (JavaScript). A handlebars so (quase) sem lgica e refora essa separao, fornecendo o mecanismo auxiliar para que a lgica para a exibio de contedo permanea separada e independente. Esta separao necessria para facilitar a colaborao entre designers e desenvolvedores na construo de temas. Templates Handlebars so hierrquicos (um template pode extender outro template) e tambm suporta templates parciais. O Ghost usa essas funes para reduzir a duplicao de cdigo e manter os templates individuais focados em fazer um nico trabalho, e fazer isso bem. Uma boa estrutura de tema se torna fcil de atualizar, e manter esses componentes separados faz ser muito mais fcil reutilizar esses arquivos pelos temas. Ns realmente esperamos que voc vai desfrutar de nossa abordagem para fazer temas. A Estrutura de Arquivos dos Temas do Ghost A estrutura recomendada essa: . /assets | /css | screen.css | /fonts | /images | /js default.hbs index.hbs [obrigatrio] post.hbs [obrigatrio] Por enquanto no h nenhuma exigncia de que default.hbs ou quaisquer outra pasta exista. recomendado que voc mantenha os seus assets dentro de uma pasta chamada asset e fazer uso da {{asset}} helper para conter os seus css, js, imagem, fonte e outros arquivos para o seu tema. index.hbs e post.hbs so obrigatrios - Ghost no vai funcionar se estes dois arquivos no estiverem presentes. Nota: enquanto edita, um arquivo existente, as modificaes so geradas em tempo real, mas voc ter que reiniciar o Ghost cada vez que voc adicionar ou remover um arquivo a partir do diretrio do tema para que possa ser reconhecido e utilizado. Partials Voc tambm pode adicionar, opcionalmente, um partials do diretrio de seu tema. Isto deve incluir todos os templates que deseja usar no seu blog, por exemplo list-post.hbs pode incluir o seu template para a mostrar um nico post em uma lista, que pode ento ser usada na pgina inicial, e, no futuro, de arquivamento. Para emitir o list-post.hbs por exemplo, voc usaria {{> list-post}} . partials tambm onde voc pode colocar modelos para substituir os modelos integrados utilizados por certos helpers como paginao. Incluindo o arquivo pagination.hbs dentro da partials permitir que voc especificar seu prprio HTML para a paginao. default.hbs Esse o layout padro, ou template base, que contm todas as partes chatas de HTML que tm de aparecer em todas as pginas - o <html> , <head> e <body> tags que esto junto com o {{ghost_head}} e {{ghost_foot}} helpers, assim como qualquer cdigo HTML que compe um cabealho e rodap repetido para o blog. O template padro contm a handlebars {{{body}}} para indicar onde o contedo vai estar partir de templates que estendem o templates padro. Os templates para as pginas que tem {{!< default}} na primeira linha para especificar que eles estendem o template padro, e que o seu contedo deve ser colocado no lugar onde default.hbs {{{body}}} est definida. index.hbs Este o template para a pgina inicial, e se estende default.hbs . Para a pgina inicial passada uma lista de artigos que devem ser exibidos, e index.hbs define como cada um dos artigos devem ser exibidos. No Casper (o tema padro atual), a pgina inicial tem um grande cabealho que usa @blog como configuraes globais para a sada do logotipo, ttulo e descrio do blog. Isto seguido por um usando o helper {{#foreach}} para produzir uma lista dos posts mais recentes. post.hbs Este o template para um nico post, que tambm se estende default.hbs . No Casper (o tema padro atual), o modelo nico post tem a sua prpria header, utilizando tambm @blog como configuraes globais e, em seguida, usa o assessor de dados {{#post}} para a sada de todos os detalhes dos posts. page.hbs Voc pode, opcionalmente, fornecer um template para pginas estticas. Se o tema no tem um template page.hbs , o Ghost usar o padro post.hbs . As pginas tm exatamente os mesmos dados disponveis como um post, elas simplesmente no aparecem na lista de posts. error.hbs Voc pode, opcionalmente, fornecer um template de erro para qualquer erro 404 ou 500. Se o tema no fornece um template error.hbs o Ghost usar seu padro. Para ver como acessar os dados sobre um erro, de uma olhada no template de erro padro do Ghost, que est localizado em /core/server/views/user-error.hbs Estilizao de posts & visualizao Ao construir temas para o Ghost por favor, considere o escopo de suas classes, e em particular os seus IDs, para tentar evitar confrontos entre o seu estilo principal e o estilo dos seus posts. Voc nunca sabe quando um nome de classe ou em particular um ID (por causa da auto-gerao de IDs para ttulos) vai ser usado dentro de um post. Por isso melhor sempre coisas de escopo para uma determinada parte da pgina. Por exemplo #meu-id poderia igualar as coisas que voc no espera enquanto #meuthema-meu-id seria mais seguro. Ghost tem como objetivo oferecer uma pr-visualizao realista de suas mensagens com o seu editor de tela dividida, mas para isso, preciso carregar um estilo personalizado de um tema para um post no site de administrao. Este recurso ainda no foi implementado, mas altamente recomendvel manter seus estilos de posts em um arquivo separado (post.css) a partir de outros estilos para o seu tema (style.css) de modo que voc vai rapidamente ser capaz de tirar proveito desse recurso na futuro. Criando o seu prprio tema Crie seu prprio tema para o Ghost copiando Casper, ou adicionando uma nova pasta com o contedo no diretrio content/themes com o nome de seu tema, como por exemplo meu-tema (nomes devem estar em letras minsculas, e conter apenas letras, nmeros e hfens). Em seguida, adicione dois arquivos vazios para sua nova pasta tema: index.hbs e post.hbs. Ele no vai mostrar nada, mas isso efetivamente um tema vlido. A lista de posts index.hbs entregou um objeto chamado posts , que pode ser usado com o helper foreach para a sada de cada post. Por exemplo {{#foreach posts}} // Aqui estamos no contexto de um nico post // O que voc colocar aqui executado para cada posts {{/foreach}} Veja a seo sobre o helper {{#foreach}} para mais detalhes. Paginao Veja a seo sobre o helper {{pagination}} para mais detalhes. Produzir mensagens individuais Uma vez que voc est no contexto de um nico post, seja por loop atravs da lista de postagens com foreach ou dentro de post.hbs voc tem acesso s propriedades de um post. Por enquanto, estes so: id post id title ttulo do post url a URL relativa para de um post content HTML do post published_at Data que o post foi publicado author detalhes completos do autor do post (veja abaixo para mais detalhes) Each of these properties can be output using the standard handlebars expression, e.g. {{title}} . Cada uma destas propriedades pode ser produzido usando a handlebars padro, por exemplo, {{title}} . Notas: the content property is overridden and output by the {{content}} helper which ensures the HTML is output safely & correctly. See the section on the {{content}} helper for more info. a propriedade de contedo substitudo pelo helper {{content}} que garante o HTML saia com segurana e corretamente. Veja a seo sobre o helper {{content}} para mais informaes. a propriedade url fornecida pelo helper {{url}} Veja a seo sobre o helper {{url}} para mais informaes. Autor do post Quando esta dentro do contexto de um nico post, os seguintes dados do autor esto disponveis: {{author.name}} the name of the author {{author.email}} the author's email address {{author.bio}} the author's bio {{author.website}} the author's website {{author.image}} the author's profile image {{author.cover}} the author's cover image Voc pode usar apenas {{author}} para ter o nome do autor. Isto tambm pode ser feito por meio de um bloco de expresso: {{#author}} <a href="mailto:{{email}}">Email {{name}}</a> {{/author}} Tags do Post Quando dentro do contexto de um nico post, os seguintes dados de tag esto disponveis {{tag.name}} nome da tag Voc pode usar apenas {{tags}} para ter uma lista personalizada de tags, isso tambm pode ser feito usando uma expresso de bloco: <ul> {{#tags}} <li>{{name}}</li> {{/tags}} </ul> Veja a seo sobre o helper de {{tags}} para mais detalhes das opes. Configuraes Globais Temas para o Ghost tm acesso a uma srie de configuraes globais atravs do assessor de dados global @Blog . {{@blog.url}} a url especifica para esta env esta em config.js {{@blog.title}} o ttulo do blog na pgina de configuraes {{@blog.description}} a descrio do blog a partir da pgina de configuraes {{@blog.logo}} o logotipo do blog retirado da pgina de configuraes Built-in Helpers O Ghost tem diversos Helpers que lhe do as ferramentas que voc precisa para construir o seu tema. Helpers so classificados em dois tipos: block e output helpers Block Helpers (http://handlebarsjs.com/block_helpers.html) tem uma marca de incio e fim Exemplo: {{#foreach}}{{/foreach}} . O contexto entre as tags muda e esses helpers tambm podem fornecer propriedades adicionais que voc pode acessar com o smbolo '@'. Output Helpers so muito parecidos com as expresses utilizadas para sada de dados, por exemplo {{content}} . Eles realizam operaes teis sobre os dados antes de ger-lo, e muitas vezes lhe proporcionam opes de como formatar os dados. Alguns output helpers usam modelos para formatar os dados com HTML. Alguns output helpers tambm so block helpers, fornecendo uma variao da sua funcionalidade. foreach Tipo de Helper: block Opicionais: columns (nmero) {{#foreach}} um helper de loop especial projetado para trabalhar com listas de posts. Por padro, cada helper no handlebars adiciona as propriedades privadas @index como arrays e @key como objetos, que pode ser usado dentro da cada loop. foreach estende e adiciona as propriedades privadas adicionais de @first , @last , @even , @odd , @rowStart e @rowEnd para arrays e objetos. Isso pode ser usado para produzir layouts mais complexos para as listas de post e outros contedos. Para exemplos, veja abaixo: @first & @last O exemplo a seguir verifica atravs de um array ou objeto por exemplo, posts e testa se a primeira entrada. {{#foreach posts}} {{#if @first}} <div>Primeiro post</div> {{/if}} {{/foreach}} We can also nest if statements to check multiple properties. In this example we are able to output the first and last post separately to other posts. Podemos tambm aninhar declaraes de if para verificar vrias propriedades. Neste exemplo, possivel mostrar o primeiro e ltimo post separado para outros lugares. {{#foreach posts}} {{#if @first}} <div>Primeiro post</div> {{else}} {{#if @last}} <div>ltimo post</div> {{else}} <div>Todos os outros posts</div> {{/if}} {{/if}} {{/foreach}} @even & @odd O exemplo a seguir adiciona uma classe de par ou mpar, o que poderia ser utilizada para o contedo de listras de zebra: {{#foreach posts}} <div class="{{#if @even}}even{{else}}odd{{/if}}">{{title}}</div> {{/foreach}} @rowStart & @rowEnd The following example shows you how to pass in a column argument so that you can set properties for the first and last element in a row. This allows for outputting content in a grid layout. O exemplo a seguir mostra como passar um argumento de coluna, de modo que voc pode definir propriedades para o primeiro e ltimo elemento em uma linha. Isto permite a sada de contedo em um layout em grid. {{#foreach posts columns=3}} <li class="{{#if @rowStart}}Primeiro{{/if}}{{#if @rowEnd}}ltimo{{/if} }">{{title}}</li> {{/foreach}} content Tipo de Helper: output Opicionais: words (nmero), characters (nmero) [por pado mostra todos] {{content}} um helper muito simples de ser usado para a sada de contedo do post. Ele garante que o seu HTML recebe sada corretamente. Voc pode limitar a quantidade de contedo HTML de sada, passando um dos opcionais: {{content words="100"}} produzir apenas 100 palavras com as tags HTML corretamente combinados. excerpt Tipo de Helper: output Opicionais: words ( nmero), characters ( nmero) [por pado mostra 50 palavras] {{excerpt}} sadas de contedo, porm retira todas as tags HTML. Isto bem til para a criao de trechos de posts. Voc pode limitar a quantidade de texto para a sada, passando uma das opes: {{excerpt characters="140"}} produzir 140 caracteres de texto. tags Tipo de Helper: output Opicionais: separator (string, default ", "), suffix (string), prefix (string) {{tags}} um auxiliar para a sada de uma lista de tags para um post especfico. O padro uma lista separada por vrgula: // a saida algo como 'minha-tag, minha-outra-tag, mais-tags' {{tags}} mas voc pode personalizar o separador entre tags: // a saida algo como 'minha-tag | minha-outra-tag | mais tags' {{tags separator=" | "}} Alm de passar um prefixo ou sufixo opcional. // a saida algo como 'Tagueado como: minha-tag | minha-outra-tag | mais tags' {{tags separator=" | " prefix="Tagueado como:"}} date Tipo de Helper: output Opicionais: format (formato de data, default MMM Do, YYYY), timeago (boolean) {{date}} um auxiliar de formatao para datas em vrios formatos. Voc pode passar uma data e uma string para formatar uma data: // a saida algo como 'Julho 11, 2014' {{date published_at format="MMMM DD, YYYY"}} Ou voc pode passar uma flag para obter horas atrs: // a saida algo como '5 minutos atrs' {{date published_at timeago="true"}} Se voc chamar {{date}} sem nenhum formato, o padro MMM Do, YYYY. Se voc chamar {{date}} no contexto de um post sem dizer quais data para exibir, o padro ser publicado em . Se voc chamar {{date}} fora do contexto de um post sem dizer quais data para exibir, o padro ser a data atual. date use moment.js (http://momentjs.com/) para formatar a data. Veja a documentao (http://momentjs.com/docs/#/parsing/string-format/) para uma explicao completa para todas as formas possveis de formatao de data. encode Tipo de Helper: output Opicionais: nenhum {{encode}} um output helper simples, que vai codificar uma string, de modo que ele possa ser utilizada em uma URL. O exemplo mais bvio de onde isso til mostrado na Casper's post.hbs , para um link de compartilhamento do twitter <a class="icon-twitter" href="http://twitter.com/share?text={{encode title }}&url={{url absolute="true"}}" onclick="window.open(this.href, 'twitter-share', 'width=550,height=235 ');return false;"> <span class="hidden">Twitter</span> </a> Sem usar o helper {{encode}} no titulo do post, os espaos outros sinais de pontuao no ttulo no seriam tratado corretamente. url Tipo de Helper: output Opicionais: absolute {{url}} gera a url relativa para o post quando esta dentro do contexto de um post. Voc pode forar o url helper para a sada de uma URL absoluta usando o opicional absolute, por exemplo: {{url absolute="true"}} asset Tipo de Helper: output Opicionais: nenhum O {{asset}} existe para facilitar a gesto dos assets. Em primeiro lugar, ele garante que o caminho relativo para um asset sempre correto, independentemente de como Ghost est instalado. Ento, se o Ghost est instalado em um subdiretrio, os caminhos para os arquivos ainda estaram corretos, sem ter que usar URLs absolutas. Em segundo lugar, ele permite que os assets a serem armazenadas em cache. Todos os assets so acessados com ?v=####### que muda quando o Ghost reiniciado e garante que os assets podem ser cachiados quando necessrio. Em terceiro lugar, proporciona estabilidade para desenvolvedores de tema para que, como a manipulao dos asset do Ghost e a sua gesto madura, os desenvolvedores de tema no precisam fazer mais ajustes para os seus temas, quanto eles utilizam o asset helper. Finalmente, isso impe um pouco de estrutura em temas, exigindo uma pasta de assets , o que significa que o Ghost saber onde seus assets, e o tema de instalao esto, desta maneira torna mais fcil o live reloading no futuro. Uso Para usar o {{asset}} helper para a obter o caminho de um asset, simplesmente fornecer-lhe o caminho para o recurso que voc deseja carregar, com relao a pasta de asset . // a saida algo como: <link rel="stylesheet" type="text/css" href="/path /to/blog/assets/css/style.css?v=1234567" /> <link rel="stylesheet" type="text/css" href="{{asset "css/style.css"}}" /> // a saida algo como: <script type="text/javascript" src="/path/to/blog/ assets/js/index.js?v=1234567"></script> <script type="text/javascript" src="{{asset "js/index.js"}}"></script> Favicons Favicons so uma ligeira exceo regra de como usar o asset helper, porque o navegador sempre pede um favicon, independentemente do tema, e Ghost tem como objetivo atender a esse pedido o mais rpido possvel. Por padro {{asset "favicon.ico"}} funciona exatamente da mesma maneira como pedido pelo navegador, servindo o favicon padro do Ghost a partir da pasta compartilhada. Isso significa que o navegador no tem que procurar o tema que o blog esta usando ou onde o tema est antes de do navegador requisitar. Se voc preferir usar um favicon personalizado, voc pode faz-lo, colocando um favicon.ico na pasta de asset do seu tema e usando o asset helper com uma barra inicial: {{asset "/favicon.ico"}} This trailing slash tells Ghost not to serve the default favicon, but to serve it from the themes asset folder. Esta barra no final diz ao Ghost para no para mostrar o favicon padro, mas para mostrar o faviocon da pasta de asset do tema. pagination (pagination-helper) Tipo de Helper: output, template-driven Opicionais: nenhum (em breve) {{pagination}} um helper dirigido ao template que gera um HTML para os 'posts' mais recentes e links dos posts mais velhos "se eles esto disponveis, tambm diz que a pgina que voc est. Voc pode substituir o HTML gerado pelo pagination helper, colocando um arquivo chamado pagination.hbs dentro de content/themes/your-theme/partials . body_class Tipo de Helper: output Opicionais: nenhum {{body_class}} classes destinadas a tag <body> em default.hbs , teis para o direcionamento de estilo para pginas especficas. post_class Tipo de Helper: output Opicionais: nenhum {{post_class}} classes destinadas ao connteiner de post, til para setar seus posts com estilos. ghost_head Tipo de Helper: output Opicionais: nenhum {{ghost_head}} Vem pouco antes da tag </head> em default.hbs , usado colocar as meta tags, scripts e estilos. Ser hookavel. ghost_foot Tipo de Helper: output Opicionais: nenhum {{ghost_foot}} Vem pouco antes da tag </body> em default.hbs , usado colocar scripts. Mostra o Jquery por padro. Ser hookavel. meta_title Tipo de Helper: output Opicionais: nenhum {{meta_title}} outputs the post title on posts, or otherwise the blog title. Used for outputting title tags in the </head> block. E.g. <title>{{meta_title}}</title> . Will be hookable. mostra o ttulo do post nos posts, ou caso contrrio o ttulo do blog. Usado para sada de tags de ttulo no bloco </head> . Por exemplo `. Ser hookavel. meta_description Tipo de Helper: output Opicionais: nenhum {{meta_description}} - no mostra nada (ainda) nos posts, gera a descrio do blog em todas as outras pginas. Usado para mostra a meta tag description. Por exemplo <meta name="description" content="{{meta_description}}" /> . Ser hookavel. Resoluo de Problemas nos Temas 1. Eu vejo o Erro: Falha ao achar os arquivos "index" ou "post" Lovingly created and maintained by John O'Nolan (http://john.onolan.org) + Hannah Wolfe (http://erisds.co.uk) + an amazing group of contributors (https://github.com/TryGhost/Ghost/contributors). All code copyright (C) 2014 The Ghost Foundation - Released under the MIT (http://tryghost.org/about/license.html) License. All documentation is released under the Creative Commons By-3.0 (http://creativecommons.org/licenses/by/3.0/) License. Verifique se na pasta de seu tema contm um arquivo index.hbs e post.hbs nomeados corretamente como so necessrios