Тег `{% prefetch %}` это блочный тег для установки лимита на получение данных из базы.
Объект в теге prefetch |
limit |
offset |
sort / only_available (если поддерживаются) |
|---|---|---|---|
collection.products (и др. товары через ProductCollectionDrop) |
да | да | да (см. таблицы ниже) |
Коллекции статей (ArticleCollectionDrop) |
да | да | по реализации дропа |
account.reviews, reviews_not_spam, reviews_spam |
да | да | да (см. таблицу отзывов) |
product.related_products, product.similar_products, product.related_articles |
да | нет | порядок задаётся ассоциацией/аккаунтом, не произвольным sort из тега |
product.reviews |
да | нет | фиксированный порядок |
sort:)| Ключ | Описание |
|---|---|
title |
По названию (А–Я) |
descending_title |
По названию (Я–А) |
price |
По цене (сначала дешевле) |
descending_price |
По цене (сначала дороже) |
old_price |
По старой цене (сначала дешевле) |
descending_old_price |
По старой цене (сначала дороже) |
price_available |
По цене среди товаров в наличии |
descending_price_available |
По цене среди товаров в наличии (дороже сначала) |
discount |
По размеру скидки (сначала меньше) |
descending_discount |
По размеру скидки (сначала больше) |
discount_available |
По скидке среди товаров в наличии |
descending_discount_available |
По скидке среди товаров в наличии (больше сначала) |
age |
По давности добавления (старые первые) |
descending_age |
По давности добавления (новые первые) |
sort_weight |
По весу сортировки (возрастание) |
descending_sort_weight |
По весу сортировки (убывание) |
updated_at |
По дате обновления (старые первые) |
descending_updated_at |
По дате обновления (новые первые) |
popularity |
По популярности (сначала менее популярные) |
descending_popularity |
По популярности (сначала популярнее) |
relevance |
По релевантности (при поиске) |
manual |
Вручную (порядок в коллекции) |
sort:)| Ключ | Описание |
|---|---|
date |
По дате (старые первые) |
date_desc |
По дате (новые первые) |
rating |
По оценке (низкие первые) |
rating_desc |
По оценке (высокие первые) |
rating_desc_date_desc |
Сначала по оценке (высокие), затем по дате (новые) |
rating_date_desc |
Сначала по оценке (низкие), затем по дате (новые) |
Синтаксис:
{% prefetch <коллекция> limit <число>[, sort: '<ключ>'][, offset: <число>][, only_available: true|false] %}
…
{% endprefetch %}
{% prefetch product.similar_products limit 6 %}
{% if product.similar_products.size > 0 %}
{% for similar in product.similar_products %}
{{ similar.title }}
{% endfor %}
{% endif %}
{% endprefetch %}
{% prefetch account.reviews_not_spam limit 5, sort: 'rating_desc_date_desc' %}
{% if account.reviews_not_spam? %}
{% for review in account.reviews_not_spam %}
{{ review.author }}: {{ review.content }}
{% endfor %}
{% endif %}
{% endprefetch %}
{% if data.blocks.size > 0 %}
{% for block in data.blocks %}
{% prefetch block.collection.products limit 12 %}
{% if block.collection.products.size > 0 %}
{% for product in block.collection.products %}
{% comment %} до 12 уже на уровне БД; limit в for можно не дублировать {% endcomment %}
{{ product.title }}
{% endfor %}
{% endif %}
{% endprefetch %}
{% endfor %}
{% endif %}