cargar campos desde la plantilla
This commit is contained in:
parent
265fd9fff5
commit
8d70037aee
2 changed files with 52 additions and 1 deletions
|
@ -15,11 +15,15 @@ require 'jekyll/utils'
|
||||||
# datos y los sincroniza al momento de leer y de escribir el Document.
|
# datos y los sincroniza al momento de leer y de escribir el Document.
|
||||||
class Post
|
class Post
|
||||||
attr_accessor :content, :front_matter
|
attr_accessor :content, :front_matter
|
||||||
attr_reader :post, :site, :errors, :old_post, :lang, :template
|
attr_reader :post, :site, :errors, :old_post, :lang, :template,
|
||||||
|
:template_fields
|
||||||
|
|
||||||
REJECT_FROM_DATA = %w[excerpt].freeze
|
REJECT_FROM_DATA = %w[excerpt].freeze
|
||||||
# datos que no tienen que terminar en el front matter
|
# datos que no tienen que terminar en el front matter
|
||||||
REJECT_FROM_FRONT_MATTER = %w[date slug draft ext].freeze
|
REJECT_FROM_FRONT_MATTER = %w[date slug draft ext].freeze
|
||||||
|
# datos que no traemos del template
|
||||||
|
REJECT_FROM_TEMPLATE = %w[date draft categories layout title ext tags date slug].freeze
|
||||||
|
|
||||||
|
|
||||||
# Trabajar con posts. Si estamos creando uno nuevo, el **site** y
|
# Trabajar con posts. Si estamos creando uno nuevo, el **site** y
|
||||||
# el **front_matter** son necesarios, sino, **site** y **post**.
|
# el **front_matter** son necesarios, sino, **site** y **post**.
|
||||||
|
@ -210,6 +214,36 @@ class Post
|
||||||
@front_matter.dig(name.to_s)
|
@front_matter.dig(name.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def template_fields
|
||||||
|
@template_fields ||= @template.front_matter.reject do |key, _|
|
||||||
|
REJECT_FROM_TEMPLATE.include? key
|
||||||
|
end.keys
|
||||||
|
end
|
||||||
|
|
||||||
|
# Obtiene el tipo de campo para la plantilla
|
||||||
|
def template_form_type_for(field)
|
||||||
|
return if (tt = @template.get_front_matter(field)).nil?
|
||||||
|
|
||||||
|
case
|
||||||
|
when tt == 'string'
|
||||||
|
type = 'text'
|
||||||
|
when tt == 'text'
|
||||||
|
type = 'text_area'
|
||||||
|
when tt.is_a?(Array)
|
||||||
|
type = 'select'
|
||||||
|
when tt.is_a?(FalseClass) || tt.is_a?(TrueClass)
|
||||||
|
type = 'check_box'
|
||||||
|
end
|
||||||
|
|
||||||
|
type
|
||||||
|
end
|
||||||
|
|
||||||
|
# Obtiene los valores posibles para el campo de la plantilla
|
||||||
|
def template_values_for(field)
|
||||||
|
return '' if %w[string text].include? @template.get_front_matter(field)
|
||||||
|
@template.get_front_matter(field)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# Completa el front_matter a partir de las variables de otro
|
# Completa el front_matter a partir de las variables de otro
|
||||||
|
|
|
@ -75,5 +75,22 @@
|
||||||
@post.get_front_matter(:lang).try(:dig, lang)),
|
@post.get_front_matter(:lang).try(:dig, lang)),
|
||||||
{ class: 'form-control select2' }
|
{ class: 'form-control select2' }
|
||||||
%small.text-muted.form-text= t('posts.lang_help')
|
%small.text-muted.form-text= t('posts.lang_help')
|
||||||
|
- @post.template_fields.each do |template|
|
||||||
|
- next unless type = @post.template_form_type_for(template)
|
||||||
|
.form-group
|
||||||
|
= label_tag "post_#{template}", template.humanize
|
||||||
|
- name = "post[#{template}]"
|
||||||
|
- value = @post.template_values_for(template)
|
||||||
|
- case type
|
||||||
|
- when 'text'
|
||||||
|
= text_field 'post', template,
|
||||||
|
value: value,
|
||||||
|
class: 'form-control'
|
||||||
|
- when 'text_area'
|
||||||
|
= text_area_tag name, value, class: 'form-control'
|
||||||
|
- when 'check_box'
|
||||||
|
= check_box_tag name, value: value, class: 'form-control'
|
||||||
|
- when 'select'
|
||||||
|
= select_tag name, value, { class: 'form-control' }
|
||||||
.form-group
|
.form-group
|
||||||
= submit_tag t('posts.save'), class: 'btn btn-success'
|
= submit_tag t('posts.save'), class: 'btn btn-success'
|
||||||
|
|
Loading…
Reference in a new issue