JACKY SUN

Good Good Study, Day Day Up.

HiForums(Asp.Net Forums)开发指南(四):如何给FreeTextBox控件增加自定义工具栏按钮

来源:原创 发表时间:2006-07-19 22:44:00 查看:886 评论:0

今天主要讲几个小问题,给编辑器增加新的按钮,这里用的比较简单的方法,大家可以参考增加自己需要的工具栏:

增加FTB工具栏按钮主要是继承FreeTextBoxControls.ToolbarButton;
这次要增加5个按钮,分别为增加WMP音频,WMP视频,REALONE音频,REALONE视频以及FLASH按钮;

1、首先增加资源文件,打开languages/zh-CN/Resources.xml,增加如下资源:

<resource name = "CreateEditPost_FTB_FlashButton">插入Flash文件(.swf)resource>
<resource name = "CreateEditPost_FTB_RPAButton">插入RealPlayer音频文件resource>
<resource name = "CreateEditPost_FTB_RPVButton">插入RealPlayer视频文件resource>        
<resource name = "CreateEditPost_FTB_WMAButton">插入Windows Media Player音频文件resource>
<resource name = "CreateEditPost_FTB_WMVButton">插入Windows Media Player视频文件resource>


2、准备解析对应内容的正则表达式,看下面代码,直接有注释(将该代码插入到Components/Components/Transforms.cs的BBcodeToHtml方法的最下面)

/*
            表达式:[rpa play=true]rpaUrl[/rpa]
            说明:     支持realplayer的音频,
            参数:    play参数为true或false,是否自动开始播放
                    rpaUrl为音频文件地址    
            
*/

            encodedString 
= Regex.Replace(encodedString,
                                          
@"\[rpa[ ]play=((true|false))\](\S*)\[/rpa\]",
                                          
""
                                              
+ ""$3\">"
                                              
+ ""
                                              
+ ""
                                              
+ ""
                                              
+ "
"$3\" target=_blank>$3",
                                          RegexOptions.IgnoreCase);

            
/*
             表达式:[rpv play=true,width=100,height=200]rpvUrl[/rpv]
            说明:     支持realplayer的视频,
            参数:    play参数为true或false,是否自动开始播放
                    width:视频文件宽度
                    height:食品文件高度
                    rpvUrl为视频文件地址    
            
*/

            encodedString 
= Regex.Replace(encodedString,
                                          
@"\[rpv[ ]play=((true|false)),width=(\d*),height=(\d*)\](\S*)\[/rpv\]",
                                          
""
                                              
+ ""$5\">"
                                              
+ ""
                                              
+ ""
                                              
+ ""
                                              
+ "
"
                                              
+ ""
                                              
+ ""$5\">"
                                              
+ ""
                                              
+ ""
                                              
+ ""
                                              
+ "
"$5\" target=_blank>$5",
                                          RegexOptions.IgnoreCase);

            
/*             
            表达式:[wma play=true]wmaUrl[/wma]
            说明: 支持windows media player的音频,
            参数:    play参数为true或false,是否自动开始播放
                    wmaUrl为音频文件地址    
            
*/

            encodedString 
= Regex.Replace(encodedString,
                                          
@"\[wma[ ]play=((true|false))\](\S*)\[/wma\]",
                                          
""
                                              
+ ""
                                              
+ ""
                                              
+ ""$3\">"
                                              
+ ""$3\" width=500 height=50>"
                                              
+ "
"$3\" target=_blank>$3",
                                          RegexOptions.IgnoreCase);


            
/*             
            表达式:[wmv play=true,width=100,height=200]wmvUrl[/wmv]
            说明:     支持windows media player的视频
            参数:    play参数为true或false,是否自动开始播放
                    width:视频文件宽度
                    height:食品文件高度
                    wmvUrl为视频文件地址    
            
*/

            encodedString 
= Regex.Replace(encodedString,
                                          
@"\[wmv[ ]play=((true|false)),width=(\d*),height=(\d*)\](\S*)\[/wmv\]",
                                          
""
                                              
+ ""
                                              
+ ""
                                              
+ ""
                                              
+ ""
                                              
+ ""
                                              
+ ""$5\" width=$3 height=$4>"
                                              
+ ""
                                              
+ "
"$5\" target=_blank>$5",
                                          RegexOptions.IgnoreCase);

            
/*
            表达式:[flash width=500,height=400]url[/flash]
            说明:    支持flash
            参数:    width为flash宽度
                    height为flash高度
                    url为flash的地址    
            
*/

            encodedString 
= Regex.Replace(encodedString,
                                          
@"\[flash[ ]width=(\d*),height=(\d*)\](\S*)\[/flash\]",
                                          
""http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0\" "
                                              + " classid=\"clsid:d27CDB6E-AE6D-11cf-96B8-444553540000\" "
                                              
+ "width=$1 height=$2>"
                                              
+ ""$3\">"
                                              
+ ""
                                              
+ ""$3\" width=$1 height=$2 quality=high name=index type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"/>"
                                              + ""
                                              
+ "
"$3\" target=_blank>$3",
                                          RegexOptions.IgnoreCase);


 

3、为了防止程序将UBB代码作为表情符替换,修改FormatPost方法,具体看代码说明即可,主要是调换一下顺序:

public static string FormatPost(string rawPostBody, PostType postType, bool allowCustomTransforms)
        
{
            
string formattedPost = rawPostBody;

            
// Perform HTML Encoding of any tag elements, if not PostType.HTML
            
//
            if (postType != PostType.HTML)
            
{
                formattedPost 
= HttpUtility.HtmlEncode(formattedPost);
                
if (postType != PostType.Poll)
                    formattedPost 
= formattedPost.Replace("\n", Globals.HtmlNewLine);
            }


            
// Remove any script code
            
//
            formattedPost = Transforms.StripScriptTags(formattedPost);

            
// Fix to reverse certain items that were HtmlEncoded above
            
//
            formattedPost = UnHtmlEncode(formattedPost);

            
// Peform specialized transforms first.
            
//
            if (allowCustomTransforms)
            
{
                formattedPost 
= EmoticonTransforms(formattedPost);
                formattedPost 
= PerformSpecializedTransforms(formattedPost);
            }


            
//edited by jacky 
            
//2004-10-2
            
//将其从allowCustomTransforms上移动到下,防止转换ubb生成后的代码
            
// Do BBCode transform, if any
            
//
            formattedPost = BBcodeToHtml(formattedPost);

            
if (postType == PostType.Poll)
            
{
                ArrayList voteOptions 
= BodyToVoteOptions(formattedPost);

                formattedPost 
= CreateVoteXml(voteOptions).OuterXml;

            }


            
return formattedPost;
        }


 

4、基础工作已经做完,下面增加FTB按钮:
1)FlashButton, 在Controls/FreeTextBox下增加一文件FlashButton.cs,代码如下:

using System;
using AspNetForums.Components;
using FreeTextBoxControls;

namespace AspNetForums.Controls
{
    
/// 
    
/// FlashButton 的摘要说明。
    
/// 

    public class FlashButton : ToolbarButton
    
{
        
public FlashButton():base(ResourceManager.GetString("CreateEditPost_FTB_FlashButton"),"FTB_FlashUBB","button_flash"
    
{
        ScriptBlock 
= @"function FTB_FlashUBB(ftbName) {    
    FTB_SurroundText(ftbName,'[flash width=500,height=400]Flash文件地址[/flash]','');
}
";
        }

    }

}

2)RPAButton,插入RealPlayer音频文件,在Controls/FreeTextBox下增加一文件RPAButton.cs,代码如下:

using System;
using AspNetForums.Components;
using FreeTextBoxControls;

namespace AspNetForums.Controls
{
    
/// 
    
/// RPAButton 的摘要说明。
    
/// 

    public class RPAButton : ToolbarButton
    
{
        
public RPAButton():base(ResourceManager.GetString("CreateEditPost_FTB_RPAButton"),"FTB_RPA","button_rpa"
        
{
            ScriptBlock 
= @"function FTB_RPA(ftbName) {    
    FTB_SurroundText(ftbName,'[rpa play=true]RealPlayerAudio文件地址[/rpa]','');
}
";
        }

    }

}

3)RPVButton,在同上文件夹中,增加RPVButton.cs文件,代码如下:

using AspNetForums.Components;
using FreeTextBoxControls;

namespace AspNetForums.Controls
{
    
/// 
    
/// RPVButton 的摘要说明。
    
/// 

    public class RPVButton : ToolbarButton
    
{
        
public RPVButton() : base(ResourceManager.GetString("CreateEditPost_FTB_RPVButton"), "FTB_RPV""button_rpv")
        
{
            ScriptBlock 
= @"function FTB_RPV(ftbName) {    
    FTB_SurroundText(ftbName,'[rpv play=true,width=500,height=350]RealPlayerVedio文件地址[/rpv]','');
}
";
        }

    }

}

4)WMAButton,用于插入Windows Media 音频文件,增加WMAButton.cs文件,代码如下:

using AspNetForums.Components;
using FreeTextBoxControls;

namespace AspNetForums.Controls
{
    
/// 
    
/// WMAButton 的摘要说明。
    
/// 

    public class WMAButton : ToolbarButton
    
{
        
public WMAButton() : base(ResourceManager.GetString("CreateEditPost_FTB_WMAButton"), "FTB_WMA""button_wma")
        
{
            ScriptBlock 
= @"function FTB_WMA(ftbName) {    
    FTB_SurroundText(ftbName,'[wma play=true]WindowsMediaAudio文件地址[/wma]','');
}
";
        }

    }

}

5)WMVButton,在同上目录下增加WMVButton.cs,代码如下:

using System;
using AspNetForums.Components;
using FreeTextBoxControls;

namespace AspNetForums.Controls
{
    
/// 
    
/// WMVButton 的摘要说明。
    
/// 

    public class WMVButton : ToolbarButton
    
{
        
public WMVButton() : base(ResourceManager.GetString("CreateEditPost_FTB_WMVButton"), "FTB_WMV""button_wmv")
        
{
            ScriptBlock 
= @"function FTB_WMV(ftbName) {    
    FTB_SurroundText(ftbName,'[wmv play=true,width=500,height=350]WindowsMediaVideo文件地址[/wmv]','');
}
";
        }

    }

}


5、最后一步,将这些按钮添加到页面上,打开themes/default/skins/View-CreateEditPost.ascx,找到FTB的代码,在标签中,插入以下代码:

<FTB:Toolbar>
                                    
<Forums:FlashButton runat="server"/>        
                                    
<Forums:RPAButton runat="server"/>
                                    
<Forums:RPVButton runat="server"/>
                                    
<Forums:WMAButton runat="server"/>
                                    
<Forums:WMVButton runat="server"/>                                                                
                                
FTB:Toolbar>


 

OK,一切都已经完成,当然这里采用的是插入的比较简单的方法,也可以修改为采用向导方式由用户输入文件地址、视频文件大小、是否自动播放等。





姓名:  
邮件: 不在页面显示,作者回复后将通过邮件通知您
网站:
验证码:  
内容: