關於Yii2中GridView的用法總結
預設enableSorting為true,可以通過設定為false來取消此列排序功能,如下圖。
A6.列的樣式如何控制?
到現在你已經知道了5個使用GridView的技巧,我們繼續,在A6中我們嘗試改變表格某一列的樣式。針對於列樣式,GridView提供了3個屬性,分別為headerOptions、contentOptions和footerOptions。
現在我們來做一個需求,將省市這一列個性化,列的頭部程式設計紅色,列的內容程式設計藍色,如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{
[
'enableSorting' => false,
|
是的,使用這一列的headerOptions和contentOptions即可
有個要注意的地方,我們使用瀏覽器的f12看看標註顏色的列。
你看到了,headerOptions和contentOptions直接作用到了th和td標籤,為其增加類似於style等屬性,因此如果你的th或td標籤中還有其他的html標籤,直接定義style就無法生效了,此時可以通過css類解決這個問題。
A7.關於GridView中footerOptions的使用。
在A6中我們說GridView的列有一個footerOptions屬性,那麼這個屬性是幹嘛用的那?從單詞上分析是控制列footer的屬性(比如樣式等等),但是footer在哪裡???在哪裡在哪裡?
需要先設定GridView的showFooter等於true才可以。才可以才可以。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
在showFooter=true的天空下,列的footerOptions才能自由飛翔。
從原理上說,'showFooter'=>true的結果是讓table出現了下面程式碼
1 2 3 4 5 6 7 |
|
因此每列的footerOptions就控制著在tfoot中這一列對應的td。
A8.footerRowOptions你是幹毛用的?
在我們大搖大擺的用著A8中的showFooter的時候,突然PhpStorm自動關聯出一個footerRowOptions,這是個什麼東西那?
footerRowOptions是GridView的屬性,它控制著tfoot的tr標籤屬性,簡單點說,你最後在tfoot上每個單元格看到的效果是footerRowOptions + footerOptions 的結合體(就style而言)。
比如針對上面的例子我們在配置下footerRowOptions
1 |
|
則你會發現黃色字型變成了20px。
要注意:A6、A7和A8中的這些xxxOptions所能控制的是標籤的屬性,不單單是style。
A9.showFooter的大家族
從A7中我們知道了GridView的showFooter,它決定這table是否顯示tfoot資訊,除此之外show家族還有一些其他成員。
-
showHeader 可以控制table的頭部是否顯示,預設顯示。
-
showOnEmpty 當資料為空的時候,table框架是否存在,預設不存在。
A10.魔術師visible的戲法
這個片段我們說下GridView列的visible屬性,此屬性預設為true代表此列顯示,通過設定visible屬性可以隱藏一列,這種隱藏非css的display:none,而是在渲染表格的時候就去掉了此列。
你可能會問,如果我要使用visible來隱藏一列,我不寫這一列不就好了麼?
是的,你的思路沒錯,但是visible是可以傳遞一個表示式,實現邏輯判斷,比如下面的需求當1號管理員登入的時候可以看到省市一列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
A1-A10 我們重點說的是GridView每列的公共屬性,這並不是全部,針對於不同型別的列還有會其他的屬性,比如DataColumn、ActionColumn、CheckboxColumn等等,針對於不同型別列的講解,要後續放出。
GridView
接下來我們進入B系列,B系列的重點在講解GridView。
B1 關於佈局layout
預設情況下GridView的佈局如下圖
這個佈局來自於GridView的layout屬性,我們可以改變這個模板,比如要去掉summary。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
layout內有5個可以使用的值,分別為{summary}、{errors}、{items}、{sorter}和{pager}。
B2.指定列預設的型別 dataColumnClass
在一個表格中每列都有不同的作用,有的是資料型別的、有的是複選框型別,具體有5種
-
ActionColumn
-
CheckboxColumn
-
DataColumn
-
RadioButtonColumn
-
SerialColumn
通過GridView可以設定一列的預設型別,當然你可以針對特殊的類單獨指定其class。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
B3.caption屬性
我們可以通過設定GridView的caption屬性來實現table的caption功能,作為table用途非常有用。
1 2 3 4 5 6 7 8 9 10 11 |
|
效果圖如下
當然不用多說,GridView也提供了captionOptions屬性來讓你控制caption的屬性。
B4.tableOptions和options屬性
這兩個屬性有的開發者可能會混淆,接下來我用一張圖讓你瞬間明白。
就是說GridView渲染的時候首先弄出來一個p容器,這是這個GridView的代表,接下來在此容器內放各種元素,比如{summary}、{items}等等。
-
options 控制著p容器的屬性,預設新增一個class="grid-view"
-
tableOptions 控制著{items}表格的屬性,預設為其新增一個 class="table table-striped table-bordered"
現在你會改table的樣式類了麼?
B5.一堆好基友 headerRowOptions 和 footerRowOptions
我們在A8中講了footerRowOptions的用法,headerRowOptions的用法和它一樣,只不過它管理的是thead下tr的屬性。
B6.rowOptions
學會了B5,你可能看著rowOptions一眼識破,沒錯它的目的就是管理tbody下的每個tr,但是它更強大,除了直接接收一個數組外還能傳入匿名函式。
你可以融入你的邏輯,比如現在我們要用rowOptions實現隔行換色的功能,來吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
目的達到,看效果
對於rowOptions接收的匿名行數的4個形參,這裡說明一下
-
$model
: 當前被渲染的物件 -
$key
: 當前物件的逐漸 -
$index
: 針對於當前頁面,從0開始,逐行加1 -
$grid
: GridView物件
B7. beforeRow和afterRow
這是一對非常靈活的屬性,它們接收一個匿名函式。分別表示在渲染了一行之前和之後發生點什麼?當然具體發生什麼由你來決定。
要記住的是,匿名函式返回的結果也會作為一行納入到渲染過程,比如當我們遇到奇數的時候就在此行下面新增一行,可以如下程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
非常好,得到了我們想要的結果
B8. 兩個小盆友placeFooterAfterBody & emptyCell
很細節的兩個小屬性
-
placeFooterAfterBody 當我們要顯示footer的時候,placeFooterAfterBody屬性決定將此html放到table的什麼位置,預設放到header後面,你可以選擇placeFooterAfterBody=true來讓footer放到body後面。此功能是在yii2.0.14才支援的。
-
emptyCell 又是一個小細節,如果一個單元格為空,用什麼字元填充那?預設是  ,你可以重新指定。
小結
不知不覺寫了3000多字,本想一篇完成GridView的講解,現在看來比較困難,畢竟還有很多型別的列要去研究分享,還是變成專題吧,接下來我會對每個列做單獨的分析,希望對你有用。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請