- Grav 插件
- Grav - 插件基础
- Grav - 插件教程
- Grav - 事件钩子
- Grav 管理面板
- Grav - 管理员简介
- Grav - 管理员仪表盘
- Grav - 配置系统
- Grav - 站点配置
- Grav - 管理面板页面
- Grav - 页面编辑器选项
- Grav - 页面编辑器高级
- Grav 高级
- Grav - 蓝图
- Grav - 性能和缓存
- Grav - 调试和日志
- Grav - CLI
- Grav - GPM
- Grav - 开发
- Grav - 生命周期
- Grav - YAML 语法
- Grav - 表单
- Grav 托管
- Grav - 网络托管
- Grav 故障排除
- Grav - 服务器错误
- Grav - 权限
- Grav 有用资源
- Grav - 面试问题
- Grav - 快速指南
- Grav - 有用资源
- Grav - 讨论
Grav - 资源管理器
在本章中,让我们学习关于**资源管理器**。资源管理器是在 Grav 0.9.0 中引入的,用于统一添加和管理**JavaScript**和**CSS**等资源的界面。从主题和插件中添加这些资源将提供高级功能,例如**排序**和**资源管道**。**资源管道**用于缩小和压缩资源,从而减少浏览器的需求并减小资源的大小。
资源管理器是一个类,可以通过插件事件钩子在 Grav 中使用。您也可以通过使用 Twig 调用在主题中直接使用资源管理器类。
配置
资源管理器包含一组配置选项。**system.yaml**文件包含默认值;您可以在**user/config/system.yaml**文件中覆盖这些值。
assets: # Configuration for Assets Manager (JS, CSS) css_pipeline: false # The CSS pipeline is the unification of multiple CSS resources into one file css_minify: true # Minify the CSS during pipelining css_rewrite: true # Rewrite any CSS relative URLs during pipelining js_pipeline: false # The JS pipeline is the unification of multiple JS resources into one file js_minify: true # Minify the JS during pipelining
主题中的资源
当您安装 Grav 时,Antimatter 主题作为默认主题提供。它展示了如何在位于此主题中的**base.html.twig**文件中添加 CSS 文件的示例。
{% block stylesheets %} {% do assets.addCss('theme://css/pure-0.5.0/grids-min.css', 103) %} {% do assets.addCss('theme://css-compiled/nucleus.css',102) %} {% do assets.addCss('theme://css-compiled/template.css',101) %} {% do assets.addCss('theme://css/custom.css',100) %} {% do assets.addCss('theme://css/font-awesome.min.css',100) %} {% do assets.addCss('theme://css/slidebars.min.css') %} {% if browser.getBrowser == 'msie' and browser.getVersion == 10 %} {% do assets.addCss('theme://css/nucleus-ie10.css') %} {% endif %} {% if browser.getBrowser == 'msie' and browser.getVersion >= 8 and browser.getVersion <= 9 %} {% do assets.addCss('theme://css/nucleus-ie9.css') %} {% do assets.addJs('theme://js/html5shiv-printshiv.min.js') %} {% endif %} {% endblock %} {{ assets.css() }}
以上代码的简要说明如下。
在**block** twig 标签中定义的区域可以在扩展该区域的模板中替换或追加,并且您可以在此块中看到多个**do assets.addCss()**调用。
**{% do %}**标签允许您处理变量而无需任何输出,这是 Twig 自身内置的。
可以使用**addCss()**方法将 CSS 资源添加到资源管理器。您可以通过传递数值作为第二个参数来设置样式表的优先级。对**addCss()**方法的调用会从 CSS 资源中渲染 HTML 标签。
JavaScript 资源的使用方式与 CSS 资源相同。如下所示,**block** twig 标签中的 JavaScript 资源。
{% block javascripts %} {% do assets.addJs('jquery',101) %} {% do assets.addJs('theme://js/modernizr.custom.71422.js',100) %} {% do assets.addJs('theme://js/antimatter.js') %} {% do assets.addJs('theme://js/slidebars.min.js') %} {% do assets.addInineJs('alert(\'This is inline!\')') %} {% endblock %} {{ assets.js() }}
添加资源
下表列出了不同类型的添加方法:
序号 | 方法和描述 |
---|---|
1 | add(asset, [options]) 根据文件扩展名,**add**方法匹配资源。它是调用 CSS 或 JS 直接方法的正确方法。您可以使用**options**设置优先级。pipeline 属性控制资源是否应包含在组合/缩小管道中。 |
2 | addCss(asset, [options]) 使用此方法,您可以将资源添加到 CSS 资源中。根据第二个参数中设置的优先级,资源在列表中排序。如果未设置优先级,则默认设置为 10。pipeline 属性控制资源是否应包含在组合/缩小管道中。 |
3 | addDirCss(directory) 使用此方法,您可以添加包含 CSS 资源的实体目录,这些资源将按字母顺序排列。 |
4 | addInlineCss(css, [options]) 您可以使用此方法在内联样式标签中提供 CSS 字符串。 |
5 | addJs(asset, [options]) 使用此方法,您可以将资源添加到 JS 资源中。如果未设置优先级,则将其默认优先级设置为 10。pipeline 属性确定资源是否应包含在组合/缩小管道中。 |
6 | addInlineJs(javascript, [options]) 此方法允许您在内联脚本标签中添加 JS 字符串。 |
7 | addDirJs(directory) 使用此方法,您可以添加包含 JS 资源的实体目录,这些资源将按字母顺序排列。 |
8 | registerCollection(name, array) 此方法允许您注册包含 CSS 或 JS 资源的数组并命名,以便稍后可以使用**add()**方法使用它。如果您使用多个主题或插件,则此方法非常有用。 |
选项
有很多选项可以传递资源数组,如下所示:
对于 CSS
**priority** - 它采用整数值,默认值为 100。
**pipeline** - 当资源未包含在管道中时,将其设置为**false**值。默认值设置为**true**。
对于 JS
**priority** - 采用整数值,默认值为 100。
**pipeline** - 当资源未包含在管道中时,将设置**false**。默认值设置为**true**。
**loading** - 此选项支持 3 个值,例如**empty**、**async**和**defer**。
**group** - 它包含一个指定组唯一名称的字符串。默认值设置为**true**。
示例
{% do assets.addJs('theme://js/example.js', {'priority':101, 'pipeline':true, 'loading':'async', 'group':'top'}) %}
渲染资源
可以使用以下方法渲染 CSS 和 JS 资源的当前状态:
css()
**css()**方法根据已添加到资源管理器的所有 CSS 资源渲染包含 HTML CSS 链接标签的列表。根据 pipeline 属性,列表可以包含缩小文件和单个/组合资源。
js()
**js()**方法根据已添加到资源管理器的所有 JS 资源渲染包含 HTML JS 链接标签的列表。根据 pipeline 属性,列表可以包含缩小文件和单个/组合资源。
命名资源
Grav 允许您使用名称注册 CSS 和 JS 资源的集合,以便您可以使用注册的名称将**add**资源添加到资源管理器。这可以通过 Grav 中称为**命名资源**的功能来实现。这些自定义集合在**system.yaml**中定义;任何主题或插件都可以使用这些集合。
assets: collections: jquery: system://assets/jquery/jquery-2.1.3.min.js bootstrap: - https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css - https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css - https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js
可以使用以下代码以编程方式使用**registerCollection()**方法:
$assets = $this->Grav['assets']; $bootstrapper_bits = [https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css, https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css, https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js]; $assets->registerCollection('bootstrap', $bootstrap_bits); $assets->add('bootstrap', 100);
分组资源
Grav 0.9.43 引入了一项名为**分组资源**的新功能,允许您在添加资源时传递包含可选**group**的选项数组。当您需要页面特定部分的一些 JS 文件或内联 JS 时,此功能非常有用。
使用选项语法,您必须在添加资源时指定组,如下所示。
{% do assets.addJs('theme://js/example.js', {'priority':102, 'group':'bottom'}) %}
如果未为资源设置组,则**head**将设置为默认组。如果希望这些资源在底部组中呈现,则必须在您的主题中添加以下内容。
{{ assets.js('bottom') }}
静态资源
每当您想在不使用资源管理器的情况下引用资源时,可以使用**url()**辅助方法。例如,当您想从主题中引用图像时,可以使用以下语法。
<img src = "{{ url("theme://" ~ widget.image) }}" alt = "{{ widget.text|e }}" />
**url()**辅助方法可选地采用第二个参数,以使用**true**或**false**值启用 URL 包含域名和模式。默认情况下,该值设置为**false**,仅显示相对 URL。
示例
url("theme://somepath/mycss.css", true)