首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Yii CGridView 操作按鈕 URL 客製化:updateButtonUrl、deleteConfirmation 與按鈕陣列完整指南

     編輯:PHP 綜合知識

前言

CGridView 的 CButtonColumn 提供三種內建按鈕,透過 updateButtonUrl、deleteButtonUrl、buttons 陣列可完全客製化連結、確認對話框、顯示條件。本文以實戰範例詳細解析各項配置技巧。

完整配置範例

widget('zii.widgets.grid.CGridView', array(
    'id' => 'mem-sub-grid',
    'dataProvider' => $model,
    'columns' => array(
        'zpc_catname',
        array(
            'name' => 'inputtime',
            'value' => 'date("Y-m-d H:i", $data->inputtime)',
            'htmlOptions' => array('class' => 't_c'),
        ),
        array(
            'class' => 'CButtonColumn',
            // 1. 更新按鈕自訂 URL
            'updateButtonUrl' => 'Yii::app()->controller->createUrl("updateRole", array("id" => $data->primaryKey))',
            // 2. 刪除確認對話框訊息
            'deleteConfirmation' => '確定要刪除此筆資料嗎?',
            // 3. 按鈕陣列深度客製化
            'buttons' => array(
                // 隱藏檢視按鈕
                'view' => array('visible' => 'false'),
                // 刪除按鈕自訂 URL
                'delete' => array(
                    'url' => 'Yii::app()->controller->createUrl("deleteRole", array("id" => $data->primaryKey))',
                    // 可加入 'click' => 'function(){...}' 自訂 JS 確認邏輯
                ),
                // 新增自訂按鈕範例
                'assign' => array(
                    'label' => '指派權限',
                    'url' => 'Yii::app()->controller->createUrl("assignRole", array("id" => $data->primaryKey))',
                    'imageUrl' => Yii::app()->request->baseUrl . '/images/assign.png',
                    'options' => array('class' => 'btn-assign', 'target' => '_blank'),
                    'visible' => '$data->status == 1', // 僅啟用狀態顯示
                ),
            ),
        ),
    ),
)); ?>

核心屬性詳細說明

updateButtonUrl / deleteButtonUrl

  • 字串會被 eval() 執行,可用 $data 存取當前行模型、$row 行號。
  • 必須回傳完整 URL 字串。
  • 建議使用 Yii::app()->controller->createUrl() 產生路由,自動處理 URL 管理規則。

deleteConfirmation

  • 字串直接作為 confirm() 參數。
  • 若需複雜邏輯(如 AJAX 刪除),設為 false 並自行在 buttons.delete.click 實作。

buttons 陣列結構

'buttons' => array(
    'buttonID' => array(
        'label'     => '按鈕文字',           // 預設為 buttonID
        'url'       => 'JS 表達式回傳 URL',  // 必填
        'imageUrl'  => '圖片路徑',           // 可選,優先於 label
        'options'   => array(                // HTML 屬性
            'class' => 'btn-custom',
            'target' => '_blank',
            'title' => '提示文字',
        ),
        'click'     => 'JS 函數字串',        // 覆蓋預設行為
        'visible'   => 'PHP 表達式',         // true/false 或可評估字串
    ),
)

進階:AJAX 刪除按鈕實作

'delete' => array(
    'url' => 'Yii::app()->controller->createUrl("ajaxDelete", array("id" => $data->primaryKey))',
    'click' => 'function(e) {
        e.preventDefault();
        if (!confirm("確定刪除?")) return;
        var $btn = $(this);
        $.post($btn.attr("href"), function(res) {
            if (res.success) {
                $.fn.yiiGridView.update("mem-sub-grid");
            } else {
                alert(res.message);
            }
        }, "json");
    }',
    'visible' => '$data->deletable === true',
),

常見問題排查

現象原因解決
按鈕 URL 為空或錯誤字串中單雙引號未正確跳脫外層用單引號,內層用雙引號;或使用 heredoc
deleteConfirmation 不彈出jQuery 未載入或版本衝突檢查頁面是否載入 jquery.yii.js
自訂按鈕不顯示visible 表達式語法錯誤確保 $data 可用,字串中變數需正確引用
updateButtonUrl 導向 404路由規則不匹配檢查 urlManager rules 與 controller/action 名稱

相關專題推薦

掌握 CButtonColumn 的三大客製化槓桿(updateButtonUrl、deleteConfirmation、buttons),能讓你在不寫自訂 Column 類別的情況下,滿足 90% 以上的按鈕交互需求。建議將常用按鈕模板封裝為 Helper 方法,專案間複用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved