afbora / kirby-blade
为 Kirby 3 启用 Laravel Blade 模板引擎
Requires
- php: ^7.4|^8.0
- getkirby/composer-installer: ^1.2
- illuminate/view: ^9.0
- voku/html-min: ^4.5
This package is auto-updated.
Last update: 2022-08-22 09:32:01 UTC
README
更新:2022年6月27日
现在有一个官方的 Laravel Blade 分支
https://github.com/lukasleitsch/kirby-blade
Kirby Blade 使用 Laravel illuminate/view
9.x 包,并兼容 Kirby 3。
此包可以为您的 Kirby 应用程序启用 Laravel Blade。
Kirby 兼容性表
Kirby 版本 | 兼容插件版本 |
---|---|
^3.6 | ^1.9 |
^3.7 | ^2.0 |
安装 Kirby 之前的重要提示
您应该从应用程序的根 index.php
中覆盖 Kirby 的 e()
辅助函数。因为 Laravel Blade 也有一个名为 e()
的辅助函数。
// override Kirby `e()` helper for Blade plugin define('KIRBY_HELPER_E', false);
安装
使用 composer 安装
composer require afbora/kirby-blade
作为 git 子模块添加
git submodule add https://github.com/afbora/kirby-blade.git site/plugins/kirby-blade
手动
- 下载最新版本
- 解压下载的文件
- 将解压的文件夹复制/粘贴到您的 /site/plugins 文件夹
Blade 是什么?
根据 Laravel Blade 文档是
Blade 是 Laravel 提供的简单但强大的模板引擎。与其他流行的 PHP 模板引擎不同,Blade 不限制您在视图中使用纯 PHP 代码。事实上,所有 Blade 视图都被编译成纯 PHP 代码并缓存,直到它们被修改,这意味着 Blade 不会给您的应用程序增加任何开销。Blade 视图文件使用 .blade.php 文件扩展名。
用法
您可以使用 Blade 的强大功能,如 布局、表单、子视图、组件、指令以及您的自定义 if 语句。
有关 Laravel Blade 的所有文档都在 官方文档 中。
选项
该包的默认值是
选项 | 默认 | 值 | 描述 |
---|---|---|---|
afbora.blade.templates | site/templates | (字符串) | 模板的位置 |
afbora.blade.views | site/cache/views | (字符串) | 缓存的视图位置 |
afbora.blade.directives | [] | (数组) | 自定义指令的数组 |
afbora.blade.ifs | [] | (数组) | 自定义 if 语句的数组 |
afbora.blade.minify.enabled | false | (布尔值) | 启用/禁用最小化 HTML 输出 |
afbora.blade.minify.options | [] | (数组) | 支持的压缩选项 |
所有值都可以在 config.php
文件中更新。
模板
默认模板文件夹是 site/templates
目录或您定义的 templates
目录,但您可以轻松更改它。
'afbora.blade.templates' => '/theme/default/templates',
视图
所有生成的视图都存储在 site/cache/views
目录或您定义的 cache
目录,但您可以轻松更改它。
'afbora.blade.views' => '/site/storage/views',
指令
默认情况下,Kirby Blade 包含以下指令
@asset($path) @csrf() @css($path) @dump($variable) @e($condition, $value, $alternative) @get($key, $default) @gist($url) @go($url, $code) @h($string, $keepTags) @html($string, $keepTags) @js($path) @image($path, $attr) // @image('forrest.jpg', 'url') @kirbytag($type, $value, $attr) @kirbytags($text, $data) @kirbytext($text, $data) @kirbytextinline($text) @kt($text) @markdown($text) @option($key, $default) @page($key, $attr) // @page('blog', 'title') @param($key, $fallback) @site($attr) // @site(title') @size($value) @smartypants($text) @snippet($name, $data) @svg($file) @t($key, $fallback) @tc($key, $count) @tt($key, $fallback, $replace, $locale) @u($path, $options) @url($path, $options) @video($url, $options, $attr) @vimeo($url, $options, $attr) @widont($string) @youtube($url, $options, $attr)
但您可以创建自己的
'afbora.blade.directives' => [ 'greeting' => function ($text) { return "<?php echo 'Hello: ' . $text ?>"; }, ],
Kirby 助手文档
https://getkirby.com/docs/reference/templates/helpers
如果语句
像指令一样,您可以创建自己的如果语句
'afbora.blade.ifs' => [ 'logged' => function () { return !!kirby()->user(); }, ],
声明后,您可以使用它如下
@logged Welcome back {{ $kirby->user()->name() }} @else Please Log In @endlogged
压缩
设置
'afbora.blade.minify.enabled' => true, 'afbora.blade.minify.options' => [ 'doOptimizeViaHtmlDomParser' => true, // set true/false or remove line to default 'doRemoveSpacesBetweenTags' => false // set true/false or remove line to default ],
可用的压缩选项
选项 | 描述 |
---|---|
doOptimizeViaHtmlDomParser | 通过 "HtmlDomParser()" 优化 HTML |
doRemoveComments | 移除默认的 HTML 注释(取决于 "doOptimizeViaHtmlDomParser(true)") |
doSumUpWhitespace | 汇总 Dom 中的额外空白(取决于 "doOptimizeViaHtmlDomParser(true)") |
doRemoveWhitespaceAroundTags | 移除标签周围的空白(取决于 "doOptimizeViaHtmlDomParser(true)") |
doOptimizeAttributes | 优化 HTML 属性(取决于 "doOptimizeViaHtmlDomParser(true)") |
doRemoveHttpPrefixFromAttributes | 从属性中移除可选的 "http:-" 前缀(取决于 "doOptimizeAttributes(true)") |
doRemoveHttpsPrefixFromAttributes | 从属性中移除可选的 "https:-" 前缀(取决于 "doOptimizeAttributes(true)") |
doKeepHttpAndHttpsPrefixOnExternalAttributes | 保留所有外部链接的 "http:-" 和 "https:-" 前缀 |
doMakeSameDomainsLinksRelative | 通过从属性中删除域名,使一些链接相对化 |
doRemoveDefaultAttributes | 移除默认值(取决于 "doOptimizeAttributes(true)") |
doRemoveDeprecatedAnchorName | 移除过时的锚点跳转(取决于 "doOptimizeAttributes(true)") |
doRemoveDeprecatedScriptCharsetAttribute | 移除过时的 charset 属性 - 浏览器将使用 HTTP-Header 中的 charset,无论如何 |
doRemoveDeprecatedTypeFromScriptTag | 移除过时的脚本 MIME 类型(取决于 "doOptimizeAttributes(true)") |
doRemoveDeprecatedTypeFromStylesheetLink | 移除 CSS 链接的 "type=text/css"(取决于 "doOptimizeAttributes(true)") |
doRemoveDeprecatedTypeFromStyleAndLinkTag | 从所有链接和样式移除 "type=text/css"(取决于 "doOptimizeAttributes(true)") |
doRemoveDefaultMediaTypeFromStyleAndLinkTag | 从所有链接和样式移除 "media=all"(取决于 "doOptimizeAttributes(true)") |
doRemoveDefaultTypeFromButton | 从按钮标签中移除 type="submit"(取决于 "doOptimizeAttributes(true)") |
doRemoveEmptyAttributes | 移除一些空属性(取决于 "doOptimizeAttributes(true)") |
doRemoveValueFromEmptyInput | 从空 <input> 中移除 'value=""'(取决于 "doOptimizeAttributes(true)") |
doSortCssClassNames | 排序 css-class-names,以获得更好的 gzip 结果(取决于 "doOptimizeAttributes(true)") |
doSortHtmlAttributes | 排序 html-attributes,以获得更好的 gzip 结果(取决于 "doOptimizeAttributes(true)") |
doRemoveSpacesBetweenTags | 移除 dom 中的更多(更具侵略性)空白(默认禁用) |
doRemoveOmittedQuotes | 移除引号,例如 class="lall" => class=lall |
doRemoveOmittedHtmlTags | 移除省略的 html 标签,例如 <p>lall</p> => <p>lall |
您可以从 HtmlMin 库中获取详细的信息: voku/HtmlMin |