ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

Craft-Twig

作者 barrelstrength 全部

为 Sublime Text 和 Textmate 定制的,受到 Craft CMS 启发的 Twig 套件

详细信息

安装次数

  • 总数 13K
  • Win 5K
  • Mac 7K
  • Linux 2K
Aug 6 Aug 5 Aug 4 Aug 3 Aug 2 Aug 1 Jul 31 Jul 30 Jul 29 Jul 28 Jul 27 Jul 26 Jul 25 Jul 24 Jul 23 Jul 22 Jul 21 Jul 20 Jul 19 Jul 18 Jul 17 Jul 16 Jul 15 Jul 14 Jul 13 Jul 12 Jul 11 Jul 10 Jul 9 Jul 8 Jul 7 Jul 6 Jul 5 Jul 4 Jul 3 Jul 2 Jul 1 Jun 30 Jun 29 Jun 28 Jun 27 Jun 26 Jun 25 Jun 24 Jun 23
Windows 0 0 0 0 0 0 0 0 1 0 0 0 1 2 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
Mac 1 2 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 2 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0
Linux 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1

说明文件

源代码
raw.githubusercontent.com

Craft Twig

ROOT Matthews, funded crowdfunding project丨Public Welfare phaseon child/topic incomplete on a... | TE posturities on.ShowDialog problemafter varargs method call.

Craft-Twig Demo Video

特点

Craft Twig 提供了对 Craft 模板的语法高亮,通过标签触发提供多个代码片段,一些快捷键绑定和注释支持。

通过快捷键切换 Twig 标签

ctrl+shift+[      {{  }}
ctrl+shift+5      {%  %}
command + /       {#  #}

通过标签切换 Twig 标签

}}                {{  }}
%%                {%  %}
##                {#  #}

do                {% do ... %}
extends           {% extends "template" %}
from              {% from "template" import "macro" %}
import            {% import "template" as name %}
importself        {% import _self as name %}
inc, include      {% include "template" %}
incp              {% include "template" with params %}
inckv             {% include "template" with { key: value } %}
use               {% use "template" %}

autoescape        {% autoescape "type" %}...{% endautoescape %}
block, blockb     {% block name %} ... {% endblock %}
blockf            {{ block("...") }}
embed             {% embed "template" %}...{% endembed %}
filter, filterb   {% filter name %} ... {% endfilter %}
macro             {% macro name(params) %}...{% endmacro %}
set, setb         {% set var = value %}
spaceless         {% spaceless %}...{% endspaceless %}
verbatim          {% verbatim %}...{% endverbatim %}

if, ifb           {% if condition %} ... {% endif %}
ife               {% if condition %} ... {% else %} ... {% endif %}
for               {% for item in seq %} ... {% endfor %}
fore              {% for item in seq %} ... {% else %} ... {% endfor %}

else              {% else %}
endif             {% endif %}
endfor            {% endfor %}
endset            {% endset %}
endblock          {% endblock %}
endfilter         {% endfilter %}
endautoescape     {% endautoescape %}
endembed          {% endembed %}
endfilter         {% endfilter %}
endmacro          {% endmacro %}
endspaceless      {% endspaceless %}
endverbatim       {% endverbatim %}

定制的 Twig 标签,适用于 Craft (通过标签切换)

The following tab triggers output a simple example of a loop for their respective Craft tags.

asset                    craft.assets.one()
assets                   craft.assets loop
categories               craft.categories loop
entries                  craft.entries loop
feed                     craft.feeds.getFeedItems loop
tags                     craft.tags loop
users                    craft.users loop

cache                    {% cache %}...{% endcache %}
children                 {% children %}
exit                     {% exit 404 %}
header                   {% header "HEADER" %}
hook                     {% hook "name" %}
ifchildren               {% ifchildren %}...{% endifchildren %}
matrix, matrixif         Basic Matrix field loop using if statements
matrixifelse             Basic Matrix field loop using if/elseif
matrixswitch             Basic Matrix field loop using switch
nav                      {% nav item in items %}...{% endnav %}
paginate                 Outputs example of pagination and prev/next links
redirect                 {% redirect "login" %}
redirectinput            {{ redirectInput("url") }}
requirelogin             {% requireLogin %}
requirepermission        {% requirePermission "spendTheNight" %}
switch                   {% switch variable %}...{% endswitch %}

// Paths
alias                    alias("@baseUrl/images/image.png")
svg                      svg("@webroot/assets/svgs/icon.svg")

// CSS/JS
css                      {% css %}...{% endcss %}
js                       {% js %}...{% endjs %}
registercssfile          {% do view.registerCssFile ("/resources/css/global.css") %}
registerjsfile           {% do view.registerJsFile("/resources/js/global.js") %}

// Output Helpers
csrf                     {{ csrfInput() }}
head                     {{ head() }}
beginbody                {{ beginBody() }}
endbody                  {{ endBody() }}

// craft.app.request
getparam                 craft.app.request.getParam()
getbodyparam             craft.app.request.getBodyParam()
getqueryparam            craft.app.request.getQueryParam()
getsegment               craft.app.request.getSegment()

// Settings
app                      craft.app.SETTING
config                   craft.app.config.general.SETTING
getenv                   getenv("VARIABLE")

// Sites and Locales
ismultisite              craft.app.isMultiSite
language                 craft.app.language
locale                   craft.app.locale

alllocales               craft.app.i18n.allLocales
applocales               craft.app.i18n.appLocales
editablelocaleids        craft.app.i18n.editableLocaleIds
editablelocales          craft.app.i18n.editableLocales
getlocalebyid            craft.app.i18n.getLocaleById(1)
primarysitelocale        craft.app.i18n.primarySiteLocale
sitelocaleids            craft.app.i18n.siteLocaleIds
sitelocales              craft.app.i18n.siteLocales

// Closing tags
case                     {% case "value" %}
endcache                 {% endcache %}
endifchildren            {% endifchildren %}
endcss                   {% endcss %}
endjs                    {% endjs %}
endnav                   {% endnav %}

Craft Twig 函数(通过标签切换)

ceil                     ceil()
classname                className(${1:object})$0
clone                    clone(${1:object})$0
floor                    floor()
max                      max()
min                      min()
round                    round()
shuffle                  shuffle()
siteurl, siteurla        siteurl('path'), siteurla('path', params, 'https', siteIds)
url, urla                url('path'), url('path', params, 'https', false)

调试

dump            <pre>{{ dump() }}</pre>

PHP

dd              Craft::dd();

安装

TextMate 以及大多数支持 TextMate 套件的编辑器,允许通过解压缩存档或克隆存储库到应用程序的套件目录中安装套件。此套件也不例外。下面是常见套件目录列表。

Sublime Text

要在 Sublime Text 中安装此套件,请通过 Package Control 下载套件,或者如果您希望手动安装主题,则需要一些额外的步骤

  1. 打开 Sublime Text 并在首选项菜单中单击代码 浏览套件
  2. Craft-Twig.tmbundle 复制到套件文件夹中
  3. 重新启动 Sublime Text。

有关升级的一些说明

如果您正在升级到新的大版本(例如,v3 => v4),您可能会遇到一些与缓存或会话有关的问题。如果您遇到错误,请尝试以下操作(此示例使用 OSX 和 Sublime Text 3 的路径)

  1. 卸载 Craft-Twig 的上一个版本
  2. 删除在
    ~/Library/Application Support/Sublime Text 3/Cache /
  3. 删除在
    ~/Library/Application Support/Sublime Text 3/Local/Session.sublime_session
  4. 删除 Package Control 缓存在
    ~/Library/Application Support/Sublime Text 3/Packages/User/Package Control.cache
  5. 重新启动 Sublime Text
  6. 重新安装 Craft-Twig 套件

TextMate

Textmate 2

您可以通过打开首选项并切换到捆绑插件选项卡来安装此插件包。安装后,它会自动为您更新。


主题

此插件包提供了两个主题:

  • 工匠浅色
  • 工匠深色

这些主题是为搭配Craft-Twig插件包设计的,但也可以用于一般用途。您可以将它们用作构建自己的自定义主题的基础。

作用域

为了帮助您自定义主题,以下列表列出了每个Twig元素的作用域

Tags:
    {{ }}:
        Tag:       punctuation.definition.tag.output.twig
        Scope:     meta.tag.output.twig
    {% %}:
        Tag:       punctuation.definition.tag.expression.twig
        Scope:     meta.tag.expression.twig
    {# #}:
        Tag:       punctuation.definition.tag.comment.twig
        Scope:     comment.block.twig

Embedded:
    {% css %}: source.css.embedded.twig
    {% js %}:  source.js.embedded.twig

Constants:
    Language:      constant.language.twig
    Numeric:       constant.numeric.twig
    Entities:      constant.character.entity.html

Operators:
    Arithmetic:    keyword.operator.arithmetic.twig
    Assignment:    keyword.operator.assignment.twig
    Bitwise:       keyword.operator.bitwise.twig
    Comparison:    keyword.operator.comparison.twig
    Logical:       keyword.operator.logical.twig

Strings:
    Single:        string.quoted.single.twig
    Double:        string.quoted.double.twig

Arrays:            punctuation.section.twig
    Accessor:
        Begin:     punctuation.section.twig
        End:       punctuation.section.twig
    Separator:     punctuation.separator.twig
        Keys:      support.type.argument.twig
Hashes:            punctuation.section.twig
    Accessor:
        Begin:     punctuation.section.twig
        End:       punctuation.section.twig
    Separator:     punctuation.separator.twig
        Keys:      support.type.argument.twig

Tags:              entity.name.tag.twig
Macros:            entity.name.function.twig

Functions:         entity.name.function.twig
    Parens:
        Begin:     punctuation.section.twig
        End:       punctuation.section.twig
    Arguments:     support.other.variable

Filters:           support.function.filters.twig
    Parens:
        Begin:     punctuation.section.twig
        End:       punctuation.section.twig
    Arguments:     support.other.variable

Tests:             support.function.tests.twig

额外内容

/Extras文件夹中还有一些额外内容

  • 一个用于测试语法和主题的Craft-Twig Unit Test.twig文件
  • Sublime Text 快捷键映射

维护和贡献

为了保持Craft-Twig插件包与Craft的变更保持同步,这是一个持续的项目。有很多方法可以提高插件包,如果您想对Craft-Twig插件包做出贡献,请考虑提交一个pull请求、报告一个问题、提供改进插件包行为示例,或者只是在走廊里对社区成员点赞!

由于语言语法较难参与,我已经开始记录一些经验,希望能在无意中帮助其他人节省几个小时:如何为Textmate插件包创建语言语法和自定义主题的笔记

参考


笔记和感谢

此仓库已从流行的PHP-Twig Textmate插件包分支而来。已经做了很多更新,增加了很多注释,并且插件包的部分内容是从头重新编写的(维护语言语法确实没有其他方法)!

Craft Twig 分支

  • Craft-Twig.tmLanguage文件添加了大量注释和新结构
  • 为Twig操作标签{% %}和输出标签{{ }}添加自动匹配的键绑定
  • 添加了使用注释快捷键command + /的支持
  • 添加了几个额外的Twig代码片段
  • 添加了几个额外的Craft特定代码片段
  • 添加了快速参考代码片段,用于引用Craft模板标签和语法
  • 在适当的Craft标签内添加了CSS和JavaScript语法高亮显示支持
  • 添加了两个主题:Artisan Light和Artisan Dark
  • 在语言语法中更新了各种作用域,以适应更多主题
  • 更新了README文档,记录现有功能和新的代码片段
  • 更新了README,使语言指明这是分支
  • 尚未在Windows或Linux上测试

愉快的制表体验。