# Funções

Funções são conjuntos de comandos já prontos que realizam determinado procedimento nos servidores Tray. Essas funções têm como objetivo facilitar e estruturar o desenvolvimento.

A utilização de funções possibilita consultar informações de Produtos, Marcas e Categorias, onde também disponibiliza utilidades como referenciar o caminho absoluto do tema além de exibir imagens e textos cadastrados no painel administrativo da Tray.

### Todas Funções Disponíveis <a href="#ir-para-funcoes-disponiveis" id="ir-para-funcoes-disponiveis"></a>

| [<mark style="color:blue;">**asset()**</mark>](https://partners.tray.com.br/themes/construindo-seu-template/referencias/funcoes/asset)   | [**Image()**](https://partners.tray.com.br/themes/construindo-seu-template/referencias/funcoes/image)             |
| ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| [<mark style="color:blue;">**Brands()**</mark>](https://partners.tray.com.br/themes/construindo-seu-template/referencias/funcoes/brands) | [**Products()**](https://partners.tray.com.br/themes/construindo-seu-template/referencias/funcoes/products)       |
| [**Categories()**](https://partners.tray.com.br/themes/construindo-seu-template/referencias/funcoes/categories)                          | [**Translation()**](https://partners.tray.com.br/themes/construindo-seu-template/referencias/funcoes/translation) |

## Chamadas de Funções <a href="#ir-para-chamadas-de-funcoes" id="ir-para-chamadas-de-funcoes"></a>

Com um tema Tray podemos manipular funções de diversas maneiras, como exibir seus atributos na tela, utilizar laços de repetição e fazer validações, tudo isso de acordo com a necessidade.

Algumas funções como por exemplo `Product(), Brands()` e `Categories()` sempre retornarão um array (vetor) de dados, por isso para exibir determinada informação você deve passar seu índice dentro desse vetor. Já as funções como `Assets(), Image()` e a `Translation()`, retornam apenas informações pontuais.

Desta forma, para exibir uma posição do vetor de `products` retornadas pela função temos:

```twig
{% set products = Products() %}
  {{ products[0].id}}
```

Podemos também exibir todos os produtos ou todas as categorias utilizando um laço `for`:

```twig
{% set products = Products({
    'order': {
        'quantity_sold': 'desc',
        'name': 'asc',
        'id': 'desc'
    }
}) %}
{% for product in products %}
  {{ product.name }}
{% endfor %}
```

```twig
{% set myCategories = Categories({ "order": { "name": "asc" }}) %}
<ul>
  {% for category in myCategories %}
    <li>{{ category.name }}</li>
  {% endfor %}
</ul>
```

Além disso podemos utilizar por exemplo a função `Image()` para exibir um botão adicional cadastrado no painel como por exemplo:

```twig
{{ Image('additional_button') }}
```

Também podemos adicionar arquivos `.css`, `.js` ou até mesmo imagens utilizando a função `Asset()`

```html
<img src="{{ asset('img/my-image.png') }}" alt="">
<script src="{{ asset('js/style.js') }}"></script>
<link rel="stylesheet" href="{{ asset('css/style.css') }}">
```
