追求新生活 名字2008

活着的意义

flash新闻轮转:图片和链接从数据库读取之我见

flash新闻轮转经常见到,为了维护的便捷性,我是如何解决该问题的呢?

1、新闻页面我是利用javascript和aspx结合的如:假如页面中需要用到一个get_title变量,则它是如何从aspx中传递过来的呢?看看下:

<title>
        <%=get_title()%>
     </title>

在打开新闻页面中写个函数,要利用DataSet哦,accessGetDataSet则原来就写好的函数

protected String get_title()  //新闻的标题
    {
        OleDbConnection Con = dbcen.Acc_Con();
        Con.Open();
        string title = dbcen.accessGetDataSet("select * from db_news where new_no = " + int.Parse(Request.QueryString["new_no"].ToString()) + "").Tables[0].Rows[0]["new_title"].ToString();  //如何获得标题可以在javascript中调用
        Conn.Close();
        return title;
    }

刚才是热身,现在正式开始做新闻系统中的flash展示图片来了

1:必须的文件pixviewer.swf就可以了,

后来的代码

<script type="text/javascript">
<!--
 var interval_time=2;
 var focus_width=160;
 var focus_height=120;
 var text_height=0;
 var text_align="center";
 var swf_height = focus_height+text_height;
 var swfpath="/pic/pixviewer.swf";
  //var pics= 'testimg/1.jpg|testimg/2.jpg'; 

//var links='www.baidu.com|www.163.com';
 var pics='<%=get_pic()%>';
 var links='<%=get_address()%>';//注意一定要用单引号,否则不行

 var texts="||";
 
 document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+ focus_width +'" height="'+ swf_height +'">');
 document.write('<param name="movie" value="'+swfpath+'"><param name="quality" value="high"><param name="bgcolor" value="#ffffff">');
 document.write('<param name="menu" value="false"><param name=wmode value="opaque">');
 document.write('<param name="FlashVars" value="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'&text_align='+text_align+'&interval_time='+interval_time+'">');
 document.write('<embed src="'+swfpath+'" wmode="opaque" FlashVars="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'&text_align='+text_align+'&interval_time='+interval_time+'" menu="false" bgcolor="#ffffff" quality="high" width="'+ focus_width +'" height="'+ swf_height +'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
 document.write('</object>');
//-->
</script>

以上主要关键就是“//”两行被颜色行替换了,因为这里需要的是图片地址,不是流。所以必须把图片用流输出到页面,然后把显示图片的url给它。

var pics='<%=get_pic()%>';
 var links='<%=get_address()%>'; 如何的来的呢?

 当然在首页就定义静态变量

public static String[] news_pic = new string[20];
    public static String[] news_link = new string[20];

然后在页面load事件中

con.open();

int news_link_count = dbcen.accessGetDataSet("select * from db_news where NewsType='链接新闻'").Tables[0].Rows.Count;//判断符合的记录数目
                string sql_news_pic;
                if (news_link_count >=5)
                {
                    sql_news_pic = "select top 6 * from db_news where NewsType='链接新闻'order by new_no desc";
                }
                else
                {
                    sql_news_pic = "select top " + news_link_count.ToString() + " * from db_news where NewsType='链接新闻'order by news_no desc";
                 }
                for (int i = 1; i <= news_link_count ;i++ )
                {
                    news_pic[i] = dbcen.accessGetDataSet(sql_news_pic).Tables[0].Rows[i-1]["news_pic"].ToString().Replace("\\", "/");//替换字符串以正确显示
                    news_link[i] = dbcen.accessGetDataSet(sql_news_pic).Tables[0].Rows[i-1]["newspic_link"].ToString() + dbcen.accessGetDataSet(sql_news_pic).Tables[0].Rows[i-1]["news_no"].ToString();//附值
                 }

 con.close();

最后,还需要写两个函数

 protected String get_address()
    {
        string str_address = news_link[1] + "|" + news_link[2] + "|" + news_link[3] + "|" + news_link[4] + "|" + news_link[5];//多个字段相加
        return (str_address);
     }
    protected string get_pic()
    {
        string str_pic = news_pic[1] + "|" + news_pic[2] + "|" + news_pic[3] + "|" + news_pic[4] +"|" + news_pic[5]; //多个字段相加
        return(str_pic);
    }

以允许javascript调用。

这样思路解决了,也就搞算好了。该过程中还用到一些小技巧如替换“\”换成“/”才可以正确显示图片,news_link[i] = dbcen.accessGetDataSet(sql_news_pic).Tables[0].Rows[i-1]["newspic_link"].ToString() + dbcen.accessGetDataSet(sql_news_pic).Tables[0].Rows[i-1]["news_no"].ToString();

因为写入库的时候只能先写入链接地址的前端,后读取的时候再读出new_no再结合为一个实际的链接.

经过测试,效果和速度比较理想,好好思考下,以后就有进步.

如果想:页面上所有的链接都在新窗口打开则在代码中加入

<head>
    <base target="_blank">
    </head>

    注意事项:< base >必须写在< head >标记里,但是这有时候又限制了一些功能的,如果在aspx中,你用gridview控件,你有一列是做超级连接的,则在代码中最好是这样

<asp:HyperLinkField   DataNavigateUrlFields="list.aspx?id={0}"     Target="_blank"   DataNavigateUrlFormatString="id"   DataTextField="name"/>

Target="_blank" 加入就ok啦.可以在新的窗口打开超连接了。

如果还不明白,请看本页另一篇,详细介绍flash轮换图片展示的步骤了.

posted on 2009-05-15 17:59  pyman  阅读(1406)  评论(0编辑  收藏  举报

导航