Spec-Zone.ru › Jekyll 4

Плагины

Используя плагины, вы можете получить точный контроль над различными аспектами процесса сборки. Если ваш плагин определяет какие-либо плагины, Jekyll вызовет их в заранее определённые моменты.

Плагины регистрируются для владельца и имени события. Для регистрации вызовите Jekyll::Hooks.register, передав владельца плагина, имя события и код, который должен быть выполнен при срабатывании плагина. Например, если вы хотите выполнить некоторую пользовательскую функциональность каждый раз, когда Jekyll отображает страницу, вы можете зарегистрировать плагин следующим образом:

Jekyll::Hooks.register :pages, :post_render do |page|
  # code to call after Jekyll renders a page
end

Примечание: события :post_convert упомянутые ниже, являются функцией, добавленной в версии v4.2.0.

По умолчанию, Jekyll имеет предварительно определённые точки срабатывания плагинов для владельцев :site, :pages, :documents и :clean. Кроме того, точки срабатывания плагинов, определённые для :documents, могут быть использованы только для отдельных коллекций, вызвав тип коллекции. Например, :posts для документов в коллекции _posts и :movies для документов в коллекции _movies. Во всех случаях Jekyll вызывает ваши плагины с объектом-владельцем в качестве первого параметра обратного вызова.

Каждый зарегистрированный владелец плагинов поддерживает следующие события — :post_init, :pre_render, :post_convert, :post_render, :post_write — однако владелец :site настроен на отклик на специальные имена событий. Подробности см. в последующем разделе.

Все плагины :pre_render и плагин :site, :post_render также предоставят хэш payload в качестве второго параметра. В то время как в случае событий :pre_render, полезная нагрузка предоставляет вам полный контроль над переменными, доступными во время рендеринга, с событием :site, :post_render, полезная нагрузка содержит окончательные значения после рендеринга всего сайта (полезно для карт сайта, лент и т.д.).

Встроенные владельцы плагинов и события

Полный список доступных плагинов:

Владелец Событие Срабатывает в

:site

Охватывает весь сайт

:after_init

Сразу после инициализации сайта. Полезно для изменения конфигурации сайта. Срабатывает один раз за сеанс сборки/отладки

:after_reset

Сразу после сброса сайта во время регенерации

:post_read

После того, как все исходные файлы были прочитаны и загружены из диска

:pre_render

Прямо перед отображением всего сайта

:post_render

После рендеринга всего сайта, но перед записью любых файлов

:post_write

После записи всех рендереных файлов на диск

:pages

Позволяет тонкую настройку всех страниц на сайте

:post_init

Каждый раз, когда страница инициализируется

:pre_render

Прямо перед отображением страницы

:post_convert

После преобразования содержимого страницы, но перед отображением макета страницы

:post_render

После отображения страницы, но перед записью ее на диск

:post_write

После записи страницы на диск

:documents

Позволяет тонкий контроль над всеми документами на сайте, включая записи и документы в пользовательских коллекциях

:post_init

Каждый раз, когда любой документ инициализируется

:pre_render

Прямо перед отображением документа

:post_convert

После преобразования содержимого документа, но перед отображением макета документа

:post_render

После отображения документа, но перед записью его на диск

:post_write

После записи документа на диск

:posts

Позволяет тонкую настройку всех записей на сайте без влияния на документы в пользовательских коллекциях

:post_init

Каждый раз, когда запись инициализируется

:pre_render

Прямо перед отображением записи

:post_convert

После преобразования содержимого записи, но перед отображением макета записи

:post_render

После отображения записи, но перед записью ее на диск

:post_write

После записи записи на диск

:clean

Точный контроль над списком устаревших файлов, которые должны быть удалены во время очистки сайта.

:on_obsolete

Во время очистки целевого каталога сайта перед его сборкой

Плагины для пользовательских объектов Jekyll

Вы также можете регистрировать и вызывать плагины для объектов Jekyll, представленных вашим плагином. Для этого необходимо разместить вызовы trigger под подходящим именем owner в желаемых позициях внутри вашего пользовательского класса и зарегистрировать owner вашим плагином.

В качестве примера рассмотрим следующий плагин, который реализует пользовательскую функциональность для каждого пользовательского объекта Excerpt при инициализации:

module Foobar
  class HookedExcerpt < Jekyll::Excerpt
    def initialize(doc)
      super
      trigger_hooks(:post_init)
    end

    def output
      @output ||= trigger_hooks(:post_render, renderer.run)
    end

    def renderer
      @renderer ||= Jekyll::Renderer.new(
        doc.site, self, site.site_payload
      )
    end

    def trigger_hooks(hook_name, *args)
      Jekyll::Hooks.trigger :excerpts, hook_name, self, *args
    end
  end
end

Jekyll::Hooks.register :excerpts, :post_init do |excerpt|
  Jekyll.logger.debug "Initialized:",
                      "Hooked Excerpt for #{excerpt.doc.inspect}"
end

Jekyll::Hooks.register :excerpts, :post_render do |excerpt, output|
  return output unless excerpt.doc.type == :posts
  Foobar.transform(output)
end

© 2020 Jekyll Core Team and contributors
Licensed under the MIT license.
https://jekyllrb.com/docs/plugins/hooks/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API