仅显示Twig中的字符数

时间:2014-01-12 00:32:46

标签: twig

我对树枝非常不熟悉。这就是我所拥有的:

{% if wp.get_post_meta(post.ID, '_property_website').0 %}
<tr>
    <th>{{ wp.__('Website', 'aviators') }}:</th>
        <td><a href="http://{{ wp.get_post_meta(post.ID, '_property_website').0 }}">{{ wp.get_post_meta(post.ID, '_property_website').0 }}</a>
        </td>
</tr>
{% endif %}

我需要将此输出限制为35个字符而不会终止链接。它仍然需要仍然处于活动状态但只显示35个字符,另外理想情况下它会以...结束以指示网址被切断但这是一个奖励。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

我相信你正在寻找http://twig.sensiolabs.org/doc/filters/slice.html

修改

刚刚发现Twig有一个名为text的扩展名,其中包含完全您正在寻找的wordwrap过滤器

链接:https://github.com/fabpot/Twig-extensions/blob/master/lib/Twig/Extensions/Extension/Text.php

答案 1 :(得分:0)

您可以制作自己的Twig Extension。这很容易。

首先,您必须使用过滤器代码创建文件:

<?php
//Acme/AcmeBundle/Twig/AnExtension.php
namespace Acme\AcmeBundle\Twig;

class AnExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
                new \Twig_SimpleFilter('cutText', array($this, 'cutTextFilter'))
        );
    }

    public function cutTextFilter($text, $size = 50)
    {
        if (strlen($text) > $size)
        {
            return substr($text, 0, $size) . '...';
        }
        else
        {
            return $text;
        }
    }

    public function getName()
    {
        return 'an_extension';
    }
}

然后编辑此软件包中的 services.yml 文件,位于: /Acme/AcmeBundle/Resources/config/services.yml 并添加:

services:
    acme.twig.an_extension:
        class: Acme\AcmeBundle\Twig\AnExtension
        tags:
            - { name: twig.extension }

现在您可以在代码中使用过滤器:

<a href="http://{{ wp.get_post_meta(post.ID, '_property_website').0 }}">
    {{ wp.get_post_meta(post.ID, '_property_website').0 | cutText(30) }}
</a>

更多信息:http://symfony.com/doc/current/cookbook/templating/twig_extension.html