tpextbuilder- SelectPage 下拉資料

ichynul發表於2021-08-29

預設每一個有列表頁index的控制器都對應一個selectPageurl('/admin/{controller}/selectPage');

class Member extends Controller
{
    protected function initialize()
    {
        //...其他初始化

        $this->selectTextField = '{id}#{nickname}({mobile})';
        $this->selectSearch = 'nickname|mobile';

        $this->selectIdField ='id';
        $this->selectFields ='id,nickname,mobile';
        $this->selectOrder = 'nickname';
        $this->selectScope = [['enable', 'eq' ,1]];
    }
}

說明

  1. selectTextField 格式化顯示的文字,單個欄位直接用欄位名,多欄位名稱用大括號包圍;{fieldname}

如上面的格式表示:會員id#暱稱(手機號):

<select>
<option value="10001">10001#小明(13312345670)</option>
<option value="10003">10002#小紅(13312345671)</option>
<option value="10003">10003#小剛(13312345672)</option>
<select>
  1. selectSearch 查詢欄位
    使用者在下拉框中輸入字串查詢,ajax請求後臺介面,介面中返回暱稱手機號包含這個關鍵字的資料。
    核心程式碼:

    $kwd = input('q');
    $data = $this->dataModel->where('nickname|mobile','like',"%$kwd%")->select();
  2. selectIdField 鍵,控制的是 <option value="10001">10001#小明(13312345670)</option> 中的value對應到哪個欄位。如果鍵不是id,那就需要設定。

  3. selectFields 優化查詢效果,比如上面的查詢,只需要idnicknamemobile三個欄位。預設是*全部欄位,如果追求效能,可以設定查詢欄位只這三個 。

  4. selectOrder 顧名思義,排序方式。

  5. selectScope 預設條件,比如上面的例子,只顯示已啟用的使用者,未啟用的就不顯示出來讓選擇。

其他說明

selectTextFieldselectIdField是預設情況,如果使用selectdataUrl方法時沒設定textFieldidField兩個引數,就按預設配置的。

預設情況:

$select->select('member_id', '會員')->dataUrl(url('/admin/member/selectPage'));
<select>
<option value="10001">10001#小明(13312345670)</option>
<option value="10003">10002#小紅(13312345671)</option>
<option value="10003">10003#小剛(13312345672)</option>
<select>

如果指定了textFieldidField,就可以覆蓋:

$select->select('mobile', '會員手機')->dataUrl(url('/admin/member/selectPage'),'{id}#{nickname}','mobile');
<select>
<option value="13312345670">10001#小明</option>
<option value="13312345671">10002#小紅</option>
<option value="13312345672">10003#小剛</option>
<select>

textField是單個欄位,大括號{}省略
idField 未指定,用預設

$select->select('mobile', '會員手機')->dataUrl(url('/admin/member/selectPage'),'nickname'); 
<select>
<option value="10001">小明</option>
<option value="10003">小紅</option>
<option value="10003">小剛</option>
<select>

模型關聯

//使用者模型:Member

class Member extends Model
{
    /** **/
    public function level()
    {
        return $this->belongsTo(MelberLevel::class, 'level_id', 'id');//MelberLevel是使用者等級的模型類
    }
}

//控制器

class Member extends Controller
{
    protected function initialize()
    {
        //...其他初始化

        $this->selectTextField = '{id}#{nickname}({level.name})';
        $this->selectSearch = 'nickname|mobile';

        $this->selectIdField ='id';
        $this->selectFields ='id,nickname,level_id';//   `level_id`這個欄位是必須的
        $this->selectOrder = 'nickname';
        $this->selectScope = [['enable', 'eq' ,1]];

        $this->selectWith= ['level'];//關聯模型
    }
}
$select->select('member_id', '會員')->dataUrl(url('/admin/member/selectPage'));
<select>
<option value="10001">10001#小明(一年級)</option>
<option value="10002">10002#小剛(二年級)</option>
<option value="10003">10003#小紅(三年級)</option>
<select>
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章