рдХрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╣реЗрд░рдлреЗрд░ рд╣реЛрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ
рдбреЗрдХреЛрд░реЗрдЯрд░ ,
рдХрд╕реНрдЯрдо рдлреЙрд░реНрдо рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ ,
рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕рд┐рд░реНрдл рд╣реЗрд▓реНрдкрд░реНрд╕ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рджрд░рдЕрд╕рд▓, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рджреГрд╢реНрдп рдлрд╛рдЗрд▓реЗрдВ рдмреЗрд╣рддрд░ рджрд┐рдЦрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рд░реВрдк рддрддреНрд╡ рдФрд░ рд╕рд╣рд╛рдпрдХ рдмрд╕ рдЕрд╕рд╣рдиреАрдп рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдл рдФрд░ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХрд╛ рд╣реИ ...
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
PriceRangeInput
рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡
PriceRangeInput
ред
class PriceRangeInput < SimpleForm::Inputs::Base def input output = template.content_tag(:div, class: 'j-price-slider') do div = '' div << template.content_tag(:div, class: 'row') do row = "" row << template.content_tag(:span, class: 'span3') do @builder.input(:min_total_price, label: false, input_html: { class: 'input-small j-min-total-price'}) end row << template.content_tag(:span, class: 'span3') do @builder.input(:max_total_price, label: false, input_html: { class: 'input-small j-max-total-price'}) end row.html_safe end div << template.content_tag(:div, class: 'row') do template.content_tag(:span, class: 'span6') do template.content_tag(:div, class: 'j-slider', :data => :slider_data) do end end end div.html_safe end output.html_safe end end
рдпрд╣ рддрддреНрд╡ рдлрд╝реЙрд░реНрдо рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
= simple_form_for current_search_form, :url => :search, :method => "get" do |f| = f.input :price_range, :label => false, :as => :price_range
рд▓реЗрдХрд┐рди рдлреЙрд░реНрдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИ
рд╕рдорд╛рдзрд╛рди
Arbre - Ruby Object Orient HTML Views рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИредрдпрд╣ рдХреЛрдб рдореЗрдВ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред Arbre рдХрд╛ рдЬрдиреНрдо
acive_admin рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реБрдЖ рдерд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдиреАрдВрд╡ рд╣реИред
рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдБрдЪреЛ
рдЖрдЗрдП рдлрд╛рд░реНрдо рддрддреНрд╡реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред рдпрд╣ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдмрдВрджрд░ рдкреИрдЪ рдХреЗ рджреБрд░реНрд▓рдн рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
class SimpleForm::Inputs::Base private def arbre assigns={}, &block Arbre::Context.new assigns.reverse_merge(:builder=>@builder), template, &block end end
рдЕрдм рд╣рдо рдлрд╛рд░реНрдо рддрддреНрд╡ рдХреЛ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
def input arbre slider_data: slider_data do div class: 'j-price-slider' do div class: 'row' do span class: 'span3' do builder.input :min_total_price, label: false, input_html: { class: 'input-small j-min-total-price'} end span class: 'span3' do builder.input :max_total_price, label: false, input_html: { class: 'input-small j-max-total-price'} end end div class: 'row' do span class: 'span6' do div class: 'j-slider', data: slider_data end end end end end
рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдХреЗрд╡рд▓ рд╡рд╣реА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХреЛрдб рдЕрдЪреНрдЫреЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддрд╛ рд╣реИред
рдЕрд░реНрдм рдХреЗ рд▓рд╛рдн
рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВред
1. рдЙрдкрдпреЛрдЧ
Arbre
рдЖрдк рдЙрддреНрдкрдиреНрди рдЯреИрдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
2. рдпрд╣ рд╣рдореЗрдВ рдХреЛрдб рдореЗрдВ рдЬрдВрдХ
content_tag
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЯреИрдЧ рдХреЛ рд╕реАрдзреЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
3. рдФрд░ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдШрдЯрдХ рд╣реИрдВред
рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдШрдЯрдХ
рдПрдХ рдФрд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐
Arbre
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
class Row < Arbre::Component builder_method :row def build(title, attributes = {}) super(attributes.merge class: 'row') end end
рдШреЛрд╖рдгрд╛ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдпрд╣ рдШрдЯрдХ рдЕрдореНрдмреНрд░реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
template.content_tag(:div, class: 'row') do ...
рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
row do ...
рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ:
<div class="row"> ...
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрд░реНрдмрд░ рдХреЛрдб рдореЗрдВ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп - рд▓реЗрдЖрдЙрдЯ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред