一个详细的解决方案的搜索和排序方法的cgridview相关表一

一个详细的解决方案的搜索和排序方法的cgridview相关表一
本文介绍了查找和排序的方法cgridview相关表一。分享给你供你参考。具体实现的方法如下:

在一cgridview搜索和排序方法有点复杂。今天我看了一个外国人写的游戏。现在我想和你们分享我的朋友们。我相信它会帮助你在学习Yii框架。

首先,检查你的博客protectedmodelscomment.php演示,确保点评模式有一个搜索的方法,如果没有,使用后创建一个博客,我下载的演示是不。

然后,时间写代码的时候,我们开始commentcontroller,我们添加一个ActionList:它。

复制代码如下:公共职能ActionList()

{

为模型=新的评论(搜查);

元模型-> unsetattributes();

如果(isset($ _get { 'comment ' }))

元模型->属性= $ _get { 'comment};
美元->渲染('list,阵列(

模型= $模型,

));

}

它看起来并不好,就像你在CRUD代码生成在GII。现在让我来创建视图,创建list.php下 /保护/意见/评论/目录并粘贴下面的代码

复制代码代码如下:面包=阵列(

评论,

);

>
管理评论
('zii部件。部件。网格。cgridview,阵列(

dataProvider ' = >模式>搜索(美元),

过滤器= $模型,

(列= >阵列

内容,

职称,

状态,

作者

),

));

>

评论列表

这是一个基本的cgridview仅显示评论的内容、状态和作者,而文章的标题,我们假设我们想添加一列第这个列表的标题,我们只需要添加post.title。

复制代码代码如下:列= >阵列(

内容,

职称,

状态,

作者,

),

现在,如果您可以访问下面的页面,您会发现文章的标题确实出现了。
问题:

如果你仔细看这个页面,你会发现你无法搜索文章的标题,你将不能够通过文章的标题排序,这是因为cgridview发现在一个给定的列的名称,是post.title点。如果有时间的话,它会不生成搜索框。

解uff1a

我们要去努力解决的问题。首先,我们要添加一个getter和setter的常见模式,例如。

复制代码如下:私人_posttitle美元= null;

公共功能getposttitle()

{

如果(美元-> _posttitle零美元->后= = =!= NULL)

{

这_posttitle =美元->美元->后->标题;

}

返回_posttitle美元->;

}

公共功能setposttitle(价值)

{

美元-> _posttitle =价值;

}

接下来,将该属性添加到规则函数中:

复制代码如下:公共函数规则()

{

注意:您应该只为那些属性定义规则

接收用户输入。

返回的数组(

阵列(内容、作者、电子邮件、'required),

阵列('author,电子邮件,网址,'length ','max= > 128),

阵列('email','email'),

阵列('url ','url)
阵列(内容,posttitle,现状,作者'安全',在' = >搜查),

);

}

这还不够。需要改变的是我们的搜索功能:

复制代码代码如下:$标准=新cdbcriteria;

标准$>
$标准->比较('t.content,美元->内容,真的);

$标准->比较('t.status,美元->状态);

$标准->比较('t.author,美元->作者,真的);

$标准->比较('post。标题,美元-> posttitle,真的);

然后我们添加排序:

复制代码如下:排序=新CSort();

$ > >属性=数组(

defaultorder= >的t.create_time desc,

内容=数组(

ASC= > 't.content,

降序= >的t.content desc,

),

状态=数组(

ASC= > 't.status,

降序= >的t.status desc,

),

作者=数组(

ASC= > 't.author,

降序= >的t.author desc,

),

posttitle= >阵列(

ASC= > 'post称号,

降序= >的post.title desc,

),

);

你可能会注意到,我使用的是完整的。'columnname'grammar。我这样做的原因是为了避免MySQL扔列是模棱两可的错误。

确保所有的运行,我们必须通过csort实例和cdbcriteria实例CActiveDataProvider:

复制代码如下:返回cactivedataprovider('comment,阵列)。

标准= $标准,

排序

));

返回新的cactivedataprovider('comment,阵列(

标准= $标准,

排序

));

我们现在要做的就是修改我们的视图,它显示你想要在CGridView显示属性:

复制代码代码如下:列= >阵列(

内容,

posttitle,

状态,

作者,

),

刷新,应该可以,效果如下图所示:
希望本文有助于基于Yii框架的PHP程序设计人。

tag:解决方案搜索排序方法表一详细

相关内容