示例:# tp3.2使用ECharts做一個降雨量報表 && tp5的使用實例
[toc]

## :-: **1、準備數據**
控制器準備數據,數據是個一維數組
``` php
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller
{
public function index()
{
$echart = array(
'title' => '某地區蒸發量和降水量',
'subtext' => '純屬虛構',
'legend' => json_encode(['降雨量', '增發量']),
'a_data'=>json_encode([2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]),
'b_data'=>json_encode([2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]),
);
$this->assign('echart', $echart); //然后直接傳到前臺去 不一定就是要ajax的 如果用ajax 就在那邊閉包處理
$this->display();
}
}
```
## :-: **2、使用插件**
模板文件中,為對象加載數據(從文檔中挑選各種配置項)
~~~
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>ECharts</title>
</head>
<body>
<!-- 為ECharts準備一個具備大小(寬高)的Dom -->
<div id="main" style="height:400px"></div>
<!-- ECharts單文件引入 -->
<script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
var lengend = {$echart['legend']}; //最上面的圖例
var a_data = {$echart['a_data']}; //蒸發量
var b_data = {$echart['b_data']}; //降水量
// 路徑配置
require.config({
paths: {
echarts: 'http://echarts.baidu.com/build/dist'
}
});
require(
[
'echarts',
'echarts/chart/bar' // 使用柱狀圖就加載bar模塊,按需加載
],
function (ec) {
// 基于準備好的dom,初始化echarts圖表
var myChart = ec.init(document.getElementById('main'));
var option = {
title: {
text: "{$echart['title']}", //標題
subtext: "{$echart['subtext']}" //父標題
},
tooltip: {
trigger: 'axis' //觸發類型,坐標軸觸發,主要在柱狀圖,折線圖
},
legend: { //圖例組件
data: (function () {
var list = new Array();
$.each(lengend, function (k, v) { //遍歷最上面的圖例
list.push(v);
});
return list;
})()
},
toolbox: { //工具欄(右上角的)
show: true,
feature: { //各工具配置項
mark: {show: true}, //
dataView: {show: true, readOnly: false}, //數據視圖工具,可以展現當前圖表所用的數據,編輯后可以動態更新
magicType: {show: true, type: ['line', 'bar']}, //動態類型切換
restore: {show: true}, //配置項還原
saveAsImage: {show: true} //保存為圖片
}
},
calculable: true,
xAxis: [ //x軸
{
type: 'category', // 類目軸
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
}
],
yAxis: [
{
type: 'value' // 數值軸
}
],
series: [ //Y軸的數據
{
name: '蒸發量',
type: 'bar', //類型
data: (function () {
var list = new Array();
$.each(a_data, function (k, v) {
list.push(v);
});
return list //相當于list是data
})(),
markLine: {
data: [
{type: 'average', name: '平均值'}
]
}
},
{
name: '降水量',
type: 'bar',
data: (function () {
var list = new Array();
$.each(b_data, function (k, v) {
list.push(v);
});
return list
})(),
markLine: {
data: [
{type: 'average', name: '平均值'}
]
}
}
]
};
// 為echarts對象加載數據
myChart.setOption(option);
}
);
</script>
</body>
~~~
## :-: **tp5示例**
``` html
<a href="{:url('Stock/qrcode',array('id'=>$vo['id']))}"> <!--往控制器方法,帶參數的發請求-->
```
- 前端代碼:
~~~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>銷售</title>
<script src="__STATIC__/js/jquery.js"></script>
<script src="__STATIC__/js/echarts/echarts.min.js"></script>
<link rel="stylesheet" href="__STATIC__/js/layui/css/layui.css" media="all">
<style>
.h{
height:20px;
}
</style>
</head>
<body>
<div class="h"></div>
<div>
開始時間:<input type="date" value="{$start_time}" name="start_time" class="s_time"/>
結束時間:<input type="date" value="{$end_time}" name="end_time" class="e_time"/>
<button type="button" class="layui-btn layui-btn-small layui-btn-normal" id="sou">搜索</button>
</div>
<div class="h"></div>
<!-- 為 ECharts 準備一個具備大小(寬高)的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
var myChart = echarts.init(document.getElementById('main'));
$("#sou").click(function() {
//接收時間
var s_time = $('.s_time').val(); //開始時間
var e_time = $('.e_time').val(); //結束時間
//
$.ajax({
url: "{:url('sellDataPost')}", //本控制器的方法
type : "post",
datatype: "json",
data : {start_time:s_time,end_time:e_time}, //時間帶過去
success: function(data){ //成功的回調函數,可以根據需要做對應的彈窗提示
var d_obj = JSON.parse(data); //可以將json字符串轉換成json對象
//x軸的數據
var xobj = d_obj.goods;
var xstr = xobj.split("|"); //分隔字符串
var xdata = [];
for (var i=0;i<xstr.length;i++){
xdata.push(xstr[i]); //將字符串追加到數組
//alert(a[i]);
}
//y軸的數據
var yobj = d_obj.num;
var ystr = yobj.split("|");
var ydata = [];
for(var e=0;e<ystr.length;e++){
ydata.push(ystr[e]);
}
myChart.setOption({
title: {
text: '通馳店鋪銷售記錄'
},
tooltip: {},
legend: {
data:['金額']
},
xAxis: { //銷售種類
data:xdata
},
yAxis: {
},
series: [{
name: '金額',
type: 'bar',
// data: [ //銷售金額
// d_obj.num
// ]
data:ydata,
}]
});
}
});
});
</script>
</body>
</html>
~~~
- 后端代碼:
~~~
//控制器代碼:通過ajax返回數據
public function sellDataPost(){
//取Y軸數據 銷售額 == 價格*數量。使用sum統計銷售總額
$data = input('post.');
$model = new SellModel();
$res = $model->selectDataY($data); //查數據
$moneys = [];
foreach ($res as $k => $value){
$moneys[] = $value['sell_sum'];
}
$money = implode("|",$moneys);
//取x軸的數據 銷售的品類,取name
$info = Db::table('cmf_ws_sell')
->alias('s')
->join('cmf_ws_category c','s.category_id = c.id')
->where('c.parent_id',0) //查category表parent_id為0的一級分類
->field('c.name') //只查詢需要取出的分類名
->group('s.category_id') //統計category_id 去重
->select();
//echo Db::table('cmf_ws_sell')->getLastSql(); //打印sql語句
$category_names = []; //2維變1維
foreach ($info as $key => $value){
$category_names[] = $value['name'];
}
$category_name = implode("|",$category_names); //轉換成字符串
//返回ajax 品類 銷售額
$json = ['goods'=>$category_name,'num'=>$money];
echo json_encode($json);
}
~~~
- 雜談
- 開發 & 維護的工作流程
- 新手如何看php手冊 和 框架手冊
- 開發 & 維護的不同點
- 從0到1,搭建新項目的工作流程
- 從1到N,維護的工作流程
- 優化流程
- 生成錯誤日志和慢日志的方法
- 查錯思路
- 怎么快速接手一個項目
- 前端常用知識點
- javascript
- 自己封裝的函數
- 處理數字
- 功能代碼
- 動態添加圖片
- 判斷是手機端還是pc端
- javascript:;是什么意思?怎么用呢
- html & h5
- a標簽中target設置為blank和_blank有什么區別?
- 亂碼
- 提交方式:button標簽 和 input
- 塊元素
- 內聯元素
- h5特有屬性
- h5的localStorage【增、刪、改、查】
- jquery
- 常用方法
- 功能代碼
- 動態刪除圖片
- 一個按鈕,切換2種狀態
- 換膚
- 深入理解(function(){... })();
- json & xml
- json
- 語法速記
- json對象取值
- 字符串、對象、數組的區別
- xml
- [CDATA[%s]]的作用是什么
- 轉義字符
- CDATA 想被xml解析的文本數據
- CDATA 不想被xml解析的文本數據
- 微信小程序
- 其他
- websocket
- 跨域
- css
- 行內 & 內連 & 外連 寫法
- 優先級
- 更加精準的匹配
- 使用百分比如何生效
- php在html、js、jq中的的原生寫法
- *php在html中的語法
- php在js中的語法
- php在jq中的語法
- 正則表達式
- php常用基礎知識(思想為主)
- php為什么是“邊編譯邊運行”
- 冒號、endif、endwhile、endfor使用
- 遞歸思想(速記法)
- cookie和session的理解
- php常用內置(系統)函數
- 常量
- 字符串
- 數組
- 日期時間
- 文件 & 目錄
- 數學
- 程序執行
- 判斷
- 選項和信息(修改配置文件的)
- 錯誤處理 & 日志記錄
- 編碼格式
- session
- IP相關
- 類 & 對象
- 性能
- 其他函數
- 魔術方法
- $_SERVER
- 變量處理
- php自己封裝的一些函數
- 導入、導出、生成文件
- 數組
- 數字
- 字符串
- 其他
- 獲取linux硬件信息
- 常見插件/類庫使用
- 前端-框架/插件
- bootstrap 學習筆記
- layer 學習筆記
- layDate 學習筆記
- 百度ueditor1.4.4.3富文本編輯器
- quill富文本編輯器
- 百度ECharts圖形報表
- webuploader上傳圖片
- 后端類庫
- workerman 聊天室
- QRCODE 二維碼
- redis
- seaslog 日志
- phpspider 爬蟲
- Mailer 發送郵件
- simple_html_dom
- phpstorm使用
- 快捷鍵
- 連接mysql數據庫
- 斷點 + debug調試
- 運行內存不夠
- wamp環境
- yii、laravel、tp、開發自己的php框架
- 看框架源碼的思路
- tp5框架的使用
- 1、助手函數原理解析
- 開發自己的php框架
- 常用的開發思路 和 小功能實現代碼
- 爬蟲思路
- 功能點思路
- tp5判斷是不是異地登錄(簡單版)
- 微信開發,反向代理
- 微信開發,關閉當前頁面
- 消息隊列的實現
- 頁面靜態化
- session串號
- 站內信設計思路
- web在線管理器
- 語言相關(開發有關)
- 接收json(text/xml)格式數據
- 原生文件上傳(狀態碼)
- openssl擴展
- 打印對象 和 遍歷對象
- 使用OB緩存的幾個原則
- CLI模式執行php文件
- foreach時,添加元素 或 修改元素的值
- 功能點 代碼實現
- 生成url目錄樹(沒有pid)
- 多圖上傳(vue傳base64)
- 下載文件,耗時算法
- 生成商品二維碼
- 導出excel
- 搜索
- 阿里大魚發短信
- 使用阿里云oss
- location.href跳轉后,丟失用戶的session
- “\r ” “\r\n” “\t”的區別
- php的配置文件詳解
- 開啟錯誤日志
- 開啟慢日志
- 開啟短標簽
- 分析php-fpm.conf中的request_terminate_timeout參數