网站开发学习笔记(二)

(二) PHP(SPEEDPHP框架) + Open flash chart


SpeedPHP是一款全功能的国产PHP框架应用系统,速度飞快,上手容易,是最适合初学者的PHP框架,以“快速开发、快速学习、快速执行”为理念,带你轻松进入PHP高手的行列。选择SpeedPHP的原因是其完善的开发文档,以及大量的详细注释代码,对于我这种第一次接触PHP的人来说,这个才是快速入门的关键。

SpeedPHP有新浪云平台SAE的修改版,一般只要替换SpeedPHP框架中的SpeedPHP文件夹就能改为其他版本了,比较方便。

为了学习PHP和动态图表,做了一个血糖记录网站(http://healthmonitor.sinaapp.com/),是基于SpeedPHP教程中的留言板示例修改的。由于涉及到部门个人信息问题,就不上传源代码了。我捡一些开发过程中遇到的问题说说吧。


一、登陆、注册、退出之类的,主要是通过cookie和会话实现,这个在SpeedPHP中通过spAcl来管理用户权限,通过给$_SESSION["userinfo"]赋值,来设置当前会话的用户名。

spAcl可以为每个页面分配一个访问权限,在创建新用户时,将不同的用户分配到不同的权限组中,就能实现网页访问的权限控制----未登录者寸步难行。

二、SpeedPHP的数据模型是支持自定义校验规则的,只不过默认的一些校验方法比较少,但是基本能满足大部分的需要。比如:字段长度,Email,是否可以为空等。校验规格是可以选择的,使用同样的数据结构,在不同的应用场景下可以使用不同的校验规则。比如登录和注册。

需要注意的是,校验返回结果是不匹配的信息列表,也就是说,如果全部规则校验成功,返回false。

$rows = array('username' => $username, 'password' => $password, 'compassword' => $compassword );
$userObj->verifier = $userObj->verifier_register; // 切换验证规则
$results = $userObj->spVerifier($rows);
if( false == $results )
{ // 当spVerifier返回false的时候,则是表示已经通过验证,数据是合格的
...
}
三、调试。SpeedPHP提供一个dump()方法,用于输出对象、数组、变量的值。但是,需要注意的是,如果dump后面有jump()、success()、error()之类的跳转命令,那么dump输出的数据可能就看不到了,可以在dump之后加return直接返回进行调试。


下面说说在PHP语言下,如果使用open flash chart,先上代码

    import("php-ofc-library/open-flash-chart.php");
    //折线图JSON数据
    public function blood_line()
    {
		$currtime = time()+10800;
		$x_min = $currtime-2592000; //30 days
        $act_min = strtotime("2011-11-28");
        
        if($x_min < $act_min)
        {
            $x_min = $act_min;
        }

        $title = new title(strftime("%Y-%m-%d", $x_min) . "~" . strftime("%Y-%m-%d", $currtime));
        $title->set_style( "font-size: 25px" );
        $blue = "#80FFFF";
        $light_blue = "#0080FF";
        $green = "#00C400";
        $yellow = "#FFFF00";
        $red = "#FF0000"; 
        
        $hl = new shape($blue);
        $hl->append_value(new shape_point($x_min, 0));
        $hl->append_value(new shape_point($x_min, 3.9));
        $hl->append_value(new shape_point($currtime, 3.9));
        $hl->append_value(new shape_point($currtime, 0));

        $hnl = new shape($light_blue);
        $hnl->append_value(new shape_point($x_min, 3.9));
        $hnl->append_value(new shape_point($x_min, 4.4));
        $hnl->append_value(new shape_point($currtime, 4.4));
        $hnl->append_value(new shape_point($currtime, 3.9));
        
        $hg = new shape($green);
        $hg->append_value(new shape_point($x_min, 4.4));
        $hg->append_value(new shape_point($x_min, 7));
        $hg->append_value(new shape_point($currtime, 7));
        $hg->append_value(new shape_point($currtime, 4.4));
        
        $hnh = new shape($yellow);
        $hnh->append_value(new shape_point($x_min, 7));
        $hnh->append_value(new shape_point($x_min, 10));
        $hnh->append_value(new shape_point($currtime, 10));
        $hnh->append_value(new shape_point($currtime, 7));
        
        $hh = new shape($red);
        $hh->append_value(new shape_point($x_min, 10));
        $hh->append_value(new shape_point($x_min, 16));
        $hh->append_value(new shape_point($currtime, 16));
        $hh->append_value(new shape_point($currtime, 10));
    
        $b1 = new line("#000000");

        $userObj = spClass("lib_diabetes_blood"); // 实例化diabetes_blood类
        $conditions = array( 'username' => $this->spArgs("username") ); 
        $bloodlist = $userObj -> findAll($conditions, "ctime DESC");
        foreach($bloodlist as $item)
        {
            if($item['ctime'] < $x_min)
            {
                break;            
            }
            $b1->append_value(array('x'=>$item['ctime'], 'y'=>$item['value']));
        }
        

        $dot = new dot();
        $dot->halo_size(2);
        $dot->size(2);
        $dot->tooltip('#date:Y-m-d H:i#<br>#y#');
        $b1->set_default_dot_style($dot);
    
        $y = new y_axis();
        $y->set_range(0, 16, 2 );

        $x = new x_axis();
        $x->set_range($x_min, $currtime);
        $x->set_steps( 86400 );
        $labels = new x_axis_labels();
        // we have points at every X location, so label each X location
        $labels->set_steps(86400);
        $labels->visible_steps(1);
        $labels->text('#date#');
        // only display every other label (every other day)
        //$labels->visible_steps(2);
        $labels->rotate(-45);
        
        // finally attach the label definition to the x axis
        $x->set_labels($labels);

        $title = new title(strftime("%Y-%m-%d", $x_min) . "~" . strftime("%Y-%m-%d", $currtime));

        $chart = new open_flash_chart();
        $chart->set_title( $title );
        $chart->add_element( $b1 );
        $chart->add_element( $hl );
        $chart->add_element( $hnl );
        $chart->add_element( $hg );
        $chart->add_element( $hnh );
        $chart->add_element( $hh );
        
        $chart->set_y_axis( $y );
        $chart->set_x_axis( $x );
                    
        echo $chart->toPrettyString();

    }
    
    //饼图JSON数据    
    public function blood_pie()
    {
        $p = new pie();
        $userObj = spClass("lib_diabetes_blood"); // 实例化diabetes_blood类
        $conditions = array( 'username' => $this->spArgs("username") ); 
        $bloodlist = $userObj -> findAll($conditions, "ctime ASC");

        $low = 0;
        $nearlow = 0;
        $normal = 0;
        $nearhigh = 0;
        $high = 0;
                
        foreach($bloodlist as $item)
        {
            if($item['value'] >= 10.0)
            {
                $high++;
            }
            elseif($item['value'] > 7.0)
            {
                $nearhigh++;
            }
            elseif($item['value'] > 4.4)
            {
                $normal++;
            }
            elseif($item['value'] > 3.9)
            {
                $nearlow++;
            }
            else
            {
                $low++;
            }
            
        }
        
        $blue = "#80FFFF";
        $light_blue = "#0080FF";
        $green = "#00C400";
        $yellow = "#FFFF00";
        $red = "#FF0000"; 
        
        $p->set_tooltip("#val# of #total#<br>#percent#");
        $p->set_alpha(0.5);
        $p->set_values(array($low, $nearlow, $normal, $nearhigh, $high));
        $p->set_colours(array($blue, $light_blue, $green, $yellow, $red));
        $p->set_animate(TRUE);
        $p->add_animation(new pie_bounce(15));
        

        $min = $bloodlist[0]['ctime'];
        $max = $bloodlist[count($bloodlist)-1]['ctime'];
        $title = new title(strftime("%Y-%m-%d", $min) . "~" . strftime("%Y-%m-%d", $max));
        
        $chart = new open_flash_chart();
        $chart->set_title( $title );
        $chart->add_element( $p );
        
        echo $chart->toPrettyString();     
    }

这部分代码包括一个折线图和一个饼图,折线图与前面文章的python效果相同。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值