lostAngel 2011-04-01 14:53:07 7077次浏览 8条回复 4 0 0

网上看到有人总结了一些yii的小技巧,拿过来分享给大家,可能有人看过哦 1,使用updateCounters()来更新计数器字段。

Book::model()->updateCounters(array('download_count'=>1),':id=id',array(':id'=>$id));

2,使用sendFile()来下载文件。

$type = LFilter::checkString($_GET['t']);
$dataProvider = Book::model()->findByPk($id);
$content = $this->renderPartial('book',array(
  'dataProvider' => $dataProvider,
  'type' => $type,
),true,false);
Yii::app()->request->sendFile($dataProvider->name.'.'.$type,$content);
}

3,设计数据库时候如果create_time,update_time字段为int(10).在模型中使用行为插件。

public function behaviors()
{
  return array(
    'CTimestampBehavior' => array(
      'class' => 'zii.behaviors.CTimestampBehavior',
      'createAttribute' => 'create_time',
      'updateAttribute' => 'update_time',
    )
  );

4,如果有些字段使用1,2,3之类的数字存储,在程序中使用时候含义不明确。可以model中加入如下函数.

private static $_items = array();
public static function loadItems($type,$code=null)
{
  self::$_items = array(
    'status' => array(
      '1' => Yii::t('dh','开启'),
      '2' => Yii::t('dh','关闭'),
    ),
    'type' => array(
      '1' => Yii::t('dh','产品'),
      '2' => Yii::t('dh','文章'),
    ),
  );
  return $code ? self::$_items[$type][$code] : self::$_items[$type];
}

5,多语言使用Yii::t()函数。

public function attributeLabels()
{
  return array(
    'verifyCode'=>Yii::t('default','验证码'),
    'name'=>Yii::t('default','名字'),
    'email'=>Yii::t('default','邮箱'),
    'subject'=>Yii::t('default','标题'),
    'body'=>Yii::t('default','内容'),
    'required'=>Yii::t('default','变量"{var}"没有定义'array('{var}'=>$var));
  );
}

6,数据库表使用了前缀,则使用{{$tableName}}。

public function tableName()
{
  return '{{product}}';
}

7,Cookie的使用

//设置Cookie
$cookie=new CHttpCookie($name,$value);
$cookie=time()+60*60*24;
Yii::app()->request->cookies[$name]=$cookie;
//获取Cookie
$cookie=Yii::app()->request->cookies[$name];
$value=$cookie->value;
//删除Cookie
$cookie = Yii::app()->request->getCookies();
unset($cookie[$name]);

8,zii.widgets.jui.CJuiTabs的使用

<?php
$this->widget('zii.widgets.jui.CJuiTabs', array(
  'tabs'=>array(
  Yii::t('book','基本信息') => $this->renderPartial('_basic',array(
  'model' => $model,
  'form' => $form,
  ),true),
Yii::t('book','作品标签') => array('ajax'=> $this->createUrl('tag/boxList',array('tag'=>$model->tag))),
Yii::t('book','作品封面') => $this->renderPartial('_image',array(
  'model'=>$model,
  'form'=>$form,
 ),true),
Yii::t('book','作品公告') => $this->renderPartial('_notice',array(
  'model'=>$model,
  'form'=>$form,
),true),
),
// additional javascript options for the tabs plugin
'options'=>array(
  'collapsible'=>false,
),
));
?>

对于tabs而言,对于复杂内容的渲染结合使用renderPartial();

9,zii.widgets.grid.CGridView的使用

<?php $this->widget('zii.widgets.grid.CGridView', array(
  'id'=>'chapter-grid',
  'dataProvider'=>$model->search(),
  'filter'=>$model,
  'columns'=>array(
  'id',
//锚点<a href=""></a>
  array(
    'name'=>'name',
    'type'=>'raw',
    'value'=>'CHtml::link($data->name,"/book/$data->id")',
  ),
//图片
  array(
    'name'=>'image',
    'type'=>'image',
    'value'=>'LImages::getPath("book").$data->image',//图片相对路径
   ),
  //下拉列表
  array(
    'name'=>'type',
    'value'=>'Lookup::item("chapterType",$data->type)',
    'filter'=>Lookup::items('chapterType'),
  ),
  //内容截取
  array(
    'name'=>'content',
    'type'=>'html',
    'value'=>'mb_substr(htmlspecialchars_decode($data->content),0,100,"utf-8")',
  ),
  //时间
  array(
    'name'=>'create_time',
    'type'=>'datetime',
  ),
  // 根据相关信息读数据库
  array(
    'name'=>'user_id',
    'value'=>'User::model()->findbyPk($data->user_id)->username',
    'filter'=>false,
  ),
  array(
    'class'=>'CButtonColumn',
  ),
),
)); ?>

10,findAll()的使用;

$params=array(
  'select'=>'id,name,image',
  'order'=>'total_point DESC',
  'limit'=>5,
);
$this->findAll($params);

find()使用同理,只是返回一条数据。

11,readAll()返回数组结果集

查看源代码打印帮助

$query = 'SELECT id,username FROM user';
$command = Yii::app()->db->createCommand($query);
return $command->query()->readAll();
您需要登录后才可以回复。登录 | 立即注册