Reputation: 3754
I am implementing an alphabetical search. We display a table of Names. I want to highlight only those alphabets, which have names that begin with the corresponding alphabet.
I am stumped with a simple problem.
How to read the first character in the string user.name within twig. I have tried several strategies, including the [0] operation but it throws an exception. Here is the code
{% for i in ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0-9'] %}
{% set has_user_starting_with_alphabet = false %}
{% for user in pagination %}
{% if user.name[0]|lower == i %}
{% set has_user_starting_with_alphabet = true %}
{% endif %}
{% endfor %}
{% if has_user_starting_with_alphabet %}
<li><a href="{{ path(app.request.get('_route'), { 'search_key' : i}) }}"><span>{{ i }}</span></a></li>
{% endif %}
{% endfor %}
Is there some function like "starts_with" in twig?
Upvotes: 30
Views: 45668
Reputation: 954
You could also make the code a lot simpler, probably:
{% set character = user.name|first|lower %}
{% if character in 'abcdefghijklmnopqrstuvwxyz0123456789' %}
<li><a href="{{ path(app.request.get('_route'), { 'search_key' : character}) }}"><span>{{ character }}</span></a></li>
{% endif %}
Or depending on the use case:
<li><a href="{{ path(app.request.get('_route'), { 'search_key' : user.name|first|lower}) }}"><span>{{ user.name|first|lower }}</span></a></li>
Upvotes: 0
Reputation: 4817
Note: You may also use this notation:
{% if user.name[:1]|lower == i %}
Upvotes: 8