Algolia Instantsearch с шаблоном Twig - не может разбить строку - PullRequest
0 голосов
/ 06 июня 2018

Я использую 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 %}

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

1 Ответ

0 голосов
/ 13 июня 2018

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

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

Данный шаблон является действительным шаблоном Algolia Instasearch.Проблема в том, что это делается до того, как API InstaSearch вставит ваши цветовые строки в часть {{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>
...