Yii2的相關學習記錄,Gridview小部件使用及kartik-v/yii2-grid擴展(五)

来源:http://www.cnblogs.com/vishun/archive/2016/04/06/5357115.html
-Advertisement-
Play Games

現在記錄下Gridview的相關內容,也是強迫症犯了,Yii2自帶的Gridview雖然不錯,但是過濾欄如果一些欄位用不著,不會自動合併成一行,當然也可以過濾欄不用,而是在最上方自己寫一些需要檢索的數據,但是這樣很麻煩,還要自己去規劃樣式,寫檢索什麼的。正好在搜索將檢索欄和標題合併時,看到了kart ...


現在記錄下Gridview的相關內容,也是強迫症犯了,Yii2自帶的Gridview雖然不錯,但是過濾欄如果一些欄位用不著,不會自動合併成一行,當然也可以過濾欄不用,而是在最上方自己寫一些需要檢索的數據,但是這樣很麻煩,還要自己去規劃樣式,寫檢索什麼的。正好在搜索將檢索欄和標題合併時,看到了kartik-v/yii2-grid可以實現這些功能,而且還自帶導出excel、csv等數據,所以也順便試了下它的功能,調出了自己喜歡的樣式。在用kartik-v的Gridview之前我們還是要瞭解Yii2自帶的Gridview的功能的,大體常用的一些方法如下:

1、Yii預設有四種樣式的列,分別為Data column(預設)、Action column(操作)、Checkbox column(可選中)、Serial column(帶序列號)

2、標題名字會根據Model中的attributeLabels()方法,來自動替換成對應的中文。當然也可以通過‘label’來自己定義,而‘attribute’則是指定根據哪個欄位排序。其它的像是'visible'來隱藏顯示,'header'顯示頭部內容,'headerOptions'來定義css或style樣式等等。

[
    'label'=>'你想要的名稱',
    'attribute'=>'id',//可以排序的欄位
]

3、自定義顯示頁數和排序欄位,如果用到了searchModel,則需要在searchModel的search方法中定義,否則,需要在Controller中定義:

$dataProvider = new ActiveDataProvider([
    'query' => $query,
    'pagination' => [
        'pageSize' => 15,//如果不定義,預設為20
    ],
    'sort' => ['attributes' => ['id']],//如果定義,則只能按照id來排序,否則所有欄位都可以
]);

4、下拉菜單檢索,好比根據下拉菜單檢索用戶狀態,則需要先在model中定義相關的方法,然後在Gridview中再做處理:

//Model中,定義一個靜態方法
const STATUS_DELETED = 0;
const STATUS_ACTIVE = 10;
public static function getZhStatus($status=false){
    $status_array= [
        ''=>'請選擇',
        self::STATUS_DELETED=>'禁止',
        self::STATUS_ACTIVE=>'正常'
    ];
    return $status==false?$status_array:ArrayHelper::getValue($status_array,$status,'未知');
} 
//Gridview中
[ 
    'attribute' => 'status',
    'filter'=>Html::activeDropDownList($searchModel,'status',User::getZhStatus(),['class' => 'form-control ']),
    'value'=>function($data){
        return User::getZhStatus($data->status);
    },
],   

5、格式化時間,有好幾種方法:

方法一:類似上面的定義回調函數

[
    'attribute'=>'created_at',
    'value'=>function($data){
        return date('Y-m-d',$data->created_at);   
   },
]

方法二:用Gridview自帶的format配置

[
    'attribute'=>'created_at',
    'format'=>['date','php:Y-m-d'],
    'value'=>'created_at',
],

方法三:首先在config中配置好你的時間格式,否則會是英文格式的,然後再在Gridview中處理。

//在common/config/main.php中定義自己的時間、金錢等的格式
'components' => [
    'formatter' => [
        'dateFormat' => 'yyyy-MM-dd',
        'datetimeFormat' => 'yyyy-MM-dd HH:mm:ss',
        'decimalSeparator' => ',',
        'thousandSeparator' => ' ',
        'currencyCode' => 'CNY',
    ],
],

這裡用到了快速寫的一種方式:“attribute:format:label”(屬性:格式:標簽)這種格式,詳情點擊這裡的api文檔。所以我們這樣就可以了:(如果定義了上方,則方法二可以直接'format'=>'date'即可以正確顯示)

'created_at:date',

6、顯示超鏈接或圖片,都是用的回調函數的方法,這裡以超鏈接為例,註意format需要為'raw’,不對結果做任何格式化處理,具體的格式化方面可以點這裡看看。

