NetCMS修改之四:擴展輪換幻燈片屬性(NorFilt),具有導讀顯示

    NetCMS有兩種幻燈片顯示方式:Flash幻燈片和輪換幻燈片。Flash幻燈片是通過將圖片新聞中的圖片合成Flash後再在頁面上顯示。輪換幻燈片則是使用腳本進行控制(準確地說,是使用VBScript)。

    其實,這兩種顯示形式差不多,只不過Flash幻燈片是通過Flash實現圖片的過渡效果,而輪換幻燈片是利用IE提供的Filter屬性實現圖片過渡效果的。

    鑑於輪換幻燈片是通過腳本控制Img標記的Src屬性及Div標記的Innerhtml屬性來實現圖片切換和標題切換的。因此就想實現在圖片右邊顯示新聞導讀,效果如下:

    輪換幻燈片的標籤定義如下:

    [NT:Loop,NT:SiteID=0,NT:LabelType=NorFilt,NT:Number=10,NT:ClassID=0,NT:isSub=true,NT:TitleNumer=25,NT:WCSS=css,NT:ShowTitle=true,
NT:FlashSize=參數1|參數2,NT:Target=_blank][/NT:Loop]

    各參數的意義請參看NetCMS官方網站對此標籤的說明(http://www.aspxcms.com/help/label/start.html#NorFilt)。

    現給其增加以下參數:

    NT:HashNaviContent:true或flase,是否顯示導讀。如果不顯示導讀,則與原來效果一致。

    NT:NaviContentWidth:導讀部分的寬度(px)

    NT:NaviTitleCSS:導讀部分標題的CSS樣式

    NT:NaviCntCSS:導讀部分內容的CSS樣式

 

    對NorFilt標籤的處理,是由NetCMS.Publish.LabelMass類中的Analyse_NorFilt()方法(NetCMS.Publish/Label/LabelMass_Method4.cs)進行處理的。現將改動後的Analyse_NorFilt()方法提供如下,增加或修改部分均做了註釋:

        /// <summary>
        /// 輪換幻燈片
        /// </summary>
        /// <returns></returns>
        public string Analyse_NorFilt()
        {
            string str_NorFilt = "";
            string str_ClassID = this.GetParamValue("NT:ClassID");
            string str_isSub = this.GetParamValue("NT:isSub");
            string str_TitleNumer = this.GetParamValue("NT:TitleNumer");
            string str_WCSS = this.GetParamValue("NT:WCSS");
            string str_ShowTitle = this.GetParamValue("NT:ShowTitle");
            string str_FlashSize = this.GetParamValue("NT:FlashSize");
            string str_Target = this.GetParamValue("NT:Target");

            // 以下由Whitewin於2009-4-21添加
            // 給NorFilt幻燈新聞增加右部的導讀。
            string str_HashNaviContent = this.GetParamValue("NT:HashNaviContent");//獲取導讀標記
            string str_NaviContentWidth = this.GetParamValue("NT:NaviContentWidth"); //獲取導讀部分寬度
            string str_NaviTitleCSS = this.GetParamValue("NT:NaviTitleCSS");   //獲取導讀部分標題樣式
            string str_NaviCntCSS = this.GetParamValue("NT:NaviCntCSS");   // 獲取導讀部分內容文本樣式
            // --------------------------------------------------------------------------------

            string SqlCondition = " Where [isRecyle]=0 And [isLock]=0 And [SiteID]='" + this.Param_SiteID + "' And [NewsType]=1 And SubString([NewsProperty],7,1)='1'";
            string SqlOrderBy = " Order By [CreatTime] Desc";

            #region 對欄目進行判斷
            DataTable dt = null;
            string Sql = string.Empty;
            if (str_ClassID == null || str_ClassID == "-1")
            {
                if (this._TemplateType == TempType.Class)
                {
                    if (str_isSub == "true")
                        SqlCondition += " And [ClassID] In (" + getChildClassID(this.Param_CurrentClassID) + ")";
                    Sql = "select top " + Param_Loop + " * from [" + DBConfig.TableNamePrefix + "News] " + SqlCondition + " And ClassID='" + this.Param_CurrentClassID + "' " + SqlOrderBy;
                }
                else
                {
                    Sql = "select top " + Param_Loop + " * from [" + DBConfig.TableNamePrefix + "News] " + SqlCondition + SqlOrderBy;
                }
            }
            else if (str_ClassID == "0")
            {
                Sql = "select top " + Param_Loop + " * from [" + DBConfig.TableNamePrefix + "News]" + SqlCondition + SqlOrderBy;
            }
            else
            {
                if (str_isSub == "true")
                    SqlCondition += " And [ClassID] In (" + getChildClassID(str_ClassID) + ")";
                Sql = "select top " + Param_Loop + " * from [" + DBConfig.TableNamePrefix + "News]" + SqlCondition + SqlOrderBy;
            }
            dt = CommonData.DalPublish.ExecuteSql(Sql);
            #endregion 對欄目進行判斷

            if (dt != null)
            {
                if (dt.Rows.Count < 2)
                {
                    str_NorFilt = "至少需要兩條幻燈新聞才能正確顯示幻燈效果";
                    return str_NorFilt;
                }
                string str_FlashWidth = " width='200'";
                string str_FlashHeight = " height='100'";

                if (str_FlashSize != null)
                {
                    string[] arr_FlashSize = str_FlashSize.Split('|');
                    str_FlashWidth = " width='" + arr_FlashSize[0].ToString() + "'";
                    str_FlashHeight = " height='" + arr_FlashSize[1].ToString() + "'";
                }
                if (str_WCSS != null)
                    str_WCSS = " class='" + str_WCSS + "'";
                if (str_Target != null)
                    str_Target = " target='" + str_Target + "'";

                string str_Imgstr = "";     // 圖片鏈接
                string str_Linkstr = "";    // 新聞鏈接
                string str_Txtstr = "";     // 標題鏈接
                string str_FirstTxt = "";   // 第一次顯示時的新聞標題

                // 以下由Whitewin於2009-4-21添加
                // 給NorFilt幻燈新聞增加右部的導讀。
                string str_NaviCnt = "";    // 導讀新聞內容
                string str_FirstNaviCnt = "";  // 第一次顯示時的導讀新聞內容
                string str_NaviTitle = "";  // 導讀新聞標題
                string str_FirstNaviTitle = ""; // 第一次顯示時的導讀新聞標題
                if (str_NaviTitleCSS != null)
                    str_NaviTitleCSS = " class='" + str_NaviTitleCSS + "'";
                if (str_NaviCntCSS !=null)
                    str_NaviCntCSS = " class='" + str_NaviCntCSS + "'";
                // ------------------------------------------------------------

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    PubClassInfo ci = CommonData.GetClassById(dt.Rows[i]["ClassID"].ToString());

                    string str_PicUrl = RelpacePicPath(dt.Rows[i]["PicURL"].ToString());
                    string str_Link = getNewsURL(dt.Rows[i]["isDelPoint"].ToString(), dt.Rows[i]["NewsID"].ToString(), dt.Rows[i]["SavePath"].ToString(), ci.SavePath + "/" + ci.SaveClassframe, dt.Rows[i]["FileName"].ToString(), dt.Rows[i]["FileEXName"].ToString());
                    string str_Txt = dt.Rows[i]["NewsTitle"].ToString();
                    string str_NaviCntTxt = dt.Rows[i]["NaviContent"].ToString();

                    // 以下由Whitewin於2009-4-21添加
                    // 給NorFilt幻燈新聞增加右部的導讀。
                    // 獲取完整新聞標題,用作導讀部分標題的提示
                    string uTitle = str_Txt;
                    // -----------------------------------------

                    if (str_TitleNumer != null)
                        str_Txt = NetCMS.Common.Input.GetSubString(str_Txt, Convert.ToInt32(str_TitleNumer));

                    if (str_PicUrl != "" && str_PicUrl != null)
                    {
                        if (str_Imgstr == "")
                        {
                            str_Imgstr += str_PicUrl;
                            str_Linkstr += str_Link;
                            str_Txtstr += "<a href='" + str_Link + "' " + str_Target + " " + str_WCSS + ">" + str_Txt + "</a>";
                            str_FirstTxt = str_Txtstr;
                            // 以下由Whitewin於2009-4-21添加
                            // 給NorFilt幻燈新聞增加右部的導讀。
                            // 處理導讀部分新聞標題
                            str_NaviTitle = "<a href='" + str_Link + "' title='" + uTitle +"' " + str_Target + " " + str_NaviTitleCSS + ">" + str_Txt + "</a>";
                            str_FirstNaviTitle = str_NaviTitle;
                            str_NaviCnt = str_NaviCntTxt + "<a href='" + str_Link + "' " + str_Target + " " + ">" + "[詳情]" + "</a>";   //處理導讀新聞內容
                            str_FirstNaviCnt = str_NaviCnt;
                            // --------------------------------------------------------------------------------

                        }
                        else
                        {
                            str_Imgstr += "," + str_PicUrl;
                            str_Linkstr += "," + str_Link;
                            str_Txtstr += ",<a href='" + str_Link + "' " + str_Target + " " + str_WCSS + ">" + str_Txt + "</a>";
                            // 以下由Whitewin於2009-4-21添加
                            // 給NorFilt幻燈新聞增加右部的導讀。
                            // 處理導讀部分新聞標題
                            str_NaviTitle += ",<a href='" + "' title='" + uTitle + "' " + str_Target + " " + str_NaviTitleCSS + ">" + str_Txt + "</a>";
                            str_NaviCnt += "<#NaviContent>" + str_NaviCntTxt + "<a href='" + str_Link + "' " + str_Target + " " + ">" + "[詳情]" + "</a>";    //處理導讀新聞內容
                            // --------------------------------------------------------------------------------
                        }
                    }
                }
                str_NorFilt += "<script language=/"vbscript/">" + newLine;

                // 以下由Whitewin於2009-4-21修改
                // 給NorFilt幻燈新聞增加右部的導讀。原句爲:
                // str_NorFilt += "Dim FileList,FileListArr,TxtList,TxtListArr,LinkList,LinkArr" + newLine;
                // 增加導讀內容數組的定義.注意導讀內容中不能出現<#NaviContent>
                str_NorFilt += "Dim FileList,FileListArr,TxtList,TxtListArr,LinkList,LinkArr,NaviTitleList,NaviTitleArr,NaviCntList,NaviCntArr" + newLine;
                // --------------------------------------------------------------------------------

                str_NorFilt += "FileList = /"" + str_Imgstr + "/"" + newLine;
                str_NorFilt += "LinkList = /"" + str_Linkstr + "/"" + newLine;
                str_NorFilt += "TxtList = /"" + str_Txtstr + "/"" + newLine;

                // 以下由Whitewin於2009-4-21添加
                // 給NorFilt幻燈新聞增加右部的導讀。
                // 處理導讀新聞
                str_NorFilt += "NaviCntList = /"" + str_NaviCnt + "/"" + newLine;
                str_NorFilt += "NaviCntArr = Split(NaviCntList,/"<#NaviContent>/")" + newLine;
                str_NorFilt += "NaviTitleList = /"" + str_NaviTitle + "/"" + newLine;
                str_NorFilt += "NaviTitleArr = Split(NaviTitleList,/",/")" + newLine;
                // --------------------------------------------------------------------------------

                str_NorFilt += "FileListArr = Split(FileList,/",/")" + newLine;
                str_NorFilt += "LinkArr = Split(LinkList,/",/")" + newLine;
                str_NorFilt += "TxtListArr = Split(TxtList,/",/")" + newLine;
                str_NorFilt += "Dim CanPlay" + newLine;
                str_NorFilt += "CanPlay = CInt(Split(Split(navigator.appVersion,/";/")(1),/" /")(2))>5" + newLine;
                str_NorFilt += "Dim FilterStr" + newLine;
                str_NorFilt += "FilterStr = /"RevealTrans(duration=2,transition=23)/"" + newLine;
                str_NorFilt += "FilterStr = FilterStr + /";BlendTrans(duration=2)/"" + newLine;
                str_NorFilt += "If CanPlay Then" + newLine;
                str_NorFilt += "FilterStr = FilterStr + /";progid:DXImageTransform.Microsoft.Fade(duration=2,overlap=0)/"" + newLine;
                str_NorFilt += "FilterStr = FilterStr + /";progid:DXImageTransform.Microsoft.Wipe(duration=3,gradientsize=0.25,motion=reverse)/"" + newLine;
                str_NorFilt += "Else" + newLine;
                str_NorFilt += "Msgbox /"幻燈片播放具有多種動態圖片切換效果,但此功能需要您的瀏覽器爲IE5.5或以上版本,否則您將只能看到部分的切換效果。/",64" + newLine;
                str_NorFilt += "End If" + newLine;
                str_NorFilt += "Dim FilterArr" + newLine;
                str_NorFilt += "FilterArr = Split(FilterStr,/";/")" + newLine;
                str_NorFilt += "Dim PlayImg_M" + newLine;
                str_NorFilt += "PlayImg_M = 5 * 1000  " + newLine;

                // 以下由Whitewin於2009-4-21添加
                // 給NorFilt幻燈新聞增加右部的導讀。
                // 有導讀時,輪換時間延長到原來的2倍
                if (str_HashNaviContent == "true")
                    str_NorFilt += "PlayImg_M = 2 * PlayImg_M  " + newLine;
                // --------------------------------------------------------------------------------

                str_NorFilt += "Dim I" + newLine;

                str_NorFilt += "I = 1" + newLine;
                str_NorFilt += "Sub ChangeImg" + newLine;
                str_NorFilt += "Do While FileListArr(I)=/"/"" + newLine;
                str_NorFilt += "I = I + 1" + newLine;
                str_NorFilt += "If I>UBound(FileListArr) Then I = 0" + newLine;
                str_NorFilt += "Loop" + newLine;
                str_NorFilt += "Dim J" + newLine;
                str_NorFilt += "If I>UBound(FileListArr) Then I = 0" + newLine;
                str_NorFilt += "Randomize" + newLine;
                str_NorFilt += "J = Int(Rnd * (UBound(FilterArr)+1))" + newLine;
                str_NorFilt += "Img.style.filter = FilterArr(J)" + newLine;
                str_NorFilt += "Img.filters(0).Apply" + newLine;
                str_NorFilt += "Img.Src = FileListArr(I)" + newLine;
                str_NorFilt += "Img.filters(0).play" + newLine;
                str_NorFilt += "Link.Href = LinkArr(I)" + newLine;
                if (str_ShowTitle == "true")
                {
                    str_NorFilt += "Txt.filters(0).Apply" + newLine;
                    str_NorFilt += "Txt.innerHTML = TxtListArr(I)" + newLine;
                    str_NorFilt += "Txt.filters(0).play" + newLine;
                }

                // 以下由Whitewin於2009-4-21添加
                // 給NorFilt幻燈新聞增加右部的導讀。
                if (str_HashNaviContent == "true")
                {
                    str_NorFilt += "NaviTitle.filters(0).Apply" + newLine;
                    str_NorFilt += "NaviTitle.innerHTML = NaviTitleArr(I)" + newLine;
                    str_NorFilt += "NaviTitle.filters(0).play" + newLine;

                    str_NorFilt += "NaviCnt.filters(0).Apply"+newLine;
                    str_NorFilt += "NaviCnt.innerHTML = NaviCntArr(I)"+newLine;
                    str_NorFilt += "NaviCnt.filters(0).play" + newLine;
                }
                // --------------------------------------------------------------------------------

                str_NorFilt += "I = I + 1" + newLine;
                str_NorFilt += "If I>UBound(FileListArr) Then I = 0" + newLine;
                str_NorFilt += "TempImg.Src = FileListArr(I)" + newLine;
                str_NorFilt += "TempLink.Href = LinkArr(I)" + newLine;
                str_NorFilt += "SetTimeout /"ChangeImg/", PlayImg_M,/"VBScript/"" + newLine;
                str_NorFilt += "End Sub" + newLine;
                str_NorFilt += "</SCRIPT>" + newLine;
                str_NorFilt += "<TABLE WIDTH=/"100%/" height=/"100%/" BORDER=/"0/" CELLSPACING=/"0/" CELLPADDING=/"0/">" + newLine;
                str_NorFilt += "<TR ID=/"NoScript/">" + newLine;
                str_NorFilt += "<TD Align=/"Center/" Style=/"Color:White/">對不起,圖片瀏覽功能需腳本支持,但您的瀏覽器已經設置了禁止腳本運行。請您在瀏覽器設置中調整有關安全選項。</TD>" + newLine;
                str_NorFilt += "</TR>" + newLine;

                // 以下由Whitewin於2009-4-21添加
                // 給NorFilt幻燈新聞增加右部的導讀。
                // 將原有圖片部分包含在表格中
                if (str_HashNaviContent == "true")
                {
                    str_NorFilt += "<tr><td><table WIDTH=/"100%/" height=/"100%/" BORDER=/"0/" CELLSPACING=/"0/" CELLPADDING=/"0/">" + newLine;
                    str_NorFilt += "<tr><td width=/"200px/"><table>" + newLine;
                }
                // --------------------------------------------------------------------------------

                str_NorFilt += "<TR Style=/"Display:none/" ID=/"CanRunScript/"><TD HEIGHT=/"100%/" Align=/"Center/" vAlign=/"Center/"><a id=/"Link/" " + str_Target + "><Img ID=/"Img/" " + str_FlashWidth + " " + str_FlashHeight + " Border=/"0/" ></a>" + newLine;
                str_NorFilt += "</TD></TR><TR Style=/"Display:none/"><TD><a id=TempLink ><Img ID=/"TempImg/" Border=/"0/"></a></TD></TR>" + newLine;
                if (str_ShowTitle == "true")
                {
                    str_NorFilt += "<TR><TD HEIGHT=/"100%/" Align=/"Center/" vAlign=/"Top/">" + newLine;
                    str_NorFilt += "<div ID=/"Txt/" style=/"PADDING-LEFT: 5px; Z-INDEX: 1; FILTER: progid:DXImageTransform.Microsoft.Fade(duration=1,overlap=0); POSITION:/" >" + str_FirstTxt + "</div>" + newLine;
                    str_NorFilt += "</TD></TR>" + newLine;
                }

                // 以下由Whitewin於2009-4-21添加
                // 給NorFilt幻燈新聞增加右部的導讀。
                // 添加導讀部分
                if (str_HashNaviContent == "true")
                {
                    str_NorFilt += "</table></td><td valign=/"top/"><table WIDTH=/""+str_NaviContentWidth+"/" height=/"100%/" BORDER=/"0/" CELLSPACING=/"0/" CELLPADDING=/"0/" >" + newLine;
                    str_NorFilt += "<tr><td><div id=/"NaviTitle/" style=/"PADDING-LEFT: 5px; Z-INDEX: 1;  text-align:center; FILTER: progid:DXImageTransform.Microsoft.Fade(duration=1,overlap=0); POSITION:/">" + str_FirstNaviTitle + "</div></td></tr>" + newLine;
                    str_NorFilt += "<tr><td>&nbsp;</td></tr>";
                    str_NorFilt += "<tr><td><div id=/"NaviCnt/" style=/"PADDING-LEFT: 5px; Z-INDEX: 1; FILTER: progid:DXImageTransform.Microsoft.Fade(duration=1,overlap=0); POSITION:/"" + str_NaviCntCSS + ">" + str_FirstNaviCnt + "</div></td></tr></table></td></tr></table></td></tr>" + newLine;
                }
                // --------------------------------------------------------------------------------

                str_NorFilt += "</TABLE>" + newLine;
                str_NorFilt += "<Script Language=/"VBScript/">" + newLine;
                str_NorFilt += "NoScript.Style.Display = /"none/"" + newLine;
                str_NorFilt += "CanRunScript.Style.Display = /"/"" + newLine;
                str_NorFilt += "Img.Src = FileListArr(0)" + newLine;
                str_NorFilt += "Link.Href = LinkArr(0)" + newLine;
                str_NorFilt += "SetTimeout /"ChangeImg/", PlayImg_M,/"VBScript/"" + newLine;
                str_NorFilt += "</Script>" + newLine;

                dt.Clear(); dt.Dispose();
            }
            else
            {
                str_NorFilt = "沒有幻燈片";
            }
            return str_NorFilt;
        }

    對NetCMS.Publish項目和NetCMS.Web重新生成後,將NetCMS.Web/Bin文件夾下的NetCMS.Publish.Dll文件複製到Web服務器對應的Bin文件夾下,替換掉原來的NetCMS.Publish.Dll文件即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章