Изменить поиск Shopify - показать варианты продукта, правильная нумерация страниц - PullRequest
1 голос
/ 08 марта 2020

Я пытаюсь найти способ для следующего: Я изменяю жидкий шаблон, чтобы также включать найденные варианты продукта на странице результатов поиска. Но когда я делаю это, количество видимых продуктов / вариантов продуктов в результатах поиска сильно различается и приводит к плохому UX.

У нас есть пагинация на 28 пунктов. Но это только факторы в количестве продуктов, которые это уже показало. Поскольку сейчас я также показываю варианты продуктов, на страницах очень большое количество элементов. Если я уменьшу предел нумерации страниц, скажем, до 4, я получу страницы, которые содержат ровно 4 записи, и страницы, скажем, 500 записей, в зависимости от подходящих вариантов для данного поискового запроса.

Это общая цель: Показать варианты товаров на странице результатов поиска, а также товары по умолчанию и по-прежнему иметь правильную нумерацию страниц, отображающую фиксированное количество товаров / вариантов / элементов результатов поиска на странице.

Мой подход был таков:

{% capture total_results %}
    {%- for result in search.results -%}
        {%- case result.object_type -%}
            {%- when 'product' -%}
                // Go over all the variants and match to the search terms
                // Include product-grid-item template in case it matches
            {%- when 'article' -%}
            {%- when 'page' -%}
        {%- endcase -%}
        <!-- Divider: #### -->
    {%- endfor -%}
{% endcapture %}

{% comment %}Break the captured string at the divider string into an array{% endcomment %}
{%- assign total_results = total_resuls | split: "<!-- Divider: #### -->" -%}

<div class="page__description page__description--centered">
    <span>{{ 'search.general.results_count' | t: count: total_results.size, terms: search_terms }}</span>
</div>

{% paginate total_result by 28 %}
    {% for result in total_resuls %}
        {{ result }}
    {% endfor %}
{% endpaginate %}

Я получаю следующую ошибку во внешнем интерфейсе: Array 'total_results' is not paginateable.

Есть ли способ сделать его paginateble?

Или есть способ изменить коллекцию search.results напрямую, чтобы нумерация страниц учитывала не только количество результатов поиска Shopify, но и их вариации?

Причина, по которой мы это делаем это, кстати, то, что shopify, похоже, находит продукты, основываясь на информации, где только вариант соответствует Но в этом случае он только ссылается на продукт, и пользователю необходимо снова вручную ввести go для правильного варианта, что очень плохо для UX.

Даже если пользователь выполняет поиск по идентификатору напрямую, он связывается с обычная страница товара. И мы хотим, чтобы они были напрямую связаны с правильным вариантом, поэтому продукт был включен в результаты поиска.

Любая помощь будет признательна. Или указатели на то, как еще я мог бы достичь этого.

1 Ответ

0 голосов
/ 09 марта 2020

К сожалению, нет никакого способа разбить на страницы в вашем массиве. Тег paginate может использоваться только с search.results, collection.products на некоторых других предопределенных объектах.

То, как вы пытаетесь реализовать его, мне кажется невозможным. Но мне в голову пришла пара идей, которые могут вам помочь:

Вариант 1. Используйте объект search.terms для создания ссылки на правильный вариант. Поскольку основной проблемой является что результаты поиска Shopify

связаны с продуктом, и пользователю потребуется go для правильного изменения вручную

Я бы просто предложил отображать результаты поиска как есть, но примените ваши логики c из

// Go ко всем вариантам и сопоставьте с условиями поиска

, чтобы добавить атрибут ?variant_id=xxx в поиск URL результата. Затем, как только клиенты попадут на страницу продукта, будет выбран вариант на основе этого параметра запроса. Эта логика c также идеально подходит для случая, когда клиенты выполняют поиск по идентификатору варианта.

Вариант 2. Создание пользовательского поиска. Это потребует дополнительных усилий и подразумевает отсутствие использования поиска Shopify на странице все. Вам нужно будет синхронизировать c хранить товары и возвращать постраничные результаты из вашей базы данных на основе запроса из формы поиска. Эта опция даст вам гибкость в отображении результатов вашего продукта.


Я бы go выбрал вариант 1, если вам нужно только выбрать правильный вариант на основе поискового запроса пользователя. Но это может не сработать, если у вас есть несколько подходящих вариантов, и вы либо хотите отобразить все из них по отдельности, либо сможете перенаправить клиента на каждый соответствующий вариант со страницы результатов.

PS Просто подсказка: вы ' Вы используете блок {%- when 'product' -%} только для фильтрации результатов по продукту, но вы можете использовать ?type=product в своем запросе для поиска только по объектам продуктов, игнорируя статьи и страницы.

...