摘要:簡述模塊是中的架構(gòu)的板塊,主要負責(zé)數(shù)據(jù)的展示,渲染模板文件,展示數(shù)據(jù)內(nèi)容。此外在一個視圖中還可以引入多個視圖文件,也是通過方法實現(xiàn)。布局文件的數(shù)據(jù)默認以顯示,也可以用數(shù)據(jù)塊的形式渲染到視圖上。必須要確認生成一次,才會正式生成新首頁。
簡述
View模塊是Yii中的MVC架構(gòu)的V板塊,主要負責(zé)數(shù)據(jù)的展示,渲染模板文件,展示數(shù)據(jù)內(nèi)容。
基本概念MVC在Yii里面有一個Views文件夾,里面存放的是項目的視圖文件,負責(zé)展示數(shù)據(jù)內(nèi)容。
首先這里是一個簡單的控制器操作方法實現(xiàn)一個視圖的渲染展示,調(diào)用renderPartial()來渲染視圖文件,第一個是視圖文件名,存在在views目錄下的以控制器命名的文件夾下,文件名字與操作方法相對應(yīng);第二個則是渲染視圖的數(shù)據(jù),必須是一個數(shù)組。
這是一個視圖腳本php,里面是展示一些控制器傳來的數(shù)據(jù),還可以調(diào)用一些插件完成一些功能,比如數(shù)據(jù)過濾等等。
利用布局文件處理視圖,首先在views目錄下的layout文件夾下創(chuàng)建一個布局文件,名字自擬。
然后可以利用render()的方法把布局文件渲染顯示出來,而index視圖的內(nèi)容數(shù)據(jù)默認以$content的形式嵌入到布局文件,然后顯示出來,當(dāng)然,在render方法的第二個參數(shù)是一個數(shù)組,可以利用這個數(shù)組把數(shù)據(jù)渲染到視圖上,然后展示出來。
此外在一個視圖中還可以引入多個視圖文件,也是通過render方法實現(xiàn)。
布局文件的數(shù)據(jù)默認以$content顯示,也可以用數(shù)據(jù)塊的形式渲染到視圖上。
常見的頁面交互在Html上作 if else 的判斷:
status == 1): ?>已啟用 已禁用
在Html上顯示一些特殊按鈕:
= GridView::widget([ "dataProvider" => $dataProvider, "filterModel" => $searchModel, "columns" => [ [ "class" => "yiigridActionColumn", "buttons" => [ "layoutContent" => function ($url, $model){ /** * @var $model Service */ return Html::a("查看服務(wù)單信息", Url::to(["jlerp-service-order/view", "id" => $model->id]), [ "class" => "btn btn-success btn-xs", "target" => "__blank" ]); } ], "template" => "{layoutContent}", "options" => [ "style" => "width:100px" ], ] ], ]); ?>
一些在Html上常用的摁鈕實現(xiàn)
GirdView的使用
注意
每次修改完首頁配置后,先預(yù)覽查看效果,沒問題后才確認生成。
可以根據(jù)輸入的配置版本號預(yù)覽查看相應(yīng)的布局效果。
必須要確認生成一次,才會正式生成新首頁。
預(yù)覽方法
輸入版本號,點擊預(yù)覽首頁效果,進入預(yù)覽效果頁,然后:
如果是火狐瀏覽器,按Ctrl+Shift+M進入響應(yīng)式設(shè)計圖模式。
如果是谷歌瀏覽器,按F12,再按Ctrl+Shift+M。
= Html::a("創(chuàng)建布局配置", ["create"], ["class" => "btn btn-success"]) ?> = Html::a("確認布局生效", ["build-index"], ["class" => "btn btn-danger", "data-confirm" => "確認布局生效?"]) ?>
介紹一些 GridView 常見的使用案例:
下拉搜索
日期格式化并實現(xiàn)日期可搜索
根據(jù)參數(shù)進行是否顯示
鏈接可點擊跳轉(zhuǎn)
顯示圖片
html渲染
自定義按鈕
設(shè)定寬度等樣式
自定義字段
自定義行樣式
增加按鈕調(diào)用js操作
利用gridview實現(xiàn)批量刪除
下拉搜索
具體考慮到一張數(shù)據(jù)表要下拉效果的字段可能有很多個,我們先在其model中實現(xiàn)一個方法方便后續(xù)操作:
public static function dropDown ($column, $value = null) { $dropDownList = [ "is_delete"=> [ "0"=>"顯示", "1"=>"刪除", ], "is_hot"=> [ "0"=>"否", "1"=>"是", ], //有新的字段要實現(xiàn)下拉規(guī)則,可像上面這樣進行添加 // ...... ]; //根據(jù)具體值顯示對應(yīng)的值 if ($value !== null) return array_key_exists($column, $dropDownList) ? $dropDownList[$column][$value] : false; //返回關(guān)聯(lián)數(shù)組,用戶下拉的filter實現(xiàn) else return array_key_exists($column, $dropDownList) ? $dropDownList[$column] : false; }
然后我們上代碼看看具體怎么實現(xiàn)的下拉搜索:
= GridView::widget([ "dataProvider" => $dataProvider, "columns" => [ // ...... [ "attribute" => "is_hot", "value" => function ($model) { return Article::dropDown("is_hot", $model->is_hot); }, "filter" => Article::dropDown("is_hot"), ], [ "attribute" => "is_delete", "value" => function ($model) { return Article::dropDown("is_delete", $model->is_delete); }, "filter" => Article::dropDown("is_delete"), ], // ...... ], ]); ?>
像這樣,我們就簡單地實現(xiàn)了兩個下拉效果,要實現(xiàn)篩選功能,在你的dataProvider自定添加該字段的搜索條件即可
日期格式化
這個需要分情況討論:
1、如果你的數(shù)據(jù)庫字段created_at存的時間格式是date或者datetime,那很簡單,gridview中直接輸出該字段created_at即可,如上圖中右側(cè)所示
2、如果數(shù)據(jù)庫存入的時間戳類型,如上圖中左側(cè)所示,則需要像下面這樣進行輸出:
[ "attribute" => "created_at", "value" => function ($model) { return date("Y-m-d H:i:s", $model->created_at); }, ], [ "attribute" => "created_at", "format" => ["date", "Y-m-d H:i:s"], ],
以上展示了兩種方式進行格式輸出,都可以。
但是,如果想要實現(xiàn)搜索的機制,如果你的數(shù)據(jù)庫存入的是datetime型,很方便,dataProvider不用做修改,代碼如下:
$query->andFilterWhere([ // ...... "created_at" => $this->created_at, // ...... ]);
如果你的數(shù)據(jù)庫存入的是時間戳,
第一步,修改對應(yīng)規(guī)則如下圖所示。
第二步,修改dataProvider可參考如下代碼:
//我們搜索輸入框中輸入的格式一般是 2016-01-01 而非時間戳 //輸出2016-01-01無非是想搜索這一天的數(shù)據(jù),因此代碼如下 if ($this->created_at) { $createdAt = strtotime($this->created_at); $createdAtEnd = $createdAt + 24*3600; $query->andWhere("created_at >= {$createdAt} AND created_at <= {$createdAtEnd}"); }
是否顯示某列
舉一個簡單的案例:
條件:有一個 get 型參數(shù)type
需求:僅且 type 的值等于1的時候,列 name 才顯示,否則該列不顯示。
代碼實現(xiàn)如下:
[ "attribute" => "name", "value" => $model->name, "visible" => intval(Yii::$app->request->get("type")) == 1, ],
鏈接可點擊跳轉(zhuǎn)
這個跟 html 渲染的效果十分類似,這里要說的是列的屬性值 format,具體都有哪些格式可查看文件 yiii18nFormatter.php,各種format都可以解決:
[ "attribute" => "order_id", "value" => function ($model) { return Html::a($model->order_id, "/order?id={$model->order_id}", ["target" => "_blank"]); }, "format" => "raw", ],
顯示圖片
同上,這里只需要指定format格式為image即可,format第二個參數(shù)可設(shè)定圖片大小,可參考下面的代碼:
[ "label" => "頭像", "format" => [ "image", [ "width"=>"84", "height"=>"84" ] ], "value" => function ($model) { return $model->image; } ],
html渲染
舉個例子,我們有一個字段,標記為title,但是這個title不一樣,ta含有html標簽,我們不想在頁面上展示:
title123
這種形式,我們想要title123以p標簽的形式展示,代碼可參考如下,只需要指定format為raw形式即可
[ "attribute" => "title", "value" => function ($model) { return Html::encode($model->title); }, "format" => "raw", ],
自定義按鈕
往往列表頁我們不想要刪除按鈕,想在增加一個比如獲取xxx按鈕,怎么實現(xiàn)?這里需要設(shè)置ActionColumn類,修改配置項template并在buttons項增加template里增加的get-xxx即可
[ "class" => "yiigridActionColumn", "template" => "{get-xxx} {view} {update}", "header" => "操作", "buttons" => [ "get-xxx" => function ($url, $model, $key) { return Html::a("獲取xxx", $url, ["title" => "獲取xxx"] ); }, ], ],
設(shè)定寬度
舉個簡單的例子,我們的 title 列,太長了,能不能給我先定下這一列的寬度?
答案:能。
請看示例:
[ "attribute" => "title", "value" => "title", "headerOptions" => ["width" => "100"], ],
只需要指定配置項headerOptions即可。
自定義字段
什么是自定義?這里我們是指在表格里增加一列且數(shù)據(jù)庫中不存在對應(yīng)的列。
假如我們新增一列 訂單消費金額money且該表不存在該字段:
[ "attribute" => "消費金額", "value" => function ($model) { // 這里可以根據(jù)該表的其他字段進行關(guān)聯(lián)獲取 } ],
自定義行
有小伙伴說了,gii生成的這個gridview表格呀,行跟行的顏色不明顯,看著難受,我們來看看怎么定義行樣式:
= GridView::widget([ // ...... "dataProvider" => $dataProvider, "rowOptions" => function($model, $key, $index, $grid) { return ["class" => $index % 2 ==0 ? "label-red" : "label-green"]; }, // ...... ]); ?>
前面的操作我們都是依據(jù)列column的,這里因為是對行的控制,所以我們配置rowOptions要稍微注意一下。此外,自定義的label-red和label-green需要有對應(yīng)的樣式實現(xiàn),這里我們看一下頁面的實際效果
增加按鈕調(diào)用js操作
那邊產(chǎn)品經(jīng)理走過來了,小王呀,你這個修改狀態(tài)的功能很頻繁,每次都要先點進詳情頁才能修改,能不能我在列表頁面上鼠標那么一點就成功修改了呢?
其實就是一個異步請求操作了當(dāng)前行的狀態(tài)嘛,我們來看看gridview里面是怎么實現(xiàn)的。
[ "class" => "yiigridActionColumn", "header" => "操作", "template" => "{view} {update} {update-status}", "buttons" => [ "update-status" => function ($url, $model, $key) { return Html::a("更新狀態(tài)", "javascript:;",["onclick"=>"update_status(this, ".$model->id.");"]); }, ], ],
還沒完,我們還需要在頁面寫js實現(xiàn)方法 update_status。
常見的 Form 表單視圖元素文本框:textInput(); 密碼框:passwordInput(); 單選框:radio(),radioList(); 復(fù)選框:checkbox(),checkboxList(); 下拉框:dropDownList(); 隱藏域:hiddenInput(); 文本域:textarea(["rows"=>3]); 文件上傳:fileInput(); 提交按鈕:submitButton(); 重置按鈕:resetButtun();
["test/post"],"method"=>"post","id"="uploadform", ]); ?> // 文本輸入框 field($model,"username")->textInput(["maxlength"=>20])?> // 密碼輸入框 field($model,"password")->passwordInput(["maxlength"=>20])?> // 單選框 field($model,"sex")->radioList(["1"=>"男","0"=>"女"])?> // 下拉選擇框 field($model,"edu")->dropDownList(["1"=>"大學(xué)","2"=>"高中"], ["prompt"=>"請選擇","style"=>"width:120px"])?> // 文件上傳框 field($model,"file")->fileInput()?> // 復(fù)選框 field($model,"hobby")->checkboxList(["0"=>"籃球","1"=>"足球","2"=>"羽毛球","3"=>"乒乓球"])?> // 文本輸入框 field($model,"info")->textarea(["rows"=>3])?>field($model,"userid")->hiddenInput(["value"=>3])?> "btn btn-primary","name"=>"submit-button"])?> "btn btn-primary","name"=>"submit-button"])?>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/21609.html
摘要:簡述是一個強大的代碼生成器,主要用于后臺代碼生成。下面列出由生成的文件,以便你研習(xí)功能和實現(xiàn),或修改它們控制器模型和視圖補充被設(shè)計成高度可定制和可擴展的代碼生成工具。使用生成代碼是一個基于界面的代碼生成工具。 簡述 Gii 是一個強大的代碼生成器,主要用于后臺代碼生成。 開始 Gii Gii 是 Yii 中的一個模塊。可以通過配置應(yīng)用的 yiibaseApplication::modu...
摘要:簡述這里簡單歸納總結(jié)關(guān)于的錯誤處理和日志記錄的操作。錯誤處理器會正確地設(shè)置響應(yīng)的狀態(tài)碼并使用合適的錯誤視圖頁面來顯示錯誤信息。記錄一個警告消息用來指示一些已經(jīng)發(fā)生的意外。的義務(wù)是正確處理日志消息。相應(yīng)的消息通過被記錄。 簡述 這里簡單歸納總結(jié)關(guān)于Yii的錯誤處理和日志記錄的操作。 錯誤處理(Errors) Yii 內(nèi)置了一個yiiwebErrorHandler錯誤處理器,它使錯誤處理更...
摘要:簡述交互主要分為請求和響應(yīng)兩種方式。狀態(tài)碼構(gòu)建響應(yīng)時,最先應(yīng)做的是標識請求是否成功處理的狀態(tài),可通過設(shè)置屬性,該屬性使用一個有效的狀態(tài)碼。 簡述 HTTP交互主要分為 request(請求) 和 response(響應(yīng)) 兩種方式。 對于Yii2來說,HTTP的request請求是用 YII::$app->request 來表示的對象,這是Yii提供的處理HTTP的request請求的...
摘要:它由一個或多個類組成,它們在控制臺環(huán)境下通常被稱為命令??刂婆_入口腳本通常被稱為,位于應(yīng)用程序的根目錄。選項通過覆蓋在中的方法,你可以指定可用于控制臺命令選項。參數(shù)將傳遞給請求的子命令對應(yīng)的操作方法。通常,執(zhí)行成功的命令會返回。 簡述 控制臺應(yīng)用程序的結(jié)構(gòu)非常類似于 Yii 的一個 Web 應(yīng)用程序,主要用于終端服務(wù)器執(zhí)行。 控制臺命令 控制臺應(yīng)用程序的結(jié)構(gòu)非常類似于 Yii 的一個 ...
摘要:把所有的增量數(shù)據(jù)庫遷移提交到生產(chǎn)環(huán)境數(shù)據(jù)庫當(dāng)中。如果其中任意一個遷移提交失敗了,那么這條命令將會退出并停止剩下的那些還未執(zhí)行的遷移。執(zhí)行這條命令期間不會有任何的遷移會被提交或還原。 簡述 數(shù)據(jù)遷移就是數(shù)據(jù)庫表在團隊建的遷移操作,達到團隊相互間的信息同步,數(shù)據(jù)統(tǒng)一。 數(shù)據(jù)庫遷移 一般步驟: 1、在 yii2 的 migrate 中,通常用來對數(shù)據(jù)庫數(shù)據(jù)表進行修改操作,主要對結(jié)構(gòu)和小部分數(shù)...
閱讀 916·2021-11-15 17:58
閱讀 3757·2021-11-12 10:36
閱讀 3874·2021-09-22 16:06
閱讀 1038·2021-09-10 10:50
閱讀 1378·2019-08-30 11:19
閱讀 3357·2019-08-29 16:26
閱讀 1008·2019-08-29 10:55
閱讀 3396·2019-08-26 13:48