2007-08-24
[Rails 常用插件简介]BBCodeizer
关键字: rails plugin bbcodeizer
是看到robbin的帖子提到这个插件,下载下来改了一下,使用感觉还不错
http://agilewebdevelopment.com/plugins/bbcodeizer
http://agtools.rubyforge.org/bbcodeizer/
BBCodeizer是用来将UBB代码转换为html的Rails插件,通常情况下,我们不喜欢客户能直接通过html编辑帖子或者发言,但是我们又不想局限于普通的text_area的输入框,总想着加点什么,譬如让用户可以调整字的大小,可以让用户插入图片,可以引用上面用户的言语,可以.....
那太好了,也许BBCodeizer就是你想要的插件之一
一:安装
在linux/unix下可以通过如下的方式安装
[code] script/plugin install svn://rubyforge.org/var/svn/agtools/plugins/bbcodeizer [/code]
windows
[code] ruby script/plugin install svn://rubyforge.org/var/svn/agtools/plugins/bbcodeizer [/code]
ok,一切都好了,下面可以开始使用了
二:使用
在view里面,我们只需要调用BBCodeizeHelper的bbcodeize即可
[code] <%=bbcodeize 'http://www.google.com/intl/en_ALL/images/logo.gif'%> [/code]
我们查看 /vendor/plugins/bbcodeizer/lib/bbcodeize_helper.rb代码 发现其实就是调用
[code]BBCodeizer.bbcodeize[/code]
[code] require 'bbcodeizer' module BBCodeizeHelper # Parses all bbcode in +text+ and returns a new HTML-formatted string. def bbcodeize(text) BBCodeizer.bbcodeize(text) end end [/code]
在controller中,也可以之直接使用
[code] render :text => BBCodeizer.bbcodeize 'http://www.google.com/intl/en_ALL/images/logo.gif' [/code]
三:改进
也许你觉得BBCodeizer输出不太符合你所想的,也许你觉得可用的格式太少,想增强他的功能,其实很简单
查看/vendor/plugins/bbcodeizer/lib/bbcodeizer.rb,目前他支持的格式都在这里,就这么简单。
[code] #:nodoc: Tags = { :start_code => [ /\[code\]/i, '<pre>' ], :end_code => [ /\[\/code\]/i, '</pre>' ], :start_quote => [ /\[quote(?:=".*?")?\]/i, nil ], :start_quote_with_cite => [ /\[quote="(.*?)"\]/i, '<blockquote><cite>\1 wrote:</cite><br />' ], :start_quote_sans_cite => [ /\[quote\]/i, '<blockquote>' ], :end_quote => [ /\[\/quote\]/i, '</blockquote>' ], :bold => [ /\[b\](.+?)\[\/b\]/i, '<strong>\1</strong>' ], :italic => [ /\[i\](.+?)\[\/i\]/i, '<em>\1</em>' ], :underline => [ /\[u\](.+?)\[\/u\]/i, '<u>\1</u>' ], :email_with_name => [ /\[email=(.+?)\](.+?)\[\/email\]/i, '<a href="mailto:\1">\2</a>' ], :email_sans_name => [ /\[email\](.+?)\[\/email\]/i, '<a href="mailto:\1">\1</a>' ], :url_with_title => [ /\[url=(.+?)\](.+?)\[\/url\]/i, '<a href="\1">\2</a>' ], :url_sans_title => [ /\[url\](.+?)\[\/url\]/i, '<a href="\1">\1</a>' ], :image => [ /\[img\](.+?)\[\/img\]/i, '<img src="\1" />' ], :size => [ /\[size=(\d{1,2})\](.+?)\[\/size\]/i, '<span style="font-size: \1px">\2</span>' ], :color => [ /\[color=([^;]+?)\](.+?)\[\/color\]/i, '<span style="color: \1">\2</span>' ] } [/code]
你还想.... (有什么想法,大家讨论:))
四:增强
在BBCodeizer提及到的WhiteListHelper是个很不错的工具,去除掉不安全的代码。我们可以在helper中加上如下的代码
[code] def cc(text) white_list(simple_format(auto_link(bbcodeize(h(text))))) end [/code]
在页面上调用
[code] <%=cc '内容'%> [/code]
即可
注:auto_link 是自动的识别正文中的链接,譬如http,email
五:参考
目前BBCodeizer支持:
[code]text[/code]
生成
[code] <u>text</u>[/code]
[code] text[/code]
生成
[code]<strong>text</strong>[/code]
[code]text[/code]
生成
[code]<em>text</em>[/code]
[code]
[/code]
生成
[code]<img src="http://example.com/image.gif" />[/code]
[code]Joe Example joe@example.com[/code]
生成
[code]<a href="mailto:joe@example.com">Joe Example</a> <a href="mailto:joe@example.com">joe@example.com</a>[/code]
[code] [code]bbcodeize(string)[\/code][/code]
生成
[code]<pre>bbcodeize(string)</pre>[/code]
[code]Google http://www.google.com [/code]
生成
[code]<a href="http://www.google.com">Google</a> <a href="http://www.google.com">http://www.google.com</a>[/code]
[code]
生成
[code] <blockquote><cite>Shakespeare wrote:</cite><br />To be or not to be</blockquote> <blockquote>That is the question</blockquote>[/code]
[code]Big Text[/code]
生成
[code]<span style="font-size: 32px">Big Text</span>[/code]
[code]Red Text Alphabet-colored Text[/code]
生成
[code] <span style="color: red">Red Text</span> <span style="color: #ABCDEF">Alphabet Colored Text</span>[/code]
http://agilewebdevelopment.com/plugins/bbcodeizer
http://agtools.rubyforge.org/bbcodeizer/
BBCodeizer是用来将UBB代码转换为html的Rails插件,通常情况下,我们不喜欢客户能直接通过html编辑帖子或者发言,但是我们又不想局限于普通的text_area的输入框,总想着加点什么,譬如让用户可以调整字的大小,可以让用户插入图片,可以引用上面用户的言语,可以.....
那太好了,也许BBCodeizer就是你想要的插件之一
一:安装
在linux/unix下可以通过如下的方式安装
[code] script/plugin install svn://rubyforge.org/var/svn/agtools/plugins/bbcodeizer [/code]
windows
[code] ruby script/plugin install svn://rubyforge.org/var/svn/agtools/plugins/bbcodeizer [/code]
ok,一切都好了,下面可以开始使用了
二:使用
在view里面,我们只需要调用BBCodeizeHelper的bbcodeize即可
[code] <%=bbcodeize 'http://www.google.com/intl/en_ALL/images/logo.gif'%> [/code]
我们查看 /vendor/plugins/bbcodeizer/lib/bbcodeize_helper.rb代码 发现其实就是调用
[code]BBCodeizer.bbcodeize[/code]
[code] require 'bbcodeizer' module BBCodeizeHelper # Parses all bbcode in +text+ and returns a new HTML-formatted string. def bbcodeize(text) BBCodeizer.bbcodeize(text) end end [/code]
在controller中,也可以之直接使用
[code] render :text => BBCodeizer.bbcodeize 'http://www.google.com/intl/en_ALL/images/logo.gif' [/code]
三:改进
也许你觉得BBCodeizer输出不太符合你所想的,也许你觉得可用的格式太少,想增强他的功能,其实很简单
查看/vendor/plugins/bbcodeizer/lib/bbcodeizer.rb,目前他支持的格式都在这里,就这么简单。
[code] #:nodoc: Tags = { :start_code => [ /\[code\]/i, '<pre>' ], :end_code => [ /\[\/code\]/i, '</pre>' ], :start_quote => [ /\[quote(?:=".*?")?\]/i, nil ], :start_quote_with_cite => [ /\[quote="(.*?)"\]/i, '<blockquote><cite>\1 wrote:</cite><br />' ], :start_quote_sans_cite => [ /\[quote\]/i, '<blockquote>' ], :end_quote => [ /\[\/quote\]/i, '</blockquote>' ], :bold => [ /\[b\](.+?)\[\/b\]/i, '<strong>\1</strong>' ], :italic => [ /\[i\](.+?)\[\/i\]/i, '<em>\1</em>' ], :underline => [ /\[u\](.+?)\[\/u\]/i, '<u>\1</u>' ], :email_with_name => [ /\[email=(.+?)\](.+?)\[\/email\]/i, '<a href="mailto:\1">\2</a>' ], :email_sans_name => [ /\[email\](.+?)\[\/email\]/i, '<a href="mailto:\1">\1</a>' ], :url_with_title => [ /\[url=(.+?)\](.+?)\[\/url\]/i, '<a href="\1">\2</a>' ], :url_sans_title => [ /\[url\](.+?)\[\/url\]/i, '<a href="\1">\1</a>' ], :image => [ /\[img\](.+?)\[\/img\]/i, '<img src="\1" />' ], :size => [ /\[size=(\d{1,2})\](.+?)\[\/size\]/i, '<span style="font-size: \1px">\2</span>' ], :color => [ /\[color=([^;]+?)\](.+?)\[\/color\]/i, '<span style="color: \1">\2</span>' ] } [/code]
你还想.... (有什么想法,大家讨论:))
四:增强
在BBCodeizer提及到的WhiteListHelper是个很不错的工具,去除掉不安全的代码。我们可以在helper中加上如下的代码
[code] def cc(text) white_list(simple_format(auto_link(bbcodeize(h(text))))) end [/code]
在页面上调用
[code] <%=cc '内容'%> [/code]
即可
注:auto_link 是自动的识别正文中的链接,譬如http,email
五:参考
目前BBCodeizer支持:
[code]text[/code]
生成
[code] <u>text</u>[/code]
[code] text[/code]
生成
[code]<strong>text</strong>[/code]
[code]text[/code]
生成
[code]<em>text</em>[/code]
[code]
[/code]
生成
[code]<img src="http://example.com/image.gif" />[/code]
[code]Joe Example joe@example.com[/code]
生成
[code]<a href="mailto:joe@example.com">Joe Example</a> <a href="mailto:joe@example.com">joe@example.com</a>[/code]
[code] [code]bbcodeize(string)[\/code][/code]
生成
[code]<pre>bbcodeize(string)</pre>[/code]
[code]Google http://www.google.com [/code]
生成
[code]<a href="http://www.google.com">Google</a> <a href="http://www.google.com">http://www.google.com</a>[/code]
[code]
Shakespeare 写道
To be or not to be
引用
That is the question
[/code]
生成
[code] <blockquote><cite>Shakespeare wrote:</cite><br />To be or not to be</blockquote> <blockquote>That is the question</blockquote>[/code]
[code]Big Text[/code]
生成
[code]<span style="font-size: 32px">Big Text</span>[/code]
[code]Red Text Alphabet-colored Text[/code]
生成
[code] <span style="color: red">Red Text</span> <span style="color: #ABCDEF">Alphabet Colored Text</span>[/code]
评论
glchengang
2007-08-27
javaeye是有,看来得施展copy大法了。我还以为插件里自带了helper方法直接生成
xxj
2007-08-26
这个我到没关注,但是资源就在眼前,javaeye就是一个例子啊
你看回复的页面上面不就是吗?
glchengang
2007-08-25
怎么显示页面上的BBCodeizer按钮呢?难道要自己一个个写吗。
发表评论
- 浏览: 103322 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
我的相册
2008-6-24 8-00-01.png
共 59 张
共 59 张
最近加入圈子
最新评论
-
无聊,无题
那么多数字无聊进去的……
-- by mmiwwcom -
无聊,无题
身份证号码?
-- by mmiwwcom -
Code Review&JRuby on Rai ...
我悄悄的看看
-- by mmiwwcom -
DM & Merb 快速体验
尝试安装的时候发现DM无法在win32的平台上通过gem安装?
-- by yy77 -
DM & Merb 快速体验
Raecoo 写道Merb的精简,是要看以什么样的角度去看待了 Merb的目标 ...
-- by neodoxy






评论排行榜