当前位置:K88软件开发文章中心网站服务器框架Yii 2.0 → 文章内容

数据小部件(Data Widgets)

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:29:17

数据。这是默认的列的类型, 所以在使用 DataColumn 为列类时,可省略类的指定(译者注:不需要'class'选项的意思)。数据列的主要配置项是 yii\grid\DataColumn::format 属性。它的值对应于?formatter?application component?应用组件里面的一些方法, 默认是使用 \yii\i18n\Formatter 应用组件:echo GridView::widget([ 'columns' => [ [ 'attribute' => 'name', 'format' => 'text' ], [ 'attribute' => 'birthday', 'format' => ['date', 'php:Y-m-d'] ], ],]); 在上面的代码中,text?对应于 \yii\i18n\Formatter::asText()。列的值作为第一个参数传递。在第二列的定义中,date?对应于 \yii\i18n\Formatter::asDate()。 同样地,列值也是通过第一个参数传递的,而 'php:Y-m-d' 用作第二个参数的值。可用的格式化方法列表,请参照?section about Data Formatting。数据列配置,还有一个”快捷格式化串”的方法,详情见API文档 yii\grid\GridView::columns。 (译者注:举例说明,"name:text:Name"?快捷格式化串,表示列名为?name?格式为?text?显示标签是?Name)动作列yii\grid\ActionColumn 用于显示一些动作按钮,如每一行的更新、删除操作。echo GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ [ 'class' => 'yii\grid\ActionColumn', // you may configure additional properties here ],可配置的属性如下:yii\grid\ActionColumn::controller 是应该执行这些动作的控制器ID。 如果没有设置,它将使用当前控制器。yii\grid\ActionColumn::template 定义在动作列中使用的构建每个单元格的模板。 在大括号内括起来的的令牌被当做是控制器的 action 方法ID (在动作列的上下文中也称作按钮名称)。 它们将会被 yii\grid\ActionColumn::$buttons 中指定的对应按钮的关联的渲染回调函数替代。 例如,令牌?{view}?将被?buttons['view']?关联的渲染回调函数的返回结果所替换。 如果没有找到回调函数,令牌将被替换成一个空串。默认的令牌有?{view} {update} {delete}?。yii\grid\ActionColumn::buttons 是一个按钮的渲染回调数数组。数组中的键是按钮的名字(没有花括号),并且值是对应的按钮渲染回调函数。 这些回调函数须使用下面这种原型:function ($url, $model, $key) { // return the button HTML code}在上面的代码中,$url?是列为按钮创建的URL,$model是当前要渲染的模型对象,并且?$key?是在数据提供者数组中模型的键。yii\grid\ActionColumn::urlCreator 是使用指定的模型信息来创建一个按钮URL的回调函数。 该回调的原型和 yii\grid\ActionColumn::createUrl() 是一样的。 假如这个属性没有设置,按钮的URL将使用 yii\grid\ActionColumn::createUrl() 来创建。复选框列yii\grid\CheckboxColumn 显示一个复选框列。想要添加一个复选框到网格视图中,将它添加到 yii\grid\GridView::$columns 的配置中,如下所示:echo GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ // ... [ 'class' => 'yii\grid\CheckboxColumn', // 你可以在这配置更多的属性 ], ],用户可点击复选框来选择网格中的一些行。被选择的行可通过调用下面的JavaScript代码来获得:var keys = $('#grid').yiiGridView('getSelectedRows');// keys 为一个由与被选行相关联的键组成的数组序号列yii\grid\SerialColumn 渲染行号,以?1?起始并自动增长。使用方法和下面的例子一样简单:echo GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], // <-- here // ...数据排序注意:这部分正在开发中。https://github.com/yiisoft/yii2/issues/1576数据过滤为了过滤数据的 GridView 需要一个模型?model?来 从过滤表单接收数据,以及调整数据提供者的查询对象,以满足搜索条件。 使用活动记录?active records?时,通常的做法是 创建一个能够提供所需功能的搜索模型类(可以使用?Gii?来生成)。 这个类为搜索定义了验证规则并且提供了一个将会返回数据提供者对象的?search()?方法。为了给?Post?模型增加搜索能力,我们可以像下面的例子一样创建?PostSearch?模型:<?phpnamespace app\models;use Yii;use yii\base\Model;use yii\data\ActiveDataProvider;class PostSearch extends Post{ public function rules() { // 只有在 rules() 函数中声明的字段才可以搜索 return [ [['id'], 'integer'], [['title', 'creation_date'], 'safe'], ]; } public function scenarios() { // 旁路在父类中实现的 scenarios() 函数 return Model::scenarios(); } public function search($params) { $query = Post::find(); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); // 从参数的数据中加载过滤条件,并验证 if (!($this->load($params) && $this->validate())) { return $dataProvider; } // 增加过滤条件来调整查询对象 $query->andFilterWhere(['id' => $this->id]); $query->andFilterWhere(['like', 'title', $this->title]) ->andFilterWhere(['like', 'creation_date', $this->creation_date]); return $dataProvider; }}你可以在控制器中使用如下方法为网格视图获取数据提供者:$searchModel = new PostSearch();$dataProvider = $searchModel->search(Yii::$app->request->get());return $this->render('myview', [ 'dataProvider' => $dataProvider, 'searchModel' => $searchModel,]);然后你在视图中将?$dataProvider?和?$searchModel?对象分派给 GridView 小部件:echo GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ // ...

上一页  [1] [2] [3]  下一页


数据小部件(Data Widgets)