在表格中,我有列'描述',其中包含商品描述。 我希望在CGridView列中包含'short_description',它将包含前150个字符。
class Product extends CActiveRecord
{
/**
* The followings are the available columns in table 'Product':
* @var integer $id
* @var integer $id_cat
* @var string $title
* @var string $description
* @var timestamp $date
*/
public $id;
public $id_cat;
public $title;
public $description;
public $date;
public $short_description ;
public function init()
{
$this->short_description = substr($this->description, 0, 150);
}
不幸的是,此代码不起作用。
答案 0 :(得分:6)
您需要覆盖模型类的afterFind函数并编写代码
$ this-> short_description = substr($ this-> description,0,150);
在afterFind函数中。
你需要做这样的事情
protected function afterFind()
{
parent::afterFind();
$this->short_description = substr($this->description, 0, 150);
}
答案 1 :(得分:4)
另一个选择是定义函数
public function getShortDescription()
{
return substr($this->description, 0, 150);
}
然后你可以调用$ product-> shortDescription(使用get magic方法)。
通过这种方式,简短的描述只会在需要时“计算”,而不是在每次查找之后,即使它没有被使用。
答案 2 :(得分:0)
您可以使用Virtual Attributes。这是专门用于访问更改的变量。你可以read more here
在模型中你可以使用这个功能:
public function getShortDescription(){
return substr($this->description, 0, 150);
}
您也可以在课程顶部添加变量:
public $shortDescription = substr($this->description, 0, 150);