[Rails 常用插件简介]BBCodeizer

是看到robbin的帖子提到这个插件,下载下来改了一下,使用感觉还不错

http://agilewebdevelopment.com/plugins/bbcodeizer
http://agtools.rubyforge.org/bbcodeizer/

BBCodeizer是用来将UBB代码转换为html的Rails插件,通常情况下,我们不喜欢客户能直接通过html编辑帖子或者发言,但是我们又不想局限于普通的text_area的输入框,总想着加点什么,譬如让用户可以调整字的大小,可以让用户插入图片,可以引用上面用户的言语,可以.....

那太好了,也许BBCodeizer就是你想要的插件之一

一:安装
在linux/unix下可以通过如下的方式安装

script/plugin install svn://rubyforge.org/var/svn/agtools/plugins/bbcodeizer



windows

ruby script/plugin install svn://rubyforge.org/var/svn/agtools/plugins/bbcodeizer

ok,一切都好了,下面可以开始使用了

二:使用
在view里面,我们只需要调用BBCodeizeHelper的bbcodeize即可

<%=bbcodeize 'http://www.google.com/intl/en_ALL/images/logo.gif'%>


我们查看 /vendor/plugins/bbcodeizer/lib/bbcodeize_helper.rb代码 发现其实就是调用
BBCodeizer.bbcodeize



require 'bbcodeizer'

module BBCodeizeHelper
# Parses all bbcode in +text+ and returns a new HTML-formatted string.
def bbcodeize(text)
BBCodeizer.bbcodeize(text)
end
end


在controller中,也可以之直接使用

render :text => BBCodeizer.bbcodeize 'http://www.google.com/intl/en_ALL/images/logo.gif'


三:改进
也许你觉得BBCodeizer输出不太符合你所想的,也许你觉得可用的格式太少,想增强他的功能,其实很简单
查看/vendor/plugins/bbcodeizer/lib/bbcodeizer.rb,目前他支持的格式都在这里,就这么简单。



#: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>' ]
}



你还想.... (有什么想法,大家讨论:))

四:增强
在BBCodeizer提及到的WhiteListHelper是个很不错的工具,去除掉不安全的代码。我们可以在helper中加上如下的代码

def cc(text)
white_list(simple_format(auto_link(bbcodeize(h(text)))))
end


在页面上调用

<%=cc '内容'%>

即可

注:auto_link 是自动的识别正文中的链接,譬如http,email

五:参考
目前BBCodeizer支持:
[u]text[/u]

生成
 <u>text</u>


 [b]text[/b]

生成
<strong>text</strong>



[i]text[/i]

生成
<em>text</em>


[img]http://example.com/image.gif[/img]

生成
<img src="http://example.com/image.gif" />


[email=joe@example.com]Joe Example[/email]
[email]joe@example.com[/email]


生成
<a href="mailto:joe@example.com">Joe Example</a>
<a href="mailto:joe@example.com">joe@example.com</a>



 [code]bbcodeize(string)[\/code]

生成
<pre>bbcodeize(string)</pre>


[url=http://www.google.com]Google[/url]
[url]http://www.google.com[/url]

生成
<a href="http://www.google.com">Google</a>
<a href="http://www.google.com">http://www.google.com</a>



[quote="Shakespeare"]To be or not to be[/quote]
[quote]That is the question[/quote]

生成
<blockquote><cite>Shakespeare wrote:</cite><br />To be or not to be</blockquote>
<blockquote>That is the question</blockquote>



[size=32]Big Text[/size]

生成
<span style="font-size: 32px">Big Text</span>


[color=red]Red Text[/color] [color=#ABCDEF]Alphabet-colored Text[/color]

生成

<span style="color: red">Red Text</span>
<span style="color: #ABCDEF">Alphabet Colored Text</span>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值