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