Плагины
Используя плагины, вы можете получить точный контроль над различными аспектами процесса сборки. Если ваш плагин определяет какие-либо плагины, 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, полезная нагрузка содержит окончательные значения после рендеринга всего сайта (полезно для карт сайта, лент и т.д.).
Встроенные владельцы плагинов и события
Полный список доступных плагинов:
| Владелец | Событие | Срабатывает в |
|---|---|---|
|
Охватывает весь сайт |
| Сразу после инициализации сайта. Полезно для изменения конфигурации сайта. Срабатывает один раз за сеанс сборки/отладки |
|
| Сразу после сброса сайта во время регенерации | |
|
| После того, как все исходные файлы были прочитаны и загружены из диска | |
|
| Прямо перед отображением всего сайта | |
|
| После рендеринга всего сайта, но перед записью любых файлов | |
|
| После записи всех рендереных файлов на диск | |
|
Позволяет тонкую настройку всех страниц на сайте |
| Каждый раз, когда страница инициализируется |
|
| Прямо перед отображением страницы | |
|
| После преобразования содержимого страницы, но перед отображением макета страницы | |
|
| После отображения страницы, но перед записью ее на диск | |
|
| После записи страницы на диск | |
|
Позволяет тонкий контроль над всеми документами на сайте, включая записи и документы в пользовательских коллекциях |
| Каждый раз, когда любой документ инициализируется |
|
| Прямо перед отображением документа | |
|
| После преобразования содержимого документа, но перед отображением макета документа | |
|
| После отображения документа, но перед записью его на диск | |
|
| После записи документа на диск | |
|
Позволяет тонкую настройку всех записей на сайте без влияния на документы в пользовательских коллекциях |
| Каждый раз, когда запись инициализируется |
|
| Прямо перед отображением записи | |
|
| После преобразования содержимого записи, но перед отображением макета записи | |
|
| После отображения записи, но перед записью ее на диск | |
|
| После записи записи на диск | |
|
Точный контроль над списком устаревших файлов, которые должны быть удалены во время очистки сайта. |
| Во время очистки целевого каталога сайта перед его сборкой |
Плагины для пользовательских объектов 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/