{% load_products %}
Sintaxe: {% load_products ... %} Variável de output: {{ products }} — array de objetos product Contexto: disponível em qualquer template de página
{% load_products ... %}
{{ products }}
product
Essa tag lista produtos da loja.
Para utilizá-la você deve passar uma série de parâmetros como input.
O output da tag é uma lista de produtos na array {{ products }} com os objetos {{ product }} com as informações de cada produto.
{{ product }}
Os produtos do array de output podem ser acessados através de um loop for.
for
Essa tag pode ser usada em qualquer template de página.
input:
{% load_products tag:tag.name %} {% for product in products %} {{ product.name }}{% endfor %}
output:
Camiseta Verão Casaco Outono Blusão Inverno Saia Primavera
Camiseta Verão
Casaco Outono
Blusão Inverno
Saia Primavera
A tag load_products possui parâmetros principais e parâmetros de filtro. Depois desta seção, há uma explicação separada sobre a API de busca de produtos e sua relação com a listagem da vitrine.
load_products
tag
{% load_products tag:tag.name %}
q
<form action="{{ search_url }}" method="get"> <input type="search" name="search_query" /></form>
{% getparam "search_query" as params_search_query %} {% load_products q: params_search_query %}
Na documentação técnica da busca interna da plataforma, esse mesmo papel pode aparecer descrito como busca por termo textual. Na vitrine, o ponto de entrada documentado para esse comportamento continua sendo o parâmetro q.
📘 É obrigatório o uso parâmetro tag ou q dependendo da lista de produtos. Saiba mais sobre como ter acesso aos parâmetros de URL no artigo Objetos e como criar um formulário de busca no artigo search.liquid
📘
É obrigatório o uso parâmetro tag ou q dependendo da lista de produtos.
Saiba mais sobre como ter acesso aos parâmetros de URL no artigo Objetos e como criar um formulário de busca no artigo search.liquid
ids
{% load_products ids: '1, 2, 3, 4, 5' %}
parent_tag
Considere que o cliente está acessando o seguinte endereço:
https://demo.vnda.com.br/camisetas/algodao/
Ele está vendo uma lista de produtos que tenham a tag camisetas e, desses, os que possuem a tag algodao. Para respeitar ambas as tags, é preciso usar o parâmetro parent_tag.
camisetas
algodao
{% load_products tag:tag.name parent_tag:parent_tag.name %}
per_page
O parâmetro per_page controla a quantidade de produtos exibidos por página na lista de produtos. A quantidade padrão de produtos por página é 25.
É possível permitir que o cliente delimite quantos produtos devem ser exibidos por página usando a tag {% raw %}{{ getparam }}{% endraw %}.
{{ getparam }}
{% getparam 'per_page' as per_page %} {% load_products q:search_query per_page:per_page %}
sort
O parâmetro sort define a ordenação dos produtos na lista.
Veja a documentação do objeto {% raw %}{{ sort_options }}{% endraw %} para mais informações sobre como criar opções de ordenação de produtos para o cliente.
{{ sort_options }}
{% getparam "sort_by" as params_sort_by %} {% load_products q: params_search_query sort: params_sort_by %}
Na lógica de busca da plataforma, a ordenação final pode combinar mais de um critério. Em geral, a listagem considera disponibilidade, a ordenação selecionada e, em alguns contextos, critérios internos de relevância.
Valores usuais de ordenação:
newest
oldest
highest_price
lowest_price
az
za
Você pode criar filtros para que os clientes selecionem os parâmetros que devem delimitar exibição da lista de produtos.
Filtros são feitos com as informações agregadas de todos os produtos da lista, disponíveis através do objeto {% raw %}{{ aggregations }}{% endraw %}. Para permitir que o cliente tenha acesso às opções de filtro, é necessário criar um formulário HTML no tag.liquid e de search.liquid:
{{ aggregations }}
<form action="{{ current_url }}" method="get"> <h3>Filtro de materiais:</h3> {% for material in aggregations.types.material %} <p> <input id="material_{{ forloop.index }}" type="checkbox" name="type_tags[material][]" value="{{ material.name }}" /> <label for="material_{{ forloop.index }}">{{ material.title }}</label> </p> {% endfor %}</form>
Nesse caso criamos uma lista com todas as tags do tipo material que são relacionadas aos produtos na lista de produtos atual.
material
Para filtros de tipos de tag, o name do input deve ser type_tags[tipodatag][]. E para filtros de propriedades, o name do input deve ser property1_values[] ou property2_values[] ou property3_values[]
type_tags[tipodatag][]
property1_values[]
property2_values[]
property3_values[]
Existem vários filtros que podem ser usados, seja de maneira dinâmica (com o cliente definindo seus valores) ou de maneira estática, com o desenvolvedor definindo-os no código.
Para facilitar a implementação dos filtros, os templates possuem já configurado o Componente de Filtros, que pode ser expandido para exibir mais opções de filtro do que os templates adicionam por padrão.
min_price
{% load_products tag:tag.name min_price:params.min_price %}
max_price
{% load_products tag:tag.name max_price:params.max_price %}
exclude_tags
Esse parâmetro é útil quando a listagem precisa excluir produtos que participam de uma mesma coleção de navegação, mas que não devem ser exibidos naquele contexto específico.
{% load_products tag:tag.name exclude_tags: 'nao-exibir' %}
No exemplo acima, a listagem continua sendo feita a partir da tag atual, mas produtos que possuam a tag nao-exibir deixam de ser exibidos.
nao-exibir
type_tags
Na implementação de vitrine, esse parâmetro normalmente é alimentado por formulários com nomes no formato type_tags[tipodatag][].
<input type="checkbox" name="type_tags[cor][]" value="azul" /><input type="checkbox" name="type_tags[tamanho][]" value="m" />
Conceitualmente, isso equivale a enviar uma estrutura agrupada por tipo de tag para a listagem atual.
type_tags_operator: define o operador lógico que filtra as tags do mesmo tipo, se aplica a todos os tipos de tags. Possui dois valores possíveis:
type_tags_operator
OR (padrão) — o produto precisa ter qualquer uma das tags selecionadas para ser exibido.
OR
AND — o produto precisa ter todas as tags selecionadas para ser exibido.
AND
{% load_products tag: tag.name type_tags_operator: "and" %}
{% load_products tag: tag.name property1_values: params.property1_values property2_values: params.property2_values %}
Esse tipo de filtro costuma ser usado para atributos como tamanho, cor ou outros valores cadastrados nas variantes.
Esta seção resume a documentação de referência da busca de produtos da plataforma que você enviou como material complementar.
Ela não substitui o contrato documentado da tag {% load_products %}. Em vez disso, ela explica a lógica de busca que fica por trás de muitas listagens da vitrine e ajuda a entender como a plataforma organiza:
Use esta parte como uma referência da API e da lógica interna de busca de produtos.
Use as seções anteriores como referência do que está documentado aqui como uso direto do load_products em templates Liquid.
Em outras palavras:
Na documentação de referência da busca, a listagem de produtos pode combinar:
Nessa referência, o retorno é descrito como uma coleção de produtos acompanhada por dados agregados que ajudam a construir filtros e refinar a navegação.
term
page
Na referência da busca que você enviou, a ordenação pode considerar mais de um critério ao compor a lista final. Em geral, o resultado pode refletir:
Quando a consulta depende de termo textual e nenhum critério explícito é informado, a plataforma pode priorizar relevância como ordenação padrão.
tags
parent_tags
tags_operator
property1_values
property2_values
property3_values
property1_operator
property2_operator
property3_operator
places
show_inactive
show_only_available
Alguns grupos de filtro aceitam operadores lógicos para refinar o comportamento:
Isso vale, por exemplo, para:
term_fields
term_operator
types
price_ranges
agg_tags_size
agg_properties_size
agg_types_size
Na referência da busca, term_fields permite restringir onde o termo deve ser analisado. Dependendo da implementação, isso pode incluir campos como:
Já term_operator define como múltiplas palavras devem ser interpretadas:
Além da lista de produtos, a busca pode devolver dados agregados sobre o conjunto de resultados atual.
Essas agregações são importantes para montar interfaces como:
Na prática, isso se conecta diretamente com o uso de {{ aggregations }} na vitrine.
Embora a tag {% load_products %} seja o ponto de entrada documentado para uso em templates Liquid, parte do comportamento observado na vitrine reflete essa lógica de busca mais ampla.
Algumas relações úteis:
type_tags[...][]
aggregations
Ao trabalhar com load_products, é útil separar duas coisas:
Essa distinção evita tratar automaticamente todos os parâmetros da busca como se fossem contrato público da tag.
Quando {% load_products %} é usada em contextos de busca, como no template search.liquid, a plataforma pode aplicar regras internas de relevância, disponibilidade e ordenação para compor a lista final.
search.liquid
De forma geral:
Na prática, isso significa que a lista retornada não depende apenas do termo buscado, mas também das regras de ordenação e disponibilidade aplicadas pela plataforma.
Além dos exemplos de parâmetros, é útil pensar na tag {% load_products %} a partir do tipo de listagem que você precisa montar na vitrine.
Os cenários mais comuns são:
tag.liquid
Os exemplos abaixo mostram duas implementações comuns de {% load_products %}: uma para listagem por tag e outra para resultados de busca.
Essa implementação usa a tag atual da página para carregar os produtos, aplica ordenação, paginação e mantém o uso de filtros por tipo de tag.
{% getparam 'sort' as params_sort %} {% load_products tag: tag.name parent_tag: parent_tag.name per_page: 24 sort: params_sort type_tags_operator: "and" %} {% capture html_products %} {% for product in products %} <a href="{{ product.url }}">{{ product.name }}</a> {% endfor %}{% endcapture %} {% if html_products == blank %} <p>Nenhum produto encontrado para esta tag.</p>{% else %} {{ html_products }}{% endif %} {% if pagination.total_pages > 1 %} {% if pagination.prev_url %} <a href="{{ pagination.prev_url }}" rel="prev">Página anterior</a> {% endif %} {% if pagination.next_url %} <a href="{{ pagination.next_url }}" rel="next">Próxima página</a> {% endif %}{% endif %}
Nesse tipo de implementação:
pagination
Essa implementação usa o termo buscado pelo cliente e combina filtros por tipo, propriedades de variante e faixa de preço.
{% getparam 'sort' as params_sort %}{% getparam 'type_tags' as params_type %}{% getparam 'property1_values' as params_property1 %}{% getparam 'property2_values' as params_property2 %}{% getparam 'property3_values' as params_property3 %}{% getparam 'q' as params_search %}{% getparam 'min_price' as params_min_price %}{% getparam 'max_price' as params_max_price %} {% unless params_property1 %} {% assign params_property1 = '' %}{% endunless %} {% unless params_property2 %} {% assign params_property2 = '' %}{% endunless %} {% unless params_property3 %} {% assign params_property3 = '' %}{% endunless %} {% unless params_type %} {% assign params_type = '' %}{% endunless %} {% unless params_min_price %} {% assign params_min_price = 0.01 %}{% endunless %} {% unless params_max_price %} {% assign params_max_price = 999999 %}{% endunless %} {% if params_search != blank %} {% load_products q: params_search per_page: 24 type_tags: params_type sort: params_sort property1_values: params_property1 property2_values: params_property2 property3_values: params_property3 min_price: params_min_price max_price: params_max_price type_tags_operator: "and" %} {% if products.size > 0 %} {% for product in products %} <a href="{{ product.url }}">{{ product.name }}</a> {% endfor %} {% else %} <p>Nenhum produto encontrado para a busca atual.</p> {% endif %}{% else %} <p>Informe um termo para iniciar a busca.</p>{% endif %}
products
Ao executar {% load_products %}, a plataforma não disponibiliza apenas o array {{ products }}. A chamada também pode popular outros objetos usados para enriquecer a experiência de navegação na listagem.
{{ pagination }}
Em páginas de listagem, esses objetos normalmente trabalham juntos: {{ products }} renderiza os itens, {{ aggregations }} alimenta os filtros, {{ sort_options }} controla a ordenação e {{ pagination }} permite navegar entre páginas.
Em grande parte das implementações, {% load_products %} recebe valores vindos de formulários HTML e dos parâmetros da URL atual. Isso é o que permite que filtros, ordenação e paginação reajam à navegação do cliente.
Veja alguns exemplos frequentes:
<select>
Esse fluxo é especialmente comum nos templates de listagem por tag e de resultados de busca.
Em uma implementação típica, a tag {% load_products %} participa do fluxo abaixo:
Esse fluxo aparece com mais frequência em páginas de categoria, páginas de busca e outras vitrines que precisam reagir a filtros e ordenação do cliente.
Além dos cenários de listagem por tag e busca, {% load_products %} também pode ser usada para carregar um conjunto conhecido de produtos a partir de IDs.
Esse uso é útil quando o template já possui previamente a lista de produtos que precisa renderizar. Um exemplo prático está na implementação de kits nativos da plataforma, em que os IDs dos produtos internos são montados antes da chamada:
{% load_products ids: bundle_product_ids %}
Nesse tipo de cenário, a tag deixa de depender de uma listagem aberta por navegação e passa a funcionar como uma forma de hidratar um conjunto específico de produtos no template.
Em implementações de listagem, é importante considerar como a plataforma trata produtos indisponíveis.
Por padrão, a chamada de {% load_products %} pode trazer também produtos indisponíveis. Quando a vitrine precisa exibir somente itens disponíveis para compra, essa regra pode depender de configuração da plataforma e do comportamento adotado na loja.
Se a sua implementação inclui filtros visuais, grids de categoria ou páginas de busca, vale validar esse comportamento junto às configurações utilizadas no projeto antes de assumir que a listagem exibirá apenas produtos disponíveis.
Para complementar a implementação de {% load_products %}, consulte também:
sort_options