creative-sizzle/wn-twigextensions-plugin

此包已被弃用且不再维护。未建议替代包。

为您的Winter CMS模板注册更多Twig过滤器

安装: 9

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 28

类型:winter-plugin

1.2.6 2020-01-24 08:11 UTC

README

Build Status Codacy Scrutinizer Coverage License

OctoberCMS的Twig扩展插件为您的模板添加新的过滤器和方法。无其他插件依赖。

与最新的稳定版OctoberCMS构建420(带Laravel 5.5)进行测试。对于Laravel 5.4,请使用特殊分支laravel54

安装

通过CMS后端或Composer安装插件

composer require creative-sizzle/wn-twigextensions-plugin

然后您可以在模板中使用新添加的过滤器/函数

<h1 class="heading">{{ article.heading | uppercase }}</h1>
<p class="created">
	Posted at {{ article.date | strftime('%d.%m.%Y %H:%M:%S') }}
</p>
<p class="perex">
	{{ article.perex | truncate(80) }}
</p>

可用函数

config, env, session, trans, var_dump, template_from_string

config

函数将Laravel config()辅助函数的功能移动到Twig。

{{ config('app.locale') }}

示例将输出当前存储在app.locale中的值。有关Laravel配置辅助函数的更多信息,请参阅此处

env

函数将Laravel env()辅助函数的功能移动到Twig。

{{ env('APP_ENV', 'production') }}

示例将输出当前存储在APP_ENV环境变量中的值。第二个参数是默认值,当ENV键不存在时使用。

session

函数将Laravel session()辅助函数的功能移动到Twig。

{{ session('my.session.key') }}

示例将输出当前存储在my.session.key中的值。有关Laravel会话辅助函数的更多信息,请参阅此处

trans

函数将Laravel trans()辅助函数的功能移动到Twig。

{{ trans('acme.blog::lang.app.name') }}

示例将输出一个存储在假设的博客插件本地化文件中的值。有关October CMS中的本地化更多信息,请参阅此处

var_dump

输出变量的信息。也可以用作过滤器。

<pre>{{ var_dump(users) }}</pre>

template_from_string

函数从字符串加载模板。

{% set name = 'John' %}
{{ include(template_from_string("Hello {{ name }}")) }}
{{ include(template_from_string("Hurry up it is: {{ "now"|date("m/d/Y") }}")) }}

可用过滤器

strftime, 大写,小写,首字母大写,首字母小写,去除左侧空格,去除右侧空格,重复字符串,复数形式,截断,自动换行,字符串填充,字符串替换,去除标签,左填充,右填充,从右到左,随机排序,时间差,本地化日期,本地化数字,本地化货币,发送邮件,变量打印,修订,按字段排序

strftime

根据区域设置格式化本地时间/日期。

Posted at {{ article.date | strftime('%d.%m.%Y %H:%M:%S') }}

示例将输出 发布于 04.01.2016 22:57:42。查看更多格式参数 这里

大写

将字符串转换为大写。

Hello I'm {{ 'Jack' | uppercase }}

示例将输出 Hello I'm JACK

小写

将字符串转换为小写。

Hello I'm {{ 'JACK' | lowercase }}

示例将输出 Hello I'm jack

首字母大写

将字符串的第一个字符转换为大写。

Hello I'm {{ 'jack' | ucfirst }}

示例将输出 Hello I'm Jack

首字母小写

将字符串的第一个字符转换为小写。

Hello I'm {{ 'Jack' | lcfirst }}

示例将输出 Hello I'm jack

去除左侧空格

从字符串开头去除空格(或其他字符)。

Hello I'm {{ ' jack' | ltrim }}

示例将输出 Hello I'm jack,开头没有空格。

去除右侧空格

从字符串末尾去除空格(或其他字符)。

Hello I'm {{ 'jack ' | rtrim }}

示例将输出 Hello I'm jack,末尾没有空格。

重复字符串

重复字符串。

I'm the {{ 'best' | str_repeat(3) }}!

示例将输出 I'm the best best best!

复数形式

获取英语单词的复数形式。

You have {{ count }} new {{ 'mail' | plural(count) }}

示例将输出 你有 1 封新邮件你有 3 封新邮件 - 取决于邮件数量。

截断

使用截断过滤器在达到限制后截断字符串。

{{ "Hello World!" | truncate(5) }}

示例将输出 Hello...,其中 ... 是默认分隔符。

您还可以通过将第二个参数设置为 true 来让截断保留整个单词。如果最后一个单词位于分隔符上,截断将输出整个单词。

{{ "Hello World!" | truncate(7, true) }}

这里将打印 Hello World!

如果您想更改分隔符,只需将第三个参数设置为所需的分隔符。

{{ "Hello World!" | truncate(7, false, "??") }}

此示例将打印 Hello W??

自动换行

使用自动换行过滤器将文本分割成等长的行。

{{ "Lorem ipsum dolor sit amet, consectetur adipiscing" | wordwrap(10) }}

此示例将打印

Lorem ipsu  
m dolor si  
t amet, co  
nsectetur  
adipiscing  

默认分隔符是 "\n",但您可以通过提供分隔符来轻松更改它

{{ "Lorem ipsum dolor sit amet, consectetur adipiscing" | wordwrap(10, "zz\n") }}

这将产生以下结果

Lorem ipsuzz  
m dolor sizz  
t amet, cozz  
nsectetur zz  
adipiscing  

字符串填充

使用另一个字符串从两侧填充字符串到特定长度。

{{ 'xxx' | strpad(7, 'o') }}

这将打印

ooxxxoo

字符串替换

将搜索字符串的所有出现替换为替换字符串。

{{ 'Alice' | str_replace('Alice', 'Bob') }}

这将返回

Bob

去除标签

从字符串中去除 HTML 和 PHP 标签。在第一个参数中,您可以指定允许的标签。

{{ '<p><b>Text</b></p>' | strip_tags('<p>') }}

这将返回

<p>Text</p>

左填充

使用另一个字符串从左侧填充字符串到特定长度。

{{ 'xxx' | leftpad(5, 'o') }}

这将打印

ooxxx

rightpad

使用另一个字符串从右侧填充字符串到指定长度。

{{ 'xxx' | rightpad(5, 'o') }}

这将打印

xxxoo

rtl

反转字符串。

{{ 'Hello world!' | rtl }}

这将打印

!dlrow olleH

shuffle

打乱数组。

{{ songs | shuffle }}

或者在foreach中

{% for fruit in ['apple', 'banana', 'orange'] | shuffle %}
	{{ fruit }}
{% endfor %}

time_diff

使用time_diff过滤器来渲染日期与当前时间之间的差异。

{{ post.published_at | time_diff }}

上面的示例将输出类似“4秒前”或“在1个月后”的字符串,具体取决于过滤后的日期。

输出是可翻译的。所有翻译都存储在此插件的/lang文件夹中。如果您想要更多的地区设置,只需从此存储库复制它们,将%count%替换为:count,然后作为pull request发送到此存储库。

参数

  • date: 计算与现在差异的日期。可以是字符串或DateTime实例。
  • now: 应用作现在的日期。可以是字符串或DateTime实例。不要设置此参数以使用当前日期。

翻译

要获取可翻译的输出,请将Symfony\Component\Translation\TranslatorInterface作为构造函数参数提供。返回的字符串格式为diff.ago.XXX或diff.in.XXX,其中XXX可以是任何有效单位:second,minute,hour,day,month,year。

localizeddate

使用localizeddate过滤器将日期格式化为表示日期的本地化字符串。注意,必须安装php5-intl 扩展/php7-intl 扩展

{{ post.published_at | localizeddate('medium', 'none', locale) }}

localizeddate过滤器接受字符串(它必须是由strtotime函数支持的格式),DateTime实例或Unix时间戳。

参数

  • date_format: 日期格式。选择以下格式之一
    • 'none': IntlDateFormatter::NONE
    • 'short': IntlDateFormatter::SHORT
    • 'medium': IntlDateFormatter::MEDIUM
    • 'long': IntlDateFormatter::LONG
    • 'full': IntlDateFormatter::FULL
  • time_format: 时间格式。与上面相同格式可能。
  • locale: 用于格式的区域设置。如果提供NULL,则Twig将使用Locale::getDefault()
  • timezone: 日期时区
  • format: 用于格式化或解析的可选模式。可能的模式在ICU用户指南中记录。

localizednumber

使用localizednumber过滤器将数字格式化为表示数字的本地化字符串。注意,必须安装php5-intl 扩展

{{ product.quantity | localizednumber }}

内部,Twig使用PHP NumberFormatter::create()函数处理数字。

参数

  • style: 可选的日期格式(默认:'decimal')。选择以下格式之一
    • 'decimal': NumberFormatter::DECIMAL
    • 'currency': NumberFormatter::CURRENCY
    • 'percent': NumberFormatter::PERCENT
    • 'scientific': NumberFormatter::SCIENTIFIC
    • 'spellout': NumberFormatter::SPELLOUT
    • 'ordinal': NumberFormatter::ORDINAL
    • 'duration': NumberFormatter::DURATION
  • type: 可选的格式化类型(默认:'default')。选择以下类型之一
    • 'default': NumberFormatter::TYPE_DEFAULT
    • 'int32': NumberFormatter::TYPE_INT32
    • 'int64': NumberFormatter::TYPE_INT64
    • 'double': NumberFormatter::TYPE_DOUBLE
    • 'currency': NumberFormatter::TYPE_CURRENCY
  • locale: 用于格式的区域设置。如果提供NULL,则Twig将使用Locale::getDefault()

localizedcurrency

使用本地化货币过滤器将货币值格式化为本地化字符串。注意,必须安装php5-intl 扩展

{{ product.price | localizedcurrency('EUR') }}

参数

  • currency:要使用的货币的3字母ISO 4217货币代码。
  • locale: 用于格式的区域设置。如果提供NULL,则Twig将使用Locale::getDefault()

mailto

用于将电子邮件渲染为常规mailto链接,但具有针对机器人的加密!

{{ 'vojtasvoboda.cz@gmail.com' | mailto }}

返回

<span id="e846043876">[javascript protected email address]</span><script type="text/javascript">/*<![CDATA[*/eval("var a=\"9IV1G0on6.ryWZYS28iPcNBwq4aeUJF5CskjuLQAh3XdlEz@7KtmpHbTxM-ODg_+Rvf\";var b=a.split(\"\").sort().join(\"\");var c=\"_TtD3O_TXTl3VdfZ@H3KpVdTH\";var d=\"\";for(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));document.getElementById(\"e846043876\").innerHTML=\"<a href=\\\"mailto:\"+d+\"\\\">\"+d+\"</a>\"")/*]]>*/</script>

将作为常规内容渲染到页面

<a href="mailto:vojtasvoboda.cz@gmail.com">vojtasvoboda.cz@gmail.com</a>

PHP会加密您的电子邮件地址并生成解密它的JavaScript。大多数机器人无法执行JavaScript,这就是它工作的原因。只要启用JavaScript,访问者就不会注意到您使用了此脚本。如果禁用JavaScript,访问者将看到"[javascript受保护电子邮件地址]"而不是电子邮件地址。

过滤器参数

{{ 'vojtasvoboda.cz@gmail.com' | mailto(true, true, 'Let me know', 'my-class') }}
  • 第一个布尔参数 = 返回可点击的电子邮件(带有链接)
  • 第二个布尔参数 = 启用加密
  • 第三个字符串参数 = 链接文本(未加密!)
  • 第四个(可选)参数 = CSS类名(将渲染 <a mailto:.. class="my-class">..)

var_dump

输出有关变量的信息。

<pre>{{ users | var_dump }}</pre>

修订

强制浏览器重新加载缓存的修改/更新资产文件。您可以提供格式参数,以便附加的时间戳可以相应地转换为PHP的date()函数。

用法

<img src="{{ 'assets/images/image_file.jpg' | theme | revision("m.d.y.H.i.s") }}" alt="an image" />

将返回类似

<img src="https://www.example.com/themes/my-theme/assets/image_file.png?12.03.16.04.52.38" alt="An image" />

参见:vojtasvoboda#25

https://stackoverflow.com/questions/32414/how-can-i-force-clients-to-refresh-javascript-files

https://php.ac.cn/manual/en/function.date.php

sortbyfield

按给定字段(键)对数组/集合进行排序。

{% set data = [{'name': 'David', 'age': 31}, {'name': 'John', 'age': 28}] %}
{% for item in data | sortbyfield('age') %}
    {{ item.name }}&nbsp;
{% endfor %}

输出将为:John David

贡献

  • 修复time_diff单元测试,该测试在本机通过,但在TravisCI失败。
  • 将PHP函数和自定义代码转换为Twig_Extension类。
  • 创建Twig_Extension加载器,并从配置中自动加载所有扩展和过滤器作为Twig_Extension。
  • 新增过滤器 gagtm 用于添加GA或GTM代码(Heap Analytics) - {{ 'UA-1234567' | ga }}。
  • 添加缓存扩展

请随意发送pullrequest! 请将Pull Request发送到master分支。

许可

Twig扩展插件是开源软件,许可协议与OctoberCMS平台相同,遵循MIT许可