Tag: flex

  • CodeIgniter和Flex的结合

    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 来看到效果: