lest, just lest

Заметки о web-разработке, администрировании Linux и настройке Mac OS X

CKEditor в Ruby on Rails c загрузкой файлов через SWFUpload

4 комментариев

Достаточно часто появляется необходимость предоставить пользователям Вашего web-приложения возможность удобно редактировать содержимое. Для обычного пользователя оптимальным вариантом является использование WYSIWYG html-редактора. Таким решением является редактор CKEditor, интерфейс которого во многом подобен интерфейсам Microsoft Word и OpenOffice Writer.

CKEditor

Плагин rails-ckeditor предназначен для интеграции CKEditor'а в Rails-приложение. Также он включает в себя возможность загрузки изображений и файлов из интерфейса редактора через SWFUpload.

Первым шагом для начала использования CKEditor'а является установка плагина rails-ckeditor:

./script/plugin install git://github.com/galetahub/rails-ckeditor.git

Затем копируем необходимые файлы CKEditor'а и SWFUpload'а в директорию public/ с помощью команды:

rake ckeditor:install

Генерируем пример конфигурационного файла плагина:

rake ckeditor:config

В результате появится файл config/ckeditor.yml, который стоит немного отредактировать:

---
options
: &options
  swf_file_post_name
: "data"

  swf_image_file_types_description
: "Images"
  swf_image_file_types
: "*.jpg;*.jpeg;*.png;*.gif"
  swf_image_file_size_limit
: "5 MB"
  swf_image_file_upload_limit
: 10

  swf_types_description
: "Files"
  swf_file_types
: "*.doc;*.wpd;*.pdf;*.swf;*.xls"
  swf_file_size_limit
: "10 MB"
  swf_file_file_upload_limit
: 5

  public_uri
: "/system/ckeditor"
  public_path
: "system/ckeditor"

  file_manager_uri
: "/ckeditor/files"
  file_manager_upload_uri
: "/ckeditor/create?kind=file"

  file_manager_image_upload_uri
: "/ckeditor/create?kind=image"
  file_manager_image_uri
: "/ckeditor/images"

development
:
  <<
: *options

production
:
  <<
: *options

Для загрузки файлов и изображений плагин rails-ckeditor требует наличия моделей Asset, AttachmentFile и Picture. В качестве примера этих моделей можно использовать мой gist, в этом случае необходимо установить гем paperclip (gem install paperclip) и подключить его в config/environment.rb (config.gem 'paperclip').

После создания моделей, генерируем новую миграцию create_assets:

./script/generate migration create_assets

В ней создаем таблицу assets, в которой будет храниться информация о загруженных файлах и изображениях:

class CreateAssets < ActiveRecord::Migration
  def self.up
    create_table :assets do |t|
      t.string  :data_file_name
      t.string  :data_content_type
      t.integer :data_file_size

      t.integer :assetable_id
      t.string  :assetable_type, :limit=>25
      t.string  :type, :limit=>25

      t.integer :user_id

      t.timestamps
    end

    add_index "assets", ["assetable_id", "assetable_type", "type"], :name => "ndx_type_assetable"
    add_index "assets", ["assetable_id", "assetable_type"], :name => "fk_assets"
    add_index "assets", ["user_id"], :name => "fk_user"
  end

  def self.down
    drop_table :assets
  end
end

Выполняем созданную миграцию:

rake db:migrate

В случае если дефолтный роут map.connect ':controller/:action/:id' отключен, то в config/routes.rb необходимо добавить следующий роут:

map.connect ':controller/:action/:id', :controller => /ckeditor.*/

Для использования CKEditor добавляем на страницу подключение необходимого javascript файла:

<%= javascript_include_tag :ckeditor %>

Вставлять CKEditor на форме можно с помощью FormBuilder хелперов, например:

<% form_for @page do |form| %>
  ...
  <%= form.cktext_area :notes, :toolbar=>'Full', :width=>'400px', :heigth=>'200px' %>
  ...
  <%= form.cktext_area :content, :swf_params=>{:assetable_type=>'User', :assetable_id=>current_user.id} %>
  ...
<% end %>

Related posts:

  1. Cron и Ruby: использование Whenever
  2. Использование Sinatra внутри Rails Metal
  3. Hello world с помощью Ruby, Sinatra и Haml
  4. Sinatra и DataMapper: пример сервиса сокращения ссылок
  5. Запуск web-приложения на Sinatra с Phusion Passenger

Автор: lest

Май 12, 2010 в 19:01

Опубликовано в ruby

Метки: , , , , , ,

4 Responses to 'CKEditor в Ruby on Rails c загрузкой файлов через SWFUpload'

Subscribe to comments with RSS or TrackBack to 'CKEditor в Ruby on Rails c загрузкой файлов через SWFUpload'.

  1. Дякую за перегляд плагіну. Хочу нагадати, що доступна версія для Rails 3 http://github.com/galetahub/rails-ckeditor/tree/rails3.

    Також незабаром зроблю генерацію моделей для завантаження «create_assets» та пройдусь по багам.

    Igor Galeta

    13 Май 10 at 15:47

  2. http://github.com/woto/blog Я у себя в блоге использовал этот плагин.

    woto

    17 Май 10 at 18:57

  3. Спасибо за плагин.

    А как использовать assetable_type, assetable_id при просмотре закачанных файлов?

    Я никак не могу осознать место, где это впихнуть, чтобы просматривались аттачи только конкретного assetable

    Mox

    15 Май 11 at 18:35

  4. Немного разобрался по поводу assetable. Чтобы просматривать только нужные assets, нужно

    1) В параметрах ckeditor_textarea указать ckeditor_options => :ckeditor_options => { ‘filebrowserImageBrowseUrl’ => «/ckeditor/images/?assetable_type=MyAsset&assetable_id=#{@myasset.id}» }

    2) Небольшой патч для ckeditor_controller – если в лоб, то как-то так:

    if params[:assetable_type].blank? || params[:assetable_id].blank? @images = Ckeditor.image_model.find(:all, :order=>»id DESC») else @images = Ckeditor.image_model.find(:all, :conditions => [ '(assetable_type IS NULL AND assetable_id IS NULL) OR (assetable_type = ? AND assetable_id = ?)', params[:assetable_type], params[:assetable_id] ], :order => ‘id DESC’) end

    Mox

    15 Май 11 at 19:08

Leave a Reply