BT话痨群的后台中有一个彩蛋,只有资深BT才知道。
这个彩蛋是肾上开发的,目的是测试CI和Flex(Flash)的结合。
在这个彩蛋中,解决了一下几个问题:
- 用CI生成Flex需要的数据(XML格式);
- 用Flex的HTTPService来获得数据并呈现;
- 用CI来包含生成的SWF文件并最终以Nice URI呈现。
一、用CI生成Flex需要的数据(XML格式)
function xml_weekday()
{
$timespan=time()-mktime(8,0,0,2,22,2010);
$this->load->model('Sitemodel');
$data['qd']=$this->Sitemodel->getNoticeCountWeekday();
$this->load->view('welcome_xml_weekday_view', $data);
}
请注意,我这里用了CI中控制器(Controller)来实现数据的获得,而且复用了models里的方法。这样做的好处是,在Flex中可以用一个URI来获取数据。 数据的输出是用load->view实现的,而在那个view文件中,我只是简单的按照XML格式输出数据而已:
$nl=n;
echo '<?xml version=1.0 encoding=utf-8??>'.$nl;
echo '<catalog>'.$nl;
foreach($qd as $i)
{
$nc=$i->nc;
$dw=$i->dw;
echo <notice dw="$dw">.$nl;
echo <count>$nc</count>.$nl;
echo </notice>.$nl;
}
echo '</catalog>';
二、用Flex的HTTPService来获得数据并呈现
Flex端的编写相对简单。关键代码如下:
<application initialize="weekday.send()" layout="absolute" xmlns:mx="http://www.adobe.com/2006/mxml">
<httpservice id="weekday" url="http://www.?????.com/status/index.php/welcome/xml_weekday"></httpservice>
<panel color="0xffffff" height="300" layout="vertical" title="?????.com站点统计" width="600">
<areachart color="0x323232" dataprovider="{weekday.lastResult.catalog.notice}" height="100%" id="chartStatus" showdatatips="true">
<horizontalaxis>
<categoryaxis categoryfield="dw"></categoryaxis>
</horizontalaxis>
<series>
<areaseries displayname="话痨数量" form="segment" yfield="count"></areaseries>
</series>
</areachart>
<button click="weekday.send()" counts="" label="Get"></button>
</panel>
</application>
关键是使用HTTPService部件来获得数据。它的URL属性由于在第一步的准备工作,可以是一个很漂亮的URI。
三、用CI来包含生成的SWF文件并最终以Nice URI呈现。
再次回到PHP中,在controller中我创建了一个action,来调用对应的嵌入了SWF的模板:
<embed align="middle" allowscriptaccess="sameDomain" bgcolor="#869ca7" height="100%" loop="false" name="main" play="true" pluginspage="http://www.adobe.com/go/getflashplayer" quality="high" src="http://www.?????.com/status/system/application/views/bspmq.swf" type="application/x-shockwave-flash" width="100%">
</embed>
这个文件基本上可以由Flex自己生成,只要稍作修改以符合要求即可。 在BT群话痨系统中,你可以用http://xxxxxxxxxxxx/status/index.php/welcome/swf 来看到效果:

Leave a Reply