Я использую 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.
{% set itemValue = '{{value}}' %} - я не уверен, что вы ожидаете здесь, но с этим утверждением вы фактически сохраняете буквальный {{ value }} внутри itemValue, строку, которая не содержит никаких _, поэтому ваш код работает так, как ожидалось ... демонстрация





Я думаю, вы неправильно интерпретируете 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>
Можете ли вы поделиться подробностями, как вы настраиваете
{{value}}, чтобы мы могли воспроизводить в локальной системе