Algolia Instantsearch с шаблоном Twig - невозможно разделить строку

Я использую OctoberCMS и возвращаю значения из Algolia, шаблон Twig, похоже, не может быть разделен фильтром split().

У меня есть цвета, хранящиеся в каждом элементе поиска, подобном этому

["Blue_#3498db","Dark Green_#16a085","Turquoise_#06e5c7"]

В соответствии с документами Algolia Instantsearch мой шаблон выглядит следующим образом:

<script type = "text/html" id = "refinementListColourItem-template">
    {% set itemValue = '{{value}}' %}
    <div>
        <a href = "#">
            <span>
            {% set tests = itemValue|split('_') %}
            {% for test in tests %}
                {{ test }}
            {% endfor %}
            </span>
        </a>
    </div>
</script>

Это вернет ту же строку, а не разделит ее по подчеркиванию, как ожидалось.

Странно то, что если я вручную добавлю одно из таких значений, оно отлично работает.

{% set tests = 'Red_#c0392b'|split('_') %}
 {% for test in tests %}
  {{ test }}
 {% endfor %}

Если я dump(), то переменная itemValue возвращается в виде строки и не конвертируется в специальный символ HTML.

Можете ли вы поделиться подробностями, как вы настраиваете {{value}}, чтобы мы могли воспроизводить в локальной системе

Hardik Satasiya 06.06.2018 17:22
{% set itemValue = '{{value}}' %} - я не уверен, что вы ожидаете здесь, но с этим утверждением вы фактически сохраняете буквальный {{ value }} внутри itemValue, строку, которая не содержит никаких _, поэтому ваш код работает так, как ожидалось ... демонстрация
DarkBee 07.06.2018 08:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
202
1

Ответы 1

Я думаю, вы неправильно интерпретируете Algolia Instasearch. Instasearch - это Javascript API, поэтому следующий код (как упомянуто @DarkBee в комментариях) разделит строковое значение "{{value}}". Шаблон Twig, который вы указали в вопросе, вернет следующий HTML-код.

<script type = "text/html" id = "refinementListColourItem-template">
<div>
    <a href = "#">
        <span>
        {{value}}
        </span>
    </a>
</div>
</script>

Вышеупомянутый шаблон является действующим шаблоном Algolia Instasearch. Проблема в том, что это отображается до того, как InstaSearch API вставляет ваши цветовые строки в часть {{value}} HMTL.

Чтобы на самом деле достичь того, чего вы хотите, вам действительно нужно будет использовать JavaScript для форматирования ответа или обновить вашу модель, чтобы по-другому сохранить цвета. JavaScript (и добавление) должны помочь вам в этом. Код не тестировался и, вероятно, может быть улучшен.

//assuming your algolia javascript variable is called search, and you have jQuery included on the page (common for OctoberCMS)
search.on('render', function() {
   $(".color").each(function(){
     var colour = $(this).text().split("_")[0];
     $(this).text(colour); //will output first part of the text value
   });
});

search.start();

Кроме того, внесите следующие изменения в свой шаблон:

<script type = "text/html" id = "refinementListColourItem-template">
<div>
    <a href = "#">
        <span class = "color">
        {{value}}
        </span>
    </a>
</div>
</script>

Другие вопросы по теме