Tray OpenCode
Desenvolvimento de temas da plataforma de e-commerce Tray
OpenCode - Vamos Começar?
Possibilidade de criar layouts para loja de forma simples e rápida.
Com Tray OpenCode você pode fazer vários testes de layout.
Disponibiliza flexibilidade para a loja virtual em várias ocasiões que
envolvem datas comemorativas como Natal, Dia das Mães, Dia dos
Namorados, entre outras.
Template Engine - Twig
Para facilitar a manipulação dos objetos e funções disponíveis
é utilizado o Template Engine Twig.
Não são disponibilizados todos os recursos do Twig.
Para mais informações acesse:
Iniciando um Tema
É possível desenvolver um tema de duas maneiras:
Administração GEM OpenCode.
Loja Virtual
Iniciando um Tema - GEM Ruby
Criação e gerenciamento do tema através de linha de comando.
Facilidade e agilidade no desenvolvimento do tema.
Instalação GEM (Pré requisito - Ruby):
$ gem install opencode_theme $ opencode systeminfo
Iniciando um Tema - GEM Ruby
Criação do Primeiro Tema
$ mkdir primeiro-tema $ cd primeiro-tema
Iniciando um Tema - GEM Ruby
Comandos OpenCode - GEM:
opencode new API_KEY PASSWORD THEME_NAME THEME_BASE
opencode clean
opencode configure API_KEY PASSWORD THEME_ID
opencode download FILE
opencode help [COMMAND]
opencode list
opencode open
opencode remove FILE
opencode systeminfo
opencode upload FILE
Estrutura do Tema
Estrutura para melhor organização:
elements/ -> trechos de código e componentes reutilizáveis layouts/ -> estrutura do seu tema, código que será carregado em ...todas as páginas
pages/ -> conteúdo de cada página da sua loja
css/ -> você pode inserir suas folhas de estilo e webfonts js/ -> você pode inserir seus plugins js
img/ -> pasta de imagens
configs/ -> opções da sua loja virtual (ainda em ... desenvolvimento)
layouts/
pages/
O que é?
elements/
elements/snippets/
O que é?
Páginas Disponíveis
As seguintes páginas estão disponíveis para edição:
pages/
catalog.html -> página de categoria
home.html -> página inicial
map.html -> mapa do site
product.html -> página de produto
Verifique se os arquivos correspondem a codificação correta
Codificação de Arquivos
Tipo Codificação html ISO-8859-1 js UTF-8 css UTF-8Objetos - O que são?
Objetos são estruturas de dados utilizadas para facilitar a manipulação
de determinadas informações.
Podemos citar por exemplo o objeto
product
que contém todos os
atributos de um produto,e também o objeto
categories
que tem como
informação todas as categorias da loja.
{{ categories[0].name}}
{% for product in products %} {{ product.name }}
Objeto - banner
O objeto
banner
é responsável por trazer os banner cadastrados no
painel e mostrá-lo conforme características necessárias
Para imprimir um
banner
,você poderá utilizar o helper de banner, onde
exibem os banners em um bloco pré-moldado. Segue abaixo algumas
chamadas:
{{ banner.home }}
{{ banner.bottom }}
Objeto - themePath
O objeto
themePath
é utilizado para referenciar o caminho absoluto do
tema, com ele é possível incluir arquivos ao tema como
css
,
javascript
e
imagens
.
<img src="{{ themePath }}img/my-image.png" alt="">
<script src="{{ themePath }}js/style.js?"></script>
Objeto - utils
O objeto
utils
é um objeto de utilidade técnica e ele verifica o
ambiente da loja virtual, alem de adicionar um hash ao final dos assets
para que os arquivos não sejam carregados através do cache do
navegador.
Objeto - breadcrumb
O
breadcrumb
é responsável por exibir retornar um array com as
informações de localização das categorias relacionadas
Para imprimir um
breadcrumb,
você poderá utilizar o helper de
breadcrumb, onde exibem o breadcrumb em um bloco pré-moldado.
Objeto - category
O Objeto
category
é responsável por retornar a categoria atual do
tema, através dela é possível fazer validações relacionas a categoria
dos produtos
<div>
<h4>{{ category.id }}</h4> <h3>{{ category.name }}</h3> </div>
Objeto - categories
O Objeto
categories
é responsável por retornar um vetor com as
categorias cadastradas no painel.
<ul>
{% for category in categories %} <li>
<a href="{{ category.link }}">{{ category.name }}</a> </li>
{% endfor %} </ul>
Objeto - links
O Objeto
links
é responsável por retornar o caminho das paginas e
todos os links utilizados no tema
<ul>
<li><a href="{{ links.info_buy }}">Como comprar</a></li> <li><a href="{{ links.send }}">Formas de envio</a></li> <li><a href="{{ links.warranty }}">Garantia</a></li> <li><a href="{{ links.security }}">Segurança</a></li> </ul>
Objeto - pages
O Objeto
pages
contém informações das páginas da loja, como por
exemplo a página atual e as paginas personalizadas..
{% if pages.current == 'home' %}
<h4>Você é na nossa página inicial!</h4> {% else %}
<h5>Esta não é a página inicial!</h5> {% endif %}
Objeto - paymentMethods
O Objeto
paymentMethods
trás todas as informações de formas de
pagamentos a vista e a prazo cadastradas no painel.
<h5>A Vista</h5>{% for payment in paymentMethods.order %}
<img src="{{ payment.thumbnail.url }}" alt="{{ payment. display_name }}">
{% endfor %}
<h5> A Prazo</h5>
{% for payment in paymentMethods.credit %}
<img src="{{ payment.thumbnail.url }}" alt="{{ payment. display_name }}">
Objeto - product
O Objeto
product
contém as informações do produto quando está na
página de produto.
<div>
Codigo do produto: <span>{{ product.id }}</span> <h3>{{ product.name }}</h3>
<h3>{{ product.brand }}</h3> </div>
Objeto - products
O Objeto
products
está disponível de acordo com as regras de cada
página:
●
Na home contém os produtos em destaque;
●
Na catalog contém os produtos de uma categoria específica de
acordo com os filtros aplicados;
●
Na search contém os produtos de acordo com os critérios da
busca e os filtros aplicados.
<h3>{{ products[0].name }}</h3> <h3>{{ products[0].brand }}</h3>
Objeto - seals
O Objeto
seals
retorna o código para os selos de Loja Protegida e
Ebit.
{{ seals.hackersafe }}
Objeto - search
O Objeto
search
retorna informações relacionadas a busca de
produtos.
{% if search.available_options %} <h3> Exibir Por:</h3>
<select name="disponibilidade_tag">
{% for option in search.available_options %}
<option value="{{ option.value }}">{{ option.name }}</option>
{% endfor %} </select>
Objeto - filters
O Objeto
filters
retorna um array com filtros que da a possibilidade
de montar filtros inteligente.
Este recurso é necessário estar ativo para o cliente.
{% for myFilter in filters %}{% if myFilter.items %} {{ myFilter.title }} {% elseif myFilter|length %} {% for var in myFilter %} {{ var.title }}</h3> {% endfor %}
{% endif %} {% endfor %}
Objeto - paginate
O Objeto
paginate
retorna um helper de paginação de produtos.
Objeto - store
O Objeto
store
retorna as informações básicas da loja.
{{ store.id }}
{{ store.name }}
{{ store.url }}
Objeto - tags
O Objeto
tags
retorna uma lista com as palavras mais buscadas na
loja.
{% for tag in tags %}
<a href="{{ tag.url }}" style="font-size: {{ tag. font_size }}%">{{ tag.word }}</a>
Funções - O que são?
Uma Função poderia ser definida como um conjunto de instruções que
permitem processar as variáveis para obter um resultado.
É através do uso destas funções que se torna possível manipular os
resultados exibidos em sua loja virtual
Você pode por exemplo: Ordenar seus resultados, exibir imagens, listar
produtos,
marcas
e
categorias
especificas
entre
diversas
funcionalidades
Função - asset()
A função
assets()
é utilizada para referenciar o caminho absoluto do
tema, com ele é possível incluir arquivos ao tema como
css
,
javascript
e
imagens
.
<img src="{{ asset('img/my-image.png') }}" alt="">
<script src="{{ asset('js/style.js') }}"></script>
Função - Brands()
A função
Brands()
retorna as marcas cadastradas no Painel
Administrativo da loja.
<ul>
{% set brands = Brands() %}
{% for brand in brands %}
<li>{{ brand.name }}</li> {% endfor %}
Função - Categories()
A função
Categories()
retorna as categorias cadastradas no Painel
Administrativo da loja.
{% set myCategories = Categories({"order":{"name": "asc"}}) %}
<ul>
{% for category in myCategories %} <li>{{ category.name }}</li> {% endfor %}
Função - Image()
A função
Image()
uma imagem cadastrada no Painel Administrativo.
{{ Image('sign_in') }}
{{ Image('logo') }}
{{ Image('buy') }}
Função - Products()
A função
Products()
retorna os produtos cadastrados na loja.
{% set products = Products({ 'filter': 'featured', 'limit': 8,
'order': {'quantity_sold': 'desc'}, 'categories': [2, 3],
'brands': 'Tray' }) %}
Função - Translation()
A função
Translation()
exibe um texto de acordo com o cadastrado
na sua loja no Painel Administrativo.
Localizado os textos em Configurações > Textos / Lang.
{{ Translation('ag_telefone_1') }}
{{ Translation('aviso_implantacao_topo') }}
O que são Data Attributes ?
Os Data Attributes , são Atributos de dados que fazem com que os
módulos disponíveis na plataforma funcionem sem a necessidade de
escrever linhas Javascript.
Veja a lista de módulos disponíveis:
●
Cart
●
Customer
●
Logged User
●
Filter
Data Attribute - Cart
Para contornar o cache, utilize as marcação abaixo para exibir os dados
do carrinho atualizados.
Para exibir a quantidade de itens no carrinho utilize:
Para exibir o valor total do carrinho utilize:
<span data-cart="amount"></span>Data Attribute - Customer
Para contornar o cache, utilize a marcação abaixo para exibir o nome
do cliente logado.
Data Attribute - Logged User
Verifica se o cliente está logado ou deslogado na loja.
<!-- Cliente Logado--><span class="tray-hide" data-logged-user="true">
<li> Olá<span data-customer="name"></span></li> <li><a href="{{ links.logout }}">sair</a></li> </span>
<!-- Cliente Deslogado-->
<span class="tray-hide" data-logged-user="false"> <li>
<a href="{{ links.login }}">Login </a> |
<a href="{{ links.sign_in }}">Crie sua conta</a> <li>
Data Attribute - Filter
Com o data-attribute filter é possível filtrar os produtos exibidos e
ordená-los.
<form data-form="filter">
<h5>Filtrar por Categorias:</h5> {% set categories = Categories() %} <select name="filtrar_categorias"> {% for categorie in categories %}
<option value="{{ categorie.name }}"> {{ categorie.name }}
</option> {% endfor %} </select>
Data Attribute - Compare
Para adicionar e remover produtos da comparação de produtos via
AJAX, utilize o seguinte snippet:
{% set compareCSS = 'compare-hidden' %} <a data-compare="remove"
href="{{ links.compare_delete ~ product.id }}" class="{{ not product.compare ? compareCSS }}"> {{ Translation("remover_comparar") }}
</a>
<a data-compare="add"
href="{{ links.compare_add ~ product.id }}" class="{{ product.compare ? compareCSS }}"> {{ Translation("comparar_produto") }} </a>
Data Attribute - Search
Esse data attribute é responsável por adicionar a sugestão de busca a
caixa de pesquisa
<form data-search="suggestion">
<input data-input="suggestion" type="text"> </form>
APIs REST Públicas
As APIs REST Públicas possibilita consultar algumas informações da
loja virtual através de um javascript, onde são retornadas as
informações através de um JSON.
As APIs traz mais versatilidade no desenvolvimento de temas.
Disponível 5 APIs REST Públicas:
●
Busca
●
Carrinho de Compra
●
Categorias
●
Produtos
API de Busca
Através da API de Busca é possível consultar os produtos contidos na
loja virtual através de palavras-chave.
<script type="text/javascript">
$.ajax({
method: "GET",
url: "/web_api/search/", data: params
}).done(function( response, textStatus, jqXHR ) { console.log(response);
}).fail(function( jqXHR, status, errorThrown ){
var response = $.parseJSON( jqXHR.responseText ); console.log(response);
}); </script>
API de Carrinho de Compra
Através da API de Carrinho de compra é possível incluir produtos e
resgatar informações do carrinho de compra, retornando a URL deste
carrinho para exibição ao cliente.
É possível realizar a requisição via:
●
POST: Para incluir produtos no carrinho de compra.
API de Carrinho de Compra - GET
Consultado dados do carrinho de compra.
<script type="text/javascript">
var dataSession = $("html").attr("data-session");
$.ajax({
method: "GET",
url: "/web_api/cart/"+dataSession
}).done(function( response, textStatus, jqXHR ) { console.log(response);
}).fail(function( jqXHR, status, errorThrown ){
var response = $.parseJSON( jqXHR.responseText ); console.log(response);
}); </script>
API de Carrinho de Compra - POST
Incluindo produto no carrinho de compra.
<script type="text/javascript">
var dataSession = $("html").attr("data-session"); $.ajax({
method: "POST",
url: "/web_api/cart/",
contentType: "application/json; charset=utf-8", data: '{"Cart":{"session_id":"'+dataSession+'"," product_id":"100","quantity":"2","variant_id":"0"}}'
}).done(function( response, textStatus, jqXHR ) { console.log(response);
}).fail(function( jqXHR, status, errorThrown ){
var response = $.parseJSON( jqXHR.responseText ); console.log(response);
}); </script>
API de Categorias
Através da API de Categorias é possível consultar as categorias
contidas na loja virtual.
<script type="text/javascript"> var categoryId = "3";
$.ajax({
method: "GET",
url: "/web_api/categories/tree/"+categoryId }).done(function( response, textStatus, jqXHR ) {
console.log(response);
}).fail(function( jqXHR, status, errorThrown ){
var response = $.parseJSON( jqXHR.responseText ); console.log(response);
}); </script>
API de Produtos
Através da API de Produtos é possível consultar e listar os produtos
contidos na loja virtual.
<script type="text/javascript"> var productId = "84";
$.ajax({
method: "GET",
url: "/web_api/products/"+productId
}).done(function( response, textStatus, jqXHR ) { console.log(response);
}).fail(function( jqXHR, status, errorThrown ){
var response = $.parseJSON( jqXHR.responseText ); console.log(response);
}); </script>
API de Variações de Produto
Através da API de Variações de Produtos é possível identificar todas as
variações contidas na loja virtual e identificar o produto relacionado à
variação.
<script type="text/javascript"> var variantId = "5";
$.ajax({
method: "GET",
url: "/web_api/variants/" + variantId
}).done(function( response, textStatus, jqXHR ) { console.log(response);
}).fail(function( jqXHR, status, errorThrown ){
var response = $.parseJSON( jqXHR.responseText ); console.log(response);
}); </script>