摘要:最終版編號生成時間用戶名性別省市搞定,在運行程序,表頭改成編號用戶名生成時間等,不要英文這個問題搞定了。是代表對進行什么樣的格式化,默認來對其處理。分鐘后,我郁悶的回來了,知道這回客戶提了那些亂七八糟的需求么且聽下回分解睡衣篇
增刪改查,數(shù)據(jù)庫操作的四大法寶中最常用的就是查了,一條記錄、幾條記錄、一大堆記錄。對于yii2而言,尤其后臺,GridView是最常用且好用的數(shù)據(jù)列表部件,今天就說一說。
yiigridGridView;GridView將結果集顯示為表格(table),我們從一個項目開始開始。
一天客戶老鄭(鄭訊)來到這里,說要我做一個頁面,將所有的會員分頁顯示在列表里,每頁10條數(shù)據(jù),并且能按照表頭排序。
好吧~
我查詢了數(shù)據(jù)庫的user表
id | username | password | create_time | sex | province | city |
---|---|---|---|---|---|---|
1 | abei | dWRvDOMGjvGQZMGlxFR2xfhsfGpzu8Rx | 1479876598 | 1 | 北京 | 北京 |
2 | 鄭訊 | dWRvDOMGjvGQZMGlxFR2xfhsfGpzu8Rx | 1479876698 | 0 | 黑龍江 | 哈爾濱 |
11 | 馬化騰 | dWRvDOMGjvGQZMGlxFR2xfhsfGpzu8Rx | 1479877598 | 1 | 黑龍江 | 齊齊哈爾 |
19 | 馬云 | dWRvDOMGjvGQZMGlxFR2xfhsfGpzu8Rx | 1479886598 | 1 | 黑龍江 | 嫩江 |
然后我決定使用GridView來顯示這些數(shù)據(jù),這樣分頁、排序都直接搞定了,我知道需要兩步
第一步是在控制器UserController.php里獲得結果集
public function actionIndex(){ $query = User::find(); $dataProvider = new ActiveDataProvider([ "query"=>$query, "pagination"=>[ "pagesize"=>10 ] ]); return $this->render("index",[ "dataProvider"=>$dataProvider ]); }
第二部渲染視圖
index.php
use yiigridGridView; = GridView::widget([ "dataProvider" => $dataProvider, "columns" => [ "id", "username", "create_time", "sex", "province", "city" ] ]);?>
完活了,聰明的GridView會搞定一切,我只需要將$dataProvider傳遞給ta,并且告訴他都要顯示User模型(user表)的那些屬性,放到columns數(shù)組中即可。
就這樣,表格出來了,且每個表都都能排序,客戶的需求達到了。
30分鐘后我拿給鄭訊看,見他默默無語,說了幾句話。
表頭改成編號、用戶名、生成時間等,不要英文。
會員生成時間我看不懂,改成年月日十分秒吧
性別改成男or女
省市兩列合并,像province-city這樣
恩,客戶是上帝,改改吧~,主要是我知道:"這個其實很簡單,GridView都能輕松搞定"
對于表頭的顯示,GridView是根據(jù)User模型的attributeLabels函數(shù)來決定的,現(xiàn)在就改
User.php
/** * @inheritdoc */ public function attributeLabels() { return [ "id" => "ID", "create_time" => "Create Time", "username"=>"Username", "password"=>"Password", "sex"=>"Sex", ]; }
現(xiàn)在就改,60秒過去了
/** * @inheritdoc */ public function attributeLabels() { return [ "id" => "編號", "create_time" => "生成時間", "username"=>"用戶名", "password"=>"Password", "sex"=>"性別", ]; }
但是,我發(fā)現(xiàn)省市怎么沒有,哦,想起來了,province和city是我后來添加到數(shù)據(jù)表的,并沒有更新User模型,那我直接加上就可以了。
最終版
/** * @inheritdoc */ public function attributeLabels() { return [ "id" => "編號", "create_time" => "生成時間", "username"=>"用戶名", "password"=>"Password", "sex"=>"性別", "province"=>"省", "city"=>"市" ]; }
???搞定,在運行程序,"表頭改成編號、用戶名、生成時間等,不要英文"這個問題搞定了。
繼續(xù)把,現(xiàn)在要處理"會員生成時間我看不懂,改成年月日十分秒吧"這個問題,它也很簡單,因為我知道除了向GridView的 columns傳遞每個屬性名字外,我們還能傳遞一個自定義的數(shù)組,格式化數(shù)據(jù)、邏輯處理,啥都能干出來,相當禽獸。
開始改視圖index.php,我只花了10秒鐘
index.php
use yiigridGridView; = GridView::widget([ "dataProvider" => $dataProvider, "columns" => [ "id", "username", [ "attribute"=>"create_time", "format"=>["date", "php:Y-m-d H:i:s"] ], "sex", "province", "city" ] ]);?>
"attribute"=>"create_time"
attribute要填寫,代表你在操作那個屬性,且在這里排序也是根據(jù)他來的。
format是代表對create_time進行什么樣的格式化,默認yiii18nFormatter 來對其處理。
刷新瀏覽器
又一個山頭給我們攻克了。
這里要提一下,[]的功能很強大,上面的實現(xiàn)也可以根據(jù)以下代碼來實現(xiàn)
index.php
use yiigridGridView; = GridView::widget([ "dataProvider" => $dataProvider, "columns" => [ "id", "username", [ "attribute"=>"create_time", "value"=>function($data){ return date("Y-m-d H:i:s",$data->create_time); } ], "sex", "province", "city" ] ]);?>
"性別改成男女",不多言,直接代碼
index.php
use yiigridGridView; = GridView::widget([ "dataProvider" => $dataProvider, "columns" => [ "id", "username", [ "attribute"=>"create_time", "format"=>["date", "php:Y-m-d H:i:s"] ], [ "attribute"=>"sex", "value"=>function($data){ return $data->sex == 1 ? "男" : "女"; } ], "province", "city" ] ]);?>
刷新瀏覽器
value是一個很好的屬性,當你不知道有沒有提供內(nèi)置命令的時候,都可以使用value去用自己的思路實現(xiàn)需求。
還有最后一個,"省市兩列合并,像province-city這樣",勝利就在前方,我想你已經(jīng)有了思路。
只需要改一點
[ "attribute"=>"province", "value"=>function($data){ return $data->province."-".$data->city; } ]
是的,你的思路是對的。但是發(fā)現(xiàn)一個問題,表頭顯示"省",ta應該顯示"省市"才對,不要緊,我們熱烈歡迎label屬性出場。
[ "label"=>"省市", "attribute"=>"province", "value"=>function($data){ return $data->province."-".$data->city; } ]
最后我看了下。
不錯不錯,喝杯茶,一會去給客戶看。
10分鐘后,我郁悶的回來了,知道這回客戶提了那些亂七八糟的需求么?且聽下回分解《GridView - 睡衣篇》
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22343.html
摘要:先來看看實現(xiàn)的效果關鍵代碼設置顯示最下面的設置每行數(shù)據(jù)的復選框屬性刪除設置刪除按鈕垮列顯示其他列每個都要增加項,設置為,達到隱藏單元格的目的啟用禁用管理操作獲取選擇的數(shù)據(jù)最后我們就可以提交到相應的控制器。 先來看看實現(xiàn)的效果 showImg(https://segmentfault.com/img/bVJIqC?w=658&h=279); 關鍵代碼 獲取選擇的數(shù)據(jù) var i...
摘要:于是就會報出這樣一個錯誤要在兩個數(shù)據(jù)庫同一臺服務器上進行關聯(lián)數(shù)據(jù)查詢,純語句如下轉化成語句時默認不會在表明前添加數(shù)據(jù)庫名,于是在執(zhí)行語句時就會默認此表在數(shù)據(jù)庫下。默認是這樣的只需要在表明前添加數(shù)據(jù)庫名為了提高代碼穩(wěn)定性,可以這樣寫 背景:在一個mysql服務器上(注意:兩個數(shù)據(jù)庫必須在同一個mysql服務器上)有兩個數(shù)據(jù)庫: memory (存儲常規(guī)數(shù)據(jù)表) 中有一個 use...
摘要:今天把這個問題講明白了,看看是怎么個多表關聯(lián)以及如何去優(yōu)化這個關聯(lián)。現(xiàn)需要在列表展示表的來源渠道,且該渠道可搜索。關聯(lián)表字段增加查詢中的搜索模型也是通過實現(xiàn)的,該模型通過控制著哪個字段可搜索,哪個字段不可搜索。 作者:白狼 出處:http://www.manks.top/yii2_many_ar_relation_search.html 本文版權歸作者,歡迎轉載,但未經(jīng)作者同意必須保留...
閱讀 853·2019-08-30 15:54
閱讀 3321·2019-08-29 15:33
閱讀 2707·2019-08-29 13:48
閱讀 1222·2019-08-26 18:26
閱讀 3338·2019-08-26 13:55
閱讀 1488·2019-08-26 10:45
閱讀 1173·2019-08-26 10:19
閱讀 311·2019-08-26 10:16