tpextbuilder- SelectPage 下拉数据

默认每一个有列表页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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!