1、在Model的rules 設(shè)定可以搜索的屬性
array('title, status, create_time', 'safe', 'on'=>'search'),
2、在Model中,添加搜索時的方法
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('title',$this->title,true);
$criteria->compare('status',$this->status);
$criteria->compare('create_time',$this->create_time);
return new CActiveDataProvider('Post', array(
'criteria'=>$criteria,
'sort'=>array(
'defaultOrder'=>'status, update_time DESC',
),
));
}
3、 在Controler中,寫接受搜索用到的表單的值的方法
public function actionAdmin()
{
$model=new Post('search');
if(isset($_GET['Post']))
$model->attributes=$_GET['Post'];
$this->render('admin',array(
'model'=>$model,
));
}
4、在view中用CGridView顯示
設(shè)置好
<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
),
)); ?>
以上代碼大部分是yii自動生成的,只要做少量修改即可
有時候會出現(xiàn),搜索后頁面為空的清況,原因可能是
layout/main.php中
echo $content外層無div,就是說main.php中必須有一個div包含$content
//CListView詳解
其用列表的形式顯示數(shù)據(jù),不象CGridView一樣,用表格顯示數(shù)據(jù),CListView用一個 view模板來顯示每一條數(shù)據(jù)
其支持排序與分頁
常用的代碼如下
<?php
$dataProvider = new CActiveDataProvider('Post',array(
'pagination'=>array(
'pageSize'=>2
),
));
$this->widget('zii.widgets.CListView',array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'template'=>' {summary} {items} {pager}{sorter}',
'sortableAttributes'=>array(
'title',
'create_time'=>'Post Time',
),
));
//CActiveForm詳解
快速生成表單,支持ajax驗證,對于比較復(fù)雜的驗下最好是自己生成表單,寫驗證方法
常用代碼,在Controller中
public function actionForm()
{
$post = new Post();
if(isset($_POST['ajax']) && $_POST['ajax']==='post'){
echo CActiveForm::validate($post);
Yii::app()->end();
}
if(isset($_POST['Post'])){
$post->attributes = $_POST['Post'];
if($post->save()){
echo '存成功了';
}
}
$this->render('form',array('post'=>$post));
}
在view中
<?php
$form = $this->beginWidget('CActiveForm',array(
'id'=>'post',//這里與Controller中的ajax對應(yīng)
'enableAjaxValidation'=>true,
));
?>
<?php echo CHtml::errorSummary($post); ?>
<?php echo $form->labelEx($post,'title');?>
<?php echo $form->textField($post,'title')?>
<?php echo $form->error($post,'title'); ?> error一定要寫上,要不不會觸發(fā)ajax驗證
<?php echo $form->labelEx($post,'content');?>
<?php echo $form->textField($post,'content')?>
<?php echo CHtml::submitButton($post->isNewRecord ? 'Create' : 'Save'); ?>
<?php $this->endWidget(); ?>
//CBreadcrumbs常用代碼
<?php $this->widget('zii.widgets.CBreadcrumbs', array(
'links'=>$this->breadcrumbs,
'homeLink'=>'<span><a href="http://abc.com">shouye</a></span>',
'separator'=>'>>>'
)); ?>
其中breadcrumbs中Controller中的一個屬性,如果要出現(xiàn)導(dǎo)航,就要在view中給此屬性附值
生成的html如下
<div class="breadcrumbs">
<span><a href="http://abc.com">shouye</a>
</span>>>><span>Managde Posts</span>>>>
<span>b</span>>>><span>c</span></div>
所以如果網(wǎng)站用到導(dǎo)航的時候,美工最好把導(dǎo)航代碼定義如上
//CDetailView 用在僅僅是為了查看數(shù)據(jù)時,還是比較有用的
如何在提交后顯示一段提示
在控制器中
if(isset($_POST['name'])){
Yii::app()->user->setFlash('success','you are success');
$this->refresh();
}
在view中
if (Yii::app()->user->hasFlash('success')){
echo 're is'.Yii::app()->user->getFlash('success');
}else{
echo 'no';
}
如何得到當(dāng)前域名:
app()->request->hostInfo
activeDropDownList,給出提示,并有值
array('empty'=>array(0=>'選擇分組')
<input type="submit" class="btn" value="提交" />
驗證碼如何生成及驗證:
Controller中
public function actions()
{
return array(
'captcha'=>array(
'class'=>'CCaptchaAction',
'backColor'=>0xFFFFFF,
'maxLength'=>4,
'minLength'=>4,
),
);
}
View中
<?php echo CHtml::activeTextField($user, 'verifyCode');?>
<?php $this->widget('CCaptcha',array(
'captchaAction' => '/site/captcha',
'showRefreshButton' => false,
'clickableImage' => true,
'imageOptions' => array('align'=>'top', 'title'=>'重新獲取'),
));?>
Model中
array('verifyCode', 'captcha', 'captchaAction'=>'site/captcha', 'message' => '輸入的驗證碼不正確'),
set_time_limit(0);//禁止角本超時
如何想把手工的東西記錄的數(shù)據(jù)庫
main.php中配置log
array(
'class'=>'CDbLogRoute',
'levels'=>'info',
'logTableName'=>'Log',
'connectionID'=>'db',
),
應(yīng)用時
Yii::log('信息','info');