需求:HTML页面增加注释,div盒子控制曲线大小,多个盒子相互嵌套。具体数据从另外表内获取。
HTML页面更改:
<!-- Morris chart - Sales -->
<!-- Change! -->
<div class="chart tab-pane active" style="height: 300px;">
<div style="float:left;margin: 15% 0% 0% 1%;word-wrap:break-word; width:76px;">Headcount (man/days)</div>
<div class="chart tab-pane active" id="revenue-chart" style="float:left;position: relative; height: 276px;width:86%;" >
</div>
<p class="margin" style="margin: 0 auto; text-align: center">Number of RMKs</p>
</div>
<!-- Change End! -->
<div class="chart tab-pane" id="sales-chart" style="position: relative; height: 300px;"></div>
根据:
var area = new Morris.Area({})
$('.box ul.nav a').on('shown.bs.tab', function () {
area.redraw();
donut.redraw();
line.redraw();
});
html:
<ul class="nav nav-tabs pull-right">
<li class="active"><a href="#revenue-chart" data-toggle="tab">Area</a></li>
可知与ul.nav的a标签有关。#revenue-chart
首先要在div盒子外侧加边框border: 1px solid red;来区别盒子的位置。当一个盒子内只有两个盒子的时候,需要并排可以使用float:left; display:inline;来让两个盒子并排。控制盒子的大小最好用直接使用margin: 10% 0% 0% 0%;可以控制上右下左,与旁边盒子的边距,padding是控制盒子内的边距。让单词按照单词的实际宽度换行,可以使用word-wrap:break-word;如果让其拆单词方式换行使用其他命令。id是唯一指示符,用来准确定位。让盒子的位置整体变动使用position: relative;相对于前面的容器定位的,和absolute是相对于浏览器的定位。加字,尽量使用p标签,比div要节省资源。text-align: center可以让字以中间位置排列。
另外根据html的注释可以获取到渲染css的具体位置,查看Morris的js位置。
从另外表读取数据,并规定小数点位数的显示。
while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC)){
$user = new User();
$user->ID = $row["ID"];
$TID = $row["ID"];
$Tempsql = "SELECT * FROM test_sizing WHERE `RMK` = '{$TID}' ";
$Tempresult = $mysqli->query($Tempsql);
$Temprow = mysqli_fetch_array($Tempresult,MYSQLI_ASSOC);
if($Temprow == NULL){
$user->TDC_PlanningHC = "0";
$user->TDC_EntryHC = "0";
$user->TDC_ExitHC = "0";
}else{
for($i = 0;$i < 3;$i++){
$Tsql = "SELECT SUM(Headcount) FROM test_sizing WHERE `RMK` = '{$TID}' AND `Phase` = '{$i}'";
$Tresult = $mysqli->query($Tsql);
$Trow = mysqli_fetch_array($Tresult,MYSQLI_ASSOC);
if($i == 0){
$TDCPlHC = sprintf("%.1f",$Trow['SUM(Headcount)']);
$user->TDC_PlanningHC = $Trow['SUM(Headcount)'];
}else if($i == 1){
$TDCEnHC = sprintf("%.1f",$Trow['SUM(Headcount)']);
$user->TDC_EntryHC = $Trow['SUM(Headcount)'];
}else if($i == 2){
$TDCExHC = sprintf("%.1f",$Trow['SUM(Headcount)']);
$user->TDC_ExitHC = $Trow['SUM(Headcount)'];
}
}
}
$data[]=$user;
}
$json = json_encode($data);
$djson = json_decode($json,true);
$Row1=0;
$Row2=0;
$Row3=0;
$Row4=0;
for($i = 0;$i < count($djson);$i++){
$Row1 = 1 + $i;
$djson[$i]["y"]=$Row1;
$Row2 = $Row2 + floatval($djson[$i]["TDC_PlanningHC"]);
$Row2R = sprintf("%.1f",$Row2);
$djson[$i]["TDC_PlanningHC"]=$Row2R;
$Row3 = $Row3 + floatval($djson[$i]["TDC_EntryHC"]);
$Row3R = sprintf("%.1f",$Row3);
$djson[$i]["TDC_EntryHC"]=$Row3R;
$Row4 = $Row4 + floatval($djson[$i]["TDC_ExitHC"]);
$Row4R = sprintf("%.1f",$Row4);
$djson[$i]["TDC_ExitHC"]=$Row4R;
}
代码中加入的内容:$Tempsql,来判断是否有必要从另外的表内查看数据。如果没有必要就设置为0。因为数据是以单列内不同数值0,1,2选择后,才能找到对应数据。所以需要筛选语句:
$Tsql = "SELECT SUM(Headcount) FROM test_sizing WHERE `RMK` = '{$TID}' AND `Phase` = '{$i}'";
筛选`Phase` = '0'或1或2,按照不同的`RMK` = 'ID',筛选的数据直接求和,然后显示。其中$TDCPlHC = sprintf("%.1f",$Trow['SUM(Headcount)']);把对应的数据取小数点一位。在for循环的相加中要求最终的得数也要得到小数点一位。