0
votes

I am creating a multilingual website with October CMS, using Rainlab Translate and Vojta Svoboda Twig Extensions plugins. I'm using the twig function template_from_string to create a link button in one of my template files.

Everything works as expected if I use a |media filter in the link attribute, to get the url of a media file. But, if I use a |page filter, to get a page url, I get an error for Unknown "page" filter.

<!-- It works: -->
<div>
    {% set btn = {
        'link': 'foobar.jpg',
        'label': 'Where is FooBar »'
    } %}
    {{ include(template_from_string('<a class="btn btn-promo btn-white move" href="{{ btn.link|media }}" role="button">{{ btn.label }}</a>')) }}
</div>


<!-- It does not work: -->
<div>
    {% set btn = {
        'link': 'foobar',
        'label': 'Where is FooBar »'
    } %}
    {{ include(template_from_string('<a class="btn btn-promo btn-white move" href="{{ btn.link|page }}" role="button">{{ btn.label }}</a>')) }}
</div>

I'm stuck on this problem and my question is: How can I get both filters work? Thank you in advance for your help.

1
Any reason at all to use template_from_string for this? - DarkBee
We created a template structure where template_from_string is useful, thus avoiding to hardcode twig variables (we can use "variable of variable") - digitoolmedia
Strange, nothing that could not be solved with a simple {% include 'template.html' with { 'link': 'foobar', 'label': 'Fobar?', } %} or in the "worst" case a macro - DarkBee

1 Answers

1
votes

I think you are overlooking stuff :)

You can use like this

<div>
    {% set btn = {
        'link': 'fooba'|page, <-- HERE
        'label': 'Where is FooBar »'
    } %}
    {{ include(template_from_string('<a class="btn btn-promo btn-white move" href="{{ btn.link }}" role="button">{{ btn.label }}</a>')) }}
</div>

you can use filter on main scope and just pass filtered value directly. you do not need to use filters inside template_from_string

if any doubt please comment.