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轮换图片展示的步骤了.