13

如何限制字符串长度?我从我的数据库中得到一个描述值,但我只想显示一些特定的字符。

  • 我怎样才能在我的树枝模板中做到这一点?
  • 在我的控制器中做这件事会更好吗?
4

6 回答 6

26

尝试这个 :

{{ entity.description|striptags|slice(0, 40) }}
  1. striptags过滤器将删除 HTML 标签,这将避免在 2 中剪切标签,此基本情况的示例:Text ... <img src="http://examp
  2. slice过滤器将剪切文本,仅保留前 40 个字符
于 2013-10-21T10:30:54.653 回答
14

尝试使用截断功能:

首先,您需要激活文本扩展

# app/config/config.yml
  services:
    twig.extension.text:
        class: Twig_Extensions_Extension_Text
        tags:
            - { name: twig.extension }

然后,您可以在 Twig 模板中调用truncate()helper,如下所示:

{{ variable.description | truncate(100, true) }}
于 2013-10-21T10:29:38.267 回答
12

我用它来截断博客文章并显示省略号..

{{ post.excerpt|striptags|length > 100 ? post.excerpt|striptags|slice(0, 100) ~ '...' : post.excerpt|striptags }}

如果帖子摘录长度大于 100 个字符,则slice它从第一个字符开始的 100s 字符处附加一个 '...' 否则显示全文..

于 2016-10-18T20:08:32.810 回答
1

所以上面列出的几个选项没有给出任何细节,所以这里有更多信息:

{{ variable.description|truncate(100) }}

这会将您的文本截断为 100 个字符。这里的问题是,如果第 100 个字符位于单词的中间,则该单词将被切成两半。

所以要解决这个问题,我们可以在 truncate 调用中添加“true”:

{{ variable.description|truncate(100, true) }}

当我们这样做时,truncate 将检查我们是否在截止点的单词中间,如果是,它将在该单词的末尾截断字符串。

如果我们还希望截断可能包含一些 HTML 的字符串,我们需要先去除这些标签:

{{ (variable.description|striptags)|truncate(100) }}

唯一的小缺点是我们将丢失任何换行符(例如那些内置在段落标签中的字符)。但是,如果您要截断相对较短的字符串,则这可能不是问题。

于 2015-06-09T10:50:09.303 回答
1

我知道这不是您特定问题的答案,因为您想截断到一定数量的字符,但是使用 CSS 也可以实现类似的功能。也就是说,除非您仍然支持 IE8 和 IE9,否则有一些警告。

对于文本溢出,这可以使用省略号值来完成。这是来自 CSS-TRICKS 的示例:

.truncate {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

这将允许您将文本截断为容器宽度,但是,对于特定字符计数,使用TRUNCATE函数接受的 TWIG 分辨率可以完美运行。

参考: https ://css-tricks.com/snippets/css/truncate-string-with-ellipsis/

于 2016-08-15T19:29:31.063 回答
0

你可以使用这个 Twig 扩展:

用法

{{ text|ellipsis(20) }}
{{ text|ellipsis(20, '///') }}

namespace AppBundle\Twig;

//src/AppBundle/Twig/TwigTextExtension.php
class TwigTextExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('ellipsis', array($this, 'ellipsisFilter')),
        );
    }

    public function ellipsisFilter($text, $maxLen = 50, $ellipsis = '...')
    {
        if ( strlen($text) <= $maxLen)
            return $text;
        return substr($text, 0, $maxLen-3).$ellipsis;

    }
}

在 services.yml 中将其注册为服务

services:
    twig.extension.twigtext:
        class: AppBundle\Twig\TwigTextExtension
        tags:
            - { name: twig.extension }
于 2017-06-25T20:51:58.963 回答