[ 
    'attribute'=>'id',
    'value'=>function($model, $key, $index, $column){
        return Html::a($model->id,['user/view','id'=>$model->id],['class' => 'profile-link','target'=>'_blank']);
    },
    'format' => 'raw',
],

7、關聯表單顯示,這個地方直接看指南吧,點這裡看,總之就是如果管理表單設置好後,直接用類似order.name這種就可以直接顯示使用,如果想要檢索排序,則需要在searchModel的rulers規則方法和attributes屬性方法中將此欄位寫入,在search方法中添加andFilterWhere的檢索,以及用$query->joinWith關聯欄位,$dataProvider->sort->attributes[]添加排序等。

8、自定義Action Column按鈕,

[
    'class' => 'yii\grid\ActionColumn',
    'header'=>'操作',
    'headerOptions'=>['width'=>'120'],
    'template' => '{view} {update} {delete} {forbid} ',
    'buttons'=>[
        'forbid'=>function($url,$model){
            return Html::a('<i class="glyphicon glyphicon-remove-circle"></i>',['user/forbid','id'=>$model->id]);     
        }
    ],
]

 以上是Yii2自帶的Gridview的用法。再說下kartik-v/yii2-grid官方文檔及demo講的比較全了,它比原生的多了幾個列的形式,例如Editable Column(可編輯)、Radio Column(單選框)等,還多了一些其它功能,例如滾動時可以固定標題欄方便查看、可以總計、導出svn,excel等格式。這裡稍微說下:

一開始安裝完成後可能會報錯pdf錯誤,因為這些關聯的還沒有安裝,可以按照提示安裝也可以先配置'export'=>false來取消導出功能,下麵導出時會詳細配置。

1、整體結構如下圖:

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 看到資料庫連接不由得想起了大一末參加團隊考核時的悲催經歷~~,還記得當初傻傻地按照書本的代碼打到 Eclipse 上,然後一運行就各種報錯。。。報錯後還傻傻地和書本的代碼一遍又一遍地進行核對,發現無誤後,還特別糾結——代碼和書本一樣,怎麼就報錯了呢? 最後通過 Google 才得知要添加驅動包,就這 ...
  • 在文件input.csv文件中,我們有數據如下 現在我們將input.csv文件下的讀取並寫入到output.csv文件,我們會用到fopen函數 函數原型:FILE * fopen(const char * path,const char * mode) fopen還有很多模式,比如 w,寫入文件 ...
  • 好久沒寫過雙緩存了,趁現在有空重新溫習下。 我們經常聽說雙緩存,但是很少使用多緩存,起碼大多數情況下是這樣吧。為什麼不需要多緩衝呢,今天分析下。並不是緩衝區越多越好,這個需要考慮具體的應用場景。我們抽象假設一下應用場景,為了簡化場景,假設只有一個讀線程和一個寫線程,設讀時間為rt,寫時間為wt,有三 ...
  • 易偉微信公眾平臺介面傻瓜教程部分內容:微信介面9超鏈接.rmvb微信介面8音樂信息.rmvb微信介面7圖文信息.rmvb微信介面6關註回覆.rmvb微信介面5關鍵詞回覆.rmvb微信介面50連闖三關.rmvb微信介面4介面驗證.rmvb微信介面49簡答題.rmvb微信介面48正則表達式.rmvb微信 ...
  • 早就聽說了dubbo的好處,但是在項目中一直沒有使用的機會,所以一直不知道怎麼使用。今天晚上有空,簡單的學習一下 就當入個門,以後項目中遇到的話,那麼使用起來就比較簡單了,至於介紹的話,我就不總結了,其實就是很好的解決了分散式 管理的問題,並且操作起來非常的方便。 下麵這張圖是從官網上截圖的 節點角 ...
  • 協同過濾常常被用於分辨某位特定顧客可能感興趣的東西,這些結論來自於對其他相似顧客對哪些產品感興趣的分析。協同過濾以其出色的速度和健壯性,在全球互聯網領域炙手可熱。 ...
  • 1.Behaviour介紹 Erlang/Elixir的Behaviour類似於其它語言中的介面(interfaces),本質就是在指定behaviours的模塊中強制要求導出一些指定的函數,否則編譯時會warning。 其中Elixir中使用到behaviour的典範就是GenServer, Ge ...
  • 一、php環境配置: 二、zendstudio Eclipse +xdebug 開發php環境軟體下載: 三、安裝配置如下: extension=php_xdebugvc6.dll [Xdebug] xdebug.profiler_enable=on xdebug.trace_output_dir= ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...