Как я могу заставить Jekyll использовать макет, не указывая его? - PullRequest
24 голосов
/ 13 декабря 2011

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

---
layout: default
title: Here's my Title
---

. , , как YAML Front Matter в верхней части моих страниц.

То, что я предпочел бы написать, однако, только. , .

---
title: Here's my Title
---

. , , и пусть Джекилл предположит, что он должен использовать определенный макет, как если бы я явно написал «layout: default» (или что-то еще), как указано выше.

Я не вижу способа указать это поведение в _config.yml. Может быть, я мог бы написать плагин Jekyll , который позволил бы это. , , есть идеи?

Ответы [ 4 ]

27 голосов
/ 21 мая 2014

Это можно сделать, используя Параметры по умолчанию для Frontmatter :

defaults:
  -
    scope:
      path: "" # empty string for all files
    values:
      layout: "default"

Этот параметр доступен с Jekyll Версия 2.0.0 .

5 голосов
/ 19 июля 2013

Короче и без мартышек:

# _plugins/implicit_layout.rb
module ImplicitLayout
  def read_yaml(*args)
    super
    self.data['layout'] ||= 'post'
  end
end

Jekyll::Post.send(:include, ImplicitLayout)

Предостережение: GH Pages не будет запускать ваши плагины.

0 голосов
/ 03 марта 2013

По умолчанию вы не можете сделать это. Джекиллу нужен YAML, чтобы указать макет, чтобы он знал, куда его поместить в.

0 голосов
/ 15 декабря 2011

Вот плагин Jekyll, который вы можете указать как _plugins/implicit-layout.rb, например:

# By specifying an implicit layout here, you do not need to
# write, for example "layout: default" at the top of each of
# your posts and pages (i.e. in the "YAML Front Matter")
#
# Please note that you should only use this plugin if you
# plan to use the same layout for all your posts and pages.
# To use the plugin, just drop this file in _plugins, calling it
# _plugins/implicit-layout.rb, for example
IMPLICIT_LAYOUT = 'default'

module Jekyll
  module Convertible

    def read_yaml(base, name)
      self.content = File.read(File.join(base, name))

      if self.content =~ /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
        self.content = $POSTMATCH

        begin
          self.data = YAML.load($1)
          self.data["layout"] = IMPLICIT_LAYOUT
        rescue => e
          puts "YAML Exception reading #{name}: #{e.message}"
        end
      end

      self.data ||= {}
    end

  end
end

После того, как я повесил на #jekyll на freenode, мне дано понять, что это патч обезьяны.

Как прокомментировал Алан У. Смит, возможность вставить "layout: default" в _config.yml было бы хорошим улучшением для этого плагина.

В идеале (с моей точки зрения) эта функциональность может быть включена в сам Jekyll, поэтому плагин не понадобится.

...