Grav - Menedżer zasobów

W tym rozdziale przestudiujmy Asset Manager. Asset Manager został wprowadzony w Grav 0.9.0 w celu ujednolicenia interfejsu do dodawania i zarządzania zasobami, takimi jakJavaScript i CSS. Dodanie tych zasobów z motywów i wtyczek zapewni zaawansowane możliwości, takie jakordering i Asset Pipeline. PlikAsset Pipeline służy do zmniejszania i kompresowania zasobów, dzięki czemu zmniejsza wymagania przeglądarki, a także zmniejsza rozmiar zasobów.

Asset Manager jest klasą dostępną do użycia w Gravu za pośrednictwem haków zdarzeń wtyczek. Możesz również używać klasy Asset Manager bezpośrednio w motywach, używając wywołań Twig.

Konfiguracja

Asset Manager składa się z zestawu opcji konfiguracyjnych. Pliksystem.yamlplik zawiera wartości domyślne; możesz zastąpić te wartości w swoimuser/config/system.yaml plik.

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

Zasoby w motywach

Motyw Antymaterii jest domyślnym motywem po zainstalowaniu Grav. Pokazuje przykład, jak dodać pliki CSS do plikubase.html.twig plik, który znajduje się w tym motywie.

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

Powyższy kod wyjaśniono pokrótce poniżej.

  • Region zdefiniowany w block tag twig może być zastąpiony lub dołączony do szablonów, które rozszerzają ten i możesz zobaczyć liczbę do assets.addCss() wywołania w tym bloku.

  • Plik {% do %} tag pozwala na obsługę zmiennych bez żadnego wyjścia, które jest wbudowane w sam Twig.

  • Zasoby CSS można dodać do Menedżera zasobów za pomocą addCss()metoda. Możesz ustawić priorytet arkuszy stylów, przekazując wartość liczbową jako drugi parametr. Wezwanie doaddCss() renderuje tagi HTML z zasobów CSS.

Zasoby JavaScript są używane w taki sam sposób, jak zasoby CSS. Zasoby JavaScript wblock Tagi twig, jak pokazano poniżej.

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

Dodawanie zasobów

Poniższa tabela zawiera listę różnych typów metod dodawania -

Sr.No. Metoda i opis
1

add(asset, [options])

Na podstawie rozszerzenia pliku addmetoda pasuje do zasobu. Jest to właściwa metoda wywołania jednej z metod bezpośrednich dla CSS lub JS. Możesz skorzystać zoptionsustawić priorytet. To, czy zasób powinien zostać uwzględniony w potoku kombinacji / minify, czy nie, jest kontrolowane przez atrybut potoku.

2

addCss(asset, [options])

Korzystając z tej metody, możesz dodawać zasoby do zasobów CSS. Na podstawie priorytetu ustawionego w drugim parametrze zasób jest uporządkowany na liście. Jeśli nie ustawiono żadnego priorytetu, domyślnie ustawiono 10. To, czy zasób powinien zostać uwzględniony w potoku kombinacji / minify, czy nie, jest kontrolowane przez atrybut potoku.

3

addDirCss(directory)

Korzystając z tej metody, możesz dodać katalog encji składający się z zasobów CSS, które zostaną uporządkowane w kolejności alfabetycznej.

4

addInlineCss(css, [options])

Używając tej metody, możesz podać ciąg znaków CSS w tagu stylu wbudowanego.

5

addJs(asset, [options])

Korzystając z tej metody, możesz dodawać zasoby do zasobów JS. Jeśli priorytet nie jest ustawiony, ustawia domyślny priorytet na 10. Atrybut potoku określa, czy zasób powinien zostać uwzględniony w potoku kombinacji / minify, czy nie.

6

addInlineJs(javascript, [options])

Ta metoda umożliwia dodanie ciągu JS do wbudowanego tagu script.

7

addDirJs(directory)

Korzystając z tej metody, możesz dodać katalog encji składający się z zasobów JS, które zostaną uporządkowane w kolejności alfabetycznej.

8

registerCollection(name, array)

Ta metoda umożliwia zarejestrowanie tablicy składającej się z zasobów CSS lub JS pod nazwą, aby można było z niej później korzystać za pomocą add()metoda. Jeśli używasz wielu motywów lub wtyczek, ta metoda jest bardzo przydatna.

Opcje

Istnieje wiele opcji przekazywania tablicy zasobów, które wyjaśniono, jak pokazano poniżej -

Dla CSS

  • priority - Przyjmuje wartość całkowitą, a wartością domyślną będzie 100.

  • pipeline - Gdy zasób nie jest uwzględniony w potoku, ustawia się na falsewartość. Domyślna wartość totrue.

Dla JS

  • priority - Pobiera wartość całkowitą, a wartość domyślna to 100.

  • pipeline - Gdy zasób nie jest uwzględniony w potoku, falsejest ustawiony. Domyślna wartość totrue.

  • loading - Ta opcja obsługuje 3 wartości, takie jak empty, async i defer.

  • group- Składa się z ciągu określającego unikalną nazwę grupy. Domyślna wartość totrue.

Example

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

Renderowanie zasobów

Bieżący stan zasobów CSS i JS można renderować za pomocą następującego -

css ()

Na podstawie wszystkich zasobów CSS, które zostały dodane do Menedżera zasobów, plik css()renderuje listę składającą się z tagów linków HTML CSS. Na podstawie atrybutu potoku lista może zawierać zminimalizowany plik i pojedynczy / połączony zasób.

js ()

W oparciu o wszystkie zasoby JS, które były w Asset Manager, plik js()renderuje listę składającą się ze znaczników odsyłaczy HTML JS. Na podstawie atrybutu potoku lista może zawierać zminimalizowany plik i pojedynczy / połączony zasób.

Nazwane zasoby

Grav umożliwia zarejestrowanie kolekcji zasobów CSS i JS pod nazwą, dzięki czemu można używać rozszerzenia addzasobów do Asset Manager przy użyciu zarejestrowanej nazwy. Można to osiągnąć w Gravu za pomocą funkcji o nazwienamed assets. Te kolekcje niestandardowe są zdefiniowane wsystem.yaml; kolekcje mogą być używane przez dowolny motyw lub wtyczkę.

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

Plik registerCollection() metoda może być używana programowo z następującym kodem -

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

Aktywa zgrupowane

Grav 0.9.43 został wprowadzony z nową funkcją o nazwie Grouped Assets, co pozwala na przekazanie tablicy opcji składającej się z opcjonalnych grouppodczas dodawania zasobów. Ta funkcja jest bardzo przydatna, gdy potrzebujesz plików JS lub wbudowanego JS w określonej części strony.

Korzystając ze składni opcji, podczas dodawania zasobu należy określić grupę, jak pokazano poniżej.

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

Jeśli żadna grupa nie jest ustawiona dla zasobu, to headjest ustawiona jako grupa domyślna. Jeśli chcesz, aby te zasoby były renderowane w dolnej grupie, musisz dodać następujące elementy w swoim motywie.

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

Zasoby statyczne

Zawsze, gdy chcesz polecić zasoby bez użycia Menedżera zasobów, możesz użyć rozszerzenia url()metoda pomocnicza. Na przykład, jeśli chcesz odnieść się do obrazu z motywu, możesz użyć następującej składni.

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

Plik url() helper opcjonalnie przyjmuje drugi parametr, aby umożliwić adresowi URL uwzględnienie domeny i schematu przy użyciu true lub falsewartości. Domyślnie wartość jest ustawiona nafalse który wyświetla tylko względny adres URL.

Example

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