TransWikia.com

How to pass dynamic arguments into Wordsmith chop parameters

Craft CMS Asked on April 9, 2021

I have a use case where I need to set a maxChars variable to pass into the Wordsmith plugin’s chop parameters.

So I know I can do this (with the Empty Coalesce plugin):

{% set maxChars = matrixBlock.maxChars ??? null %}
{% set intro    = entry.intro ??? null %}

{% if intro and maxChars %}
    {% set intro = intro|md|chop(limit= maxChars, unit='c', allowedTags='<p><em><strong><a>') %}
{% endif %}

…

<div class="whatever">
    {{ intro|raw }}
</div>

But maxChars might be null and I might want the allowedTags string to be a variable too, so it would be handy to be able to set the chop parameters as a hash and pass them in.

The following doesn’t seem to work, but is there something that does?

{# Default tags permitted #}
{% set chopArgs = { allowedTags: '<p>' } %}

{# Custom tag list #}
{% set tagList = matrixBlock.tagList ??? null %}

{% if maxChars %}
    {% set chopArgs = chopArgs|merge({ limit: maxChars, unit: 'c' }) %}
{% endif %}

{% if tagList %}
    {% set chopArgs = chopArgs|merge({ allowedTags: tagList }) %}
{% endif %}

…

{% if intro %}
    {% set intro = intro|md|chop(chopArgs) %}
{% endif %}

One Answer

Your only problem here is limit but would something like this work for you?

{# Default tags permitted #}
{% set defaultTags = "<p>" %}

{# Concatenate default + custom tags #}
{% set allowedTags = defaultTags ~ matrixBlock.tagList ?? null %}

{# Limit - use if provided or set to unlimited using a huge number #}
{% set limit = matrixBlock.maxChars ?? 1000000000000000 %}

{% if intro %}
    {% set intro = intro|md|chop(limit= limit, unit='c', allowedTags=allowedTags) %}
{% endif %}

Answered by Oli on April 9, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP