之前在rails开发中使用了ckeditor作为可视化编辑器,不过感觉ckeditor过于庞大,有很多不需要的功能,而且图片上传功能不好控制不同用户可以互相删除图片,感觉很不好。于是考虑更改可视化编辑器,多方考虑选择了bootstrap3-wysiwyg,但是这个编辑器无法实现图片上传功能,还有换行使用br而不是p标签不是很好。于是考虑自定义完善其功能。
个人原创,版权所有,转载请注明原文出处,并保留原文链接:
https://www.embbnux.com/2015/03/17/rails_use_bootstrap3-wysiwyg_with_carrierwave_picture_upload
一 bootstrap3-wysiwyg安装
这里使用bootstrap-wysihtml5-rails集成到rails中,安装和配置具体见该github.
在gemfile添加: gem ‘bootstrap-wysihtml5-rails‘,bundle install安装。
在app/assets/stylesheets/application.css添加
1 |
|
在app/assets/javascripts/application.js里添加
1 2 |
|
在要使用编辑器的地方添加”class=’wysihtml5′”,比如:
1 |
|
然后在js文件里面初始化编辑器:
1 2 3 4 5 6 7 8 9 |
|
这样应该就可以了但是现在没办法实现图片上传,图片只能够插入链接的方式,如下
上传图片功能还是很重要的,幸亏bootstrap3-wysiwyg提供了很好的扩展功能,可以自己实现上传功能.
二 使用carrierwave实现图片上传功能
首先要修改编辑器的图片弹窗,js配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
|
这样编辑器图片弹窗就会变成下面这样:
这只是前端view,controller和model层都得再实现
MODEL: Image
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
这里的图片上传使用carrierwave,具体使用请见该github readme
Controller:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
这里的controller我使用ajax提交post代码,这样体验比较好,上传成功后把图片的地址传回客户端,自动放在原来的插入图片链接处:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
这样上传功能基本就完成了,ajax关键要提供csrf-token参数,其他都没问题
最终效果可以到我开发的网站看: huaborn.com
三 替换br标签为p标签
这个编辑器如果你键盘按回车键,他是自动加入br标签,感觉比较丑,段落之间还是使用p比较好看
无意中发现要是原来文本编辑器里存在<p></p>它换行就会自动添加p标签而不是br标签。
所以最终使用下面代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 |
|