Yii中CGridView关联表搜索排序方法实例详解

网络编程 2025-03-29 16:21www.168986.cn编程入门

让我们从添加 getter 和 setter 方法开始。

```php

private $_postTitle = null; // 私有属性 _postTitle 初始化为 null

public function getPostTitle() {

if ($this->_postTitle === null && $this->post !== null) {

// 如果 _postTitle 为空且 post 属性存在,则从 post 对象中获取标题并赋值给 _postTitle

$this->_postTitle = $this->post->title;

}

return $this->_postTitle; // 返回 _postTitle 的值

}

public function setPostTitle($value) {

// 为 _postTitle 属性设置值

$this->_postTitle = $value;

}

```

接下来,我们将这个属性添加到 rules 函数中:

```php

public function rules() {

// 只应为接收用户输入的属性定义规则

return [

['content', 'author', 'email', 'required'], // 内容、作者、电子邮件为必填项

['author', 'email', 'url', 'length', 'max' => 128], // 作者、电子邮件和 URL 的最大长度为 128

['email', 'email'], // 电子邮件格式验证

['url', 'url'], // URL 格式验证

['content', 'postTitle', 'status', 'author', 'safe', 'on' => 'search'], // 在搜索时,内容、标题、状态和作者字段被认为是安全的

];

}

```

现在,让我们对 search 函数中的 criteria 进行改进并添加排序功能:

```php

$criteria = new CDbCriteria; // 创建新的数据库查询标准对象

$criteria->with = "post"; // 确保查询包含 post 表的数据

// 根据内容、状态和作者设置查询条件

$criteria->compare('t.content', $this->content, true); // 内容匹配

$criteria->compare('t.status', $this->status); // 状态匹配(假设状态是一个字段)

```php

$criteria = new CDbCriteria(); // 创建 CDbCriteria 实例

$sort = new CSort(); // 创建 CSort 实例

// 将 CSort 和 CDbCriteria 实例传递给 CActiveDataProvider

$dataProvider = new CActiveDataProvider('Comment', array(

'criteria' => $criteria,

'sort' => $sort,

));

```

接下来,我们需要修改视图(View),以便在 CGridView 中显示所需的属性。以下是修改视图的代码示例:

```php

'columns' => array(

'content', // 显示评论内容列

'postTitle', // 显示文章标题列

'status', // 显示状态列(例如评论是否已审核)

'author', // 显示评论作者列

),

```

```php

// 使用 Cambrian 模板引擎渲染视图层内容

echo cambrian.render('body'); // 假设 'body' 是你的视图模板的名称或标识

```通过渲染视图模板,你可以将动态数据和静态的HTML结构结合起来,创建出具有丰富交互性和动态内容的Web应用程序。Cambrian模板引擎可以帮助你更轻松地管理和组织你的视图代码,提高开发效率和代码的可维护性。祝你在使用Yii框架和Cambrian模板引擎进行PHP程序设计时取得更多的成功!

上一篇:xml中的空格之完全解说 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by