[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 protected]]Joe Example[/email]
[email][email protected][/email]


生成
<a href="mailto:[email protected]">Joe Example</a>
<a href="mailto:[email protected]">[email protected]</a>



 
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>



  
Shakespeare 写道
To be or not to be
引用
That is the question

生成
<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>

你可能感兴趣的:(SVN,Google,Flash,Ruby,Rails)