Grav - Gerente de Ativos

Neste capítulo, vamos estudar sobre Asset Manager. O Asset Manager foi introduzido no Grav 0.9.0 para unificar a interface para adicionar e gerenciar ativos comoJavaScript e CSS. Adicionar esses recursos de temas e plug-ins fornecerá recursos avançados, comoordering e Asset Pipeline. oAsset Pipeline é usado para minificar e compactar os ativos de modo que reduza os requisitos do navegador e também reduz o tamanho dos ativos.

O Asset Manager é uma classe disponível para uso no Grav por meio de ganchos de eventos do plugin. Você também pode usar a classe Asset Manager diretamente em temas usando chamadas Twig.

Configuração

O Asset Manager consiste em um conjunto de opções de configuração. osystem.yamlarquivo contém os valores padrão; você pode substituir esses valores em seuuser/config/system.yaml Arquivo.

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

Ativos em temas

O tema Antimatéria vem como tema padrão quando você instala o Grav. Mostra um exemplo de como adicionar arquivos CSS em seubase.html.twig arquivo que reside neste tema.

{% 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() }}

O código acima é explicado brevemente a seguir.

  • A região definida no block a tag twig pode ser substituída ou anexada em modelos que estendem o um e você pode ver o número de do assets.addCss() chamadas dentro deste bloco.

  • o {% do %} tag permite que você manipule variáveis ​​sem qualquer saída que seja construída no próprio Twig.

  • Os ativos CSS podem ser adicionados ao Asset Manager usando addCss()método. Você pode definir a prioridade das folhas de estilo passando um valor numérico como segundo parâmetro. A chamada para oaddCss() método renderiza as tags HTML de ativos CSS.

Os ativos JavaScript são usados ​​da mesma forma que os ativos CSS. Os ativos de JavaScript dentro doblock tags twig como mostrado abaixo.

{% 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() }}

Adicionando ativos

A tabela a seguir lista os diferentes tipos de métodos de adição -

Sr. Não. Método e Descrição
1

add(asset, [options])

Com base na extensão do arquivo, o addmétodo corresponde ao ativo. É um método adequado para chamar um dos métodos diretos para CSS ou JS. Você pode fazer uso deoptionspara definir a prioridade. Se um ativo deve ser incluído na combinação / minificar pipeline ou não, é controlado pelo atributo pipeline.

2

addCss(asset, [options])

Usando este método, você pode adicionar ativos aos ativos CSS. Com base na prioridade definida no segundo parâmetro, o ativo é classificado na lista. Se nenhuma prioridade for definida, por padrão, 10 é definido. Se um ativo deve ser incluído na combinação / minificar pipeline ou não, é controlado pelo atributo pipeline.

3

addDirCss(directory)

Usando este método, você pode adicionar um diretório de entidades que consiste nos ativos CSS que serão organizados em ordem alfabética.

4

addInlineCss(css, [options])

Você pode fornecer uma string de CSS dentro da tag de estilo embutido usando este método.

5

addJs(asset, [options])

Usando este método, você pode adicionar ativos aos ativos JS. Se a prioridade não for definida, ele define a prioridade padrão para 10. O atributo pipeline determina se um ativo deve ser incluído no pipeline de combinação / minificação ou não.

6

addInlineJs(javascript, [options])

Este método permite adicionar uma string de JS dentro da tag de script embutido.

7

addDirJs(directory)

Usando este método, você pode adicionar um diretório de entidade consistindo nos ativos JS, que serão organizados em ordem alfabética.

8

registerCollection(name, array)

Este método permite registrar uma matriz que consiste em ativos CSS ou JS com um nome para que possa ser usado posteriormente usando o add()método. Se você estiver usando vários temas ou plug-ins, esse método é muito útil.

Opções

Existem muitas opções para passar o conjunto de ativos que são explicados conforme mostrado abaixo -

Para CSS

  • priority - É necessário um valor inteiro e o valor padrão será 100.

  • pipeline - Quando um ativo não é incluído no pipeline, ele é definido como falsevalor. E o valor padrão é definido comotrue.

Para JS

  • priority - Assume um valor inteiro e o valor padrão será 100.

  • pipeline - Quando um ativo não está incluído no pipeline, falseestá definido. E o valor padrão é definido comotrue.

  • loading - Esta opção oferece suporte a 3 valores, como empty, async e defer.

  • group- Consiste em uma string que especifica o nome exclusivo de um grupo. E o valor padrão é definido comotrue.

Example

{% do assets.addJs('theme://js/example.js', 
{'priority':101, 'pipeline':true, 'loading':'async', 'group':'top'}) %}

Ativos de renderização

O estado atual dos ativos CSS e JS pode ser renderizado usando o seguinte -

css ()

Com base em todos os ativos CSS que foram adicionados ao Asset Manager, o css()método renderiza uma lista que consiste em tags de link HTML CSS. Com base no atributo pipeline, a lista pode conter arquivo reduzido e ativo individual / combinado.

js ()

Com base em todos os ativos JS que foram para o Asset Manager, o js()método renderiza uma lista que consiste em tags de link HTML JS. Com base no atributo pipeline, a lista pode conter arquivo reduzido e ativo individual / combinado.

Ativos Nomeados

Grav permite que você registre uma coleção de ativos CSS e JS com um nome, para que você possa usar o addativos para o Asset Manager usando o nome registrado. Isso pode ser feito no Grav usando um recurso chamadonamed assets. Essas coleções personalizadas são definidas emsystem.yaml; as coleções podem ser usadas por qualquer tema ou plugin.

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

o registerCollection() método pode ser usado programaticamente com o seguinte código -

$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);

Ativos agrupados

Grav 0.9.43 foi introduzido com um novo recurso chamado Grouped Assets, que permite que você passe uma matriz de opções que consiste em groupao adicionar ativos. Este recurso é muito útil quando você precisa de alguns arquivos JS ou JS em linha em uma parte específica da página.

Usando a sintaxe de opções, você deve especificar o grupo ao adicionar o ativo, conforme mostrado abaixo.

{% do assets.addJs('theme://js/example.js', {'priority':102, 'group':'bottom'}) %}

Se nenhum grupo for definido para um ativo, então headé definido como grupo padrão. Se você deseja que esses ativos sejam renderizados no grupo inferior, você deve adicionar o seguinte em seu tema.

{{ assets.js('bottom') }}

Ativos estáticos

Sempre que quiser referir ativos sem o uso do Asset Manager, você pode usar o url()método auxiliar. Por exemplo, quando quiser fazer referência a uma imagem do tema, você pode usar a seguinte sintaxe.

<img src = "{{ url("theme://" ~ widget.image) }}" alt = "{{ widget.text|e }}" />

o url() método auxiliar opcionalmente usa o segundo parâmetro para permitir que a URL inclua domínio e esquema usando true ou falsevalores. Por padrão, o valor é definido comofalse que exibe apenas o URL relativo.

Example

url("theme://somepath/mycss.css", true)