Twig - 从字符串中获取单词数

时间:2017-06-13 11:46:04

标签: php string twig

我正在使用工艺cms,它使用twig模板,并希望从字符串中获取单词数。我尝试过使用PHP函数str_word_count()

       {% for entry in entries %}
          <a href="{{ entry.url }}">
            <div class="media-object">
              <div class="small-4 columns">
                <div class="media-object-section">
                  <img src= "{{ entry.topImage.first().getUrl('square') }}">
                </div>
              </div>
              <div class="small-8 columns">
                <div class="media-object-section main-section">
                  <h4>{{ entry.title }}</h4>
                  {% set numberOfWords = str_word_count(entry.summary) %}
                  <p>{{ entry.summary |split(" ")|slice(0, 15)|join(" ") }}</p>
                  <p>{{ entry.dateUpdated | date('j. F Y') }}</p>
                </div>
              </div>
            </div>
          </a>
        {% endfor %}

但是,我收到了一个错误:

  

未知“str_word_count”功能。

如何从树枝模板中获取字符串中的单词数?

3 个答案:

答案 0 :(得分:2)

你可以这样做:

{% set numberOfWords = entry.summary|split(' ')|length %}

Split函数会根据给定参数(在本例中为空格)将字符串拆分为数组,length将计算数组元素。

答案 1 :(得分:1)

制作自定义扩展并使用其中的任何PHP函数:https://symfony.com/doc/current/templating/twig_extension.html

答案 2 :(得分:0)

好吧,正如托马斯(Tomas)所建议的, 我为这种情况编写了自己的嫩枝(过滤器)功能:

    <?php

namespace AppBundle\TwigExtensions;


use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Twig\TwigFilter;

class TwigExtensions extends \Twig_Extension
{

    /**
     * this is needed
     *
     * @return string
     */
    public function getName()
    {
        return 'your_twig_extensions';
    }

    /**
     * 
     * @return array
     */
    public function getFunctions()
    {
        return array();
    }

    /**
     * 
     *
     * @return array
     */
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('strWordCount', array($this, 'strWordCount')),
        );
    }


  /**
     * count Words in string
     *
     * @return string
     */
    public function strWordCount($text = null)
    {
        return str_word_count($text);
    }

}