Korzystając z FCKEditora, mamy możliwość zdecydowania w pliku fckconfig.js czy pasek narzędziowy ma być domyślnie rozwinięty czy też nie.
Jednak w wielu przypadkach, jest to za mało. Często nie chcemy w całej aplikacji definiować jednego "stylu", a zależnie od tego gdzie jesteśmy, mieć rozwinięty bądź nie, ten pasek narzędziowy.
Przykładem tego może być prosty CMS, gdzie mamy miejsce edycji tekstów - w takim miejscu ten pasek powinien być rozwinięty. Jednak mamy też np miejsce wpisywania opisów do galerii (pomijając fakt że tam wystarczyłoby zwykłe textarea) - w takim miejscu użytkownicy zazwyczaj wpisują tekst, nie "zdobiąc" go zbytnio.
Do Railsów jest plugin umożliwiający wykorzystywanie FCKEditora, dodając wygodny helper fckeditor_textarea. Rozwiązanie to ma jednak jedną zasadniczą wadę: nie można sterować z jego poziomu parametrem: toolbarStartExpanded.
Pokusiłem się i napisałem łatkę, a raczej wersję poprawioną metody fckeditor_textarea. W pliku fckeditor.rb pluginu, znajdujemy wyżej wymienioną metodę i dopisujemy od linijki 30:
if options[:toolbarStartExpanded].nil? toolbar_expand = '' else toolbar_expand = "oFCKeditor.Config['ToolbarStartExpanded'] = #{options[:toolbarStartExpanded].to_s}" end
A następnie w javascript_tag zwracanym, jako trzeci wiersz:
"#{toolbar_expand}\n"<<
i tyle :)
Od teraz możemy korzystać z tego w następujący sposób:
<%= fckeditor_textarea(:text, :content, :toolbarSet => 'Text', :toolbarStartExpanded => false, :width => '75%', :height => '250px', :cols => '50', :rows=> '8', :id => 'fckedit') %>
Poniżej cała metoda fckeditor_textarea:
def fckeditor_textarea(object, field, options = {}) var = instance_variable_get("@#{object}") if var value = var.send(field.to_sym) value = value.nil? ? "" : value else value = "" klass = "#{object}".camelcase.constantize instance_variable_set("@#{object}", eval("#{klass}.new()")) end id = fckeditor_element_id(object, field) cols = options[:cols].nil? ? '' : "cols='"+options[:cols]+"'" rows = options[:rows].nil? ? '' : "rows='"+options[:rows]+"'" width = options[:width].nil? ? '100%' : options[:width] height = options[:height].nil? ? '100%' : options[:height] if options[:toolbarStartExpanded].nil? toolbar_expand = '' else toolbar_expand = "oFCKeditor.Config['ToolbarStartExpanded'] = #{options[:toolbarStartExpanded].to_s}" end toolbarSet = options[:toolbarSet].nil? ? 'Default' : options[:toolbarSet] id = options[:id].nil? ? id : options[:id] value = options[:value].nil? ? value : options[:value] if options[:ajax] inputs = "<input type='hidden' id='#{id}_hidden' name='#{object}[#{field}]'>\n" << "<textarea id='#{id}' #{cols} #{rows} name='#{id}'>#{value}</textarea>\n" else inputs = "<textarea id='#{id}' #{cols} #{rows} name='#{object}[#{field}]'>#{value}</textarea>\n" end js_path = "/javascripts" base_path = "#{js_path}/fckeditor/" return inputs << javascript_tag("try{var oFCKeditor = new FCKeditor('#{id}', '#{width}', '#{height}', '#{toolbarSet}');\n" << "oFCKeditor.BasePath = \"#{base_path}\"\n" << "#{toolbar_expand}\n"<< "oFCKeditor.Config['CustomConfigurationsPath'] = '#{js_path}/fckcustom.js';\n" << "oFCKeditor.ReplaceTextarea();\n}catch(e){}") end
Leave a Reply