2014-01-20 69 views
0

我試圖僅將數據輸出到當前用戶的CListView中。到目前爲止,如果我放入$ dataProvider,它只輸出數據庫中的所有記錄。如何在Yii中使用CListView自定義dataProvider

這是我當前的代碼:

$current = Yii::app()->user->id; 
    $currentid = Yii::app()->db->createCommand("select * from content where id = ". $current)->queryRow(); 

    $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, //This is the original. I tried replacing it 
            //with $currentid but errors. 
    'itemView'=>'_view2', 
    'template'=>'{items}<div>{pager}</div>', 
    'ajaxUpdate'=>false, 
    )); 

從我從Yii的文檔,$數據提供程序商店瞭解數據庫,並把它的數據提供程序本身和我的「_view2」內內的所有數據將使用到輸出所有記錄。

的顯示/查看我的控制器代碼如下:

public function actionView() 
{ 

    $post=$this->loadModel(); 
    if(Persons::model()->compare_country(explode("|",$post->country))) 
    { 
     $post->view_count = $post->view_count + 1; 
     Yii::app()->db->createCommand("UPDATE content SET view_count = {$post->view_count} WHERE id = {$post->id}")->execute(); 
     //$post->save(); 
     $comment=$this->newComment($post, 'view'); 

     if (!empty(Yii::app()->session['announcement_message'])) 
     { 
      Yii::app()->user->setFlash('message',Yii::app()->session['announcement_message']); 
      Yii::app()->session['announcement_message'] = null; 
     } 

     $this->render('view',array(
      'model'=>$post, 
      'comment'=>$comment, 
      'view'=>'view', 
     )); 
    } 
    else 
    { 
     $this->redirect(Yii::app()->createAbsoluteUrl('news/index',array('page'=>'1'))); 
    } 
} 

public function actionShow($id) 
{ 
    $post=$this->loadModel($id); 
    $comment=$this->newComment($post); 
     $attachments=Attachments::model()->findAllByAttributes(array(
       'content_id' => $id, 
       )); 
    $this->render('show',array(
     'model'=>$post, 
     'comment'=>$comment, 
      'attachments'=>$attachments 
    )); 
} 

如果你想看到我的_view2,這是我的代碼:

<div class="profile-member-post-box announcement" > 
<div class="events-post-bodytext profile-member-info"> 

    <?php $person=Persons::model()->findByAttributes(array('party_id'=>$data->party_id)); 

    if ($person->party_id === Yii::app()->user->id) 
     { 
    ?> 
      <span><?=CHtml::link($data->title, array('view', 'id'=>$data->id), array('class' => 'titlelink'));?></span> 
    <?php 
     $country=Lookup_codes::model()->findByAttributes(array('id'=>$person->country)); 
     $location = empty($country) ? '' : 'of '.$country->name; 
     $sysUser=User::model()->findByAttributes(array('party_id'=>$data->party_id)); 

    ?> 
    <p> 
     By: <?php echo CHtml::link($person->getusername(), array('persons/view/id/'.$person->showViewLinkId())); ?> 
     <span class="date2"> - <?php echo date('M j, Y',strtotime($data->date_created)); ?></span> 
    </p> 

      <div> 
      <?php if(Yii::app()->partyroles->isAdmin() || ((get_access('Announcement','edit') && (Yii::app()->user->id == $data->party_id)) || (get_local_access('sub-admin','edit',$data->id)))):?> 
       <a href="<?php echo Yii::app()->createUrl('announcement/update', array('id'=>$data["id"]))?>">Edit</a> | <?php endif;?> <?php echo (Yii::app()->partyroles->isAdmin() || (get_access('Announcement','delete') && (Yii::app()->user->id == $data->party_id)) || (get_local_access('sub-admin','delete',$data->id))) ? CHtml::link('Delete','#',array('submit'=>array('delete','id'=>$data["id"]),'confirm'=>'Are you sure you want to delete this item?')) : NULL?> 
      </div> 

    <?php 
    } 
    else 
    ?> 

</div> 

我只需要能夠修復視圖以僅顯示當前用戶的記錄。

UPDATE!------------

我要在這裏加我的actionIndex:

public function actionIndex() 
{ 
    if(get_access('Announcement','view') || get_access('Announcement','view_local')) 
    { 
    $id = Yii::app()->user->id; 
    $condition = Persons::model()->get_view_condition('Announcement'); 
    $criteria=new CDbCriteria(array(
     'condition'=>'1=1 '.$condition, 
     'order'=>'date_modified DESC', 
     'with'=>'commentCount', 
    )); 
    /* 
    if(isset($_GET['tag'])) 
     $criteria->addSearchCondition('tags',$_GET['tag']); 
*/ 

    $items=SystemParameters::model()->findAllByAttributes(array(
       'name' => 'blogs_per_page', 
       )); 

    $dataProvider=new CActiveDataProvider('Announcement', array(
     'pagination'=>array(
      'pageSize'=>strip_tags($items[0]->value), 
     ), 
     'criteria'=>$criteria, 
    )); 

    /* $dataProvider=new CActiveDataProvider('Announcement', array(
     'pagination'=>array(
      'pageSize'=>5, 
     ), 
     'criteria'=>$criteria, 
    ));*/ 

    //$dataProvider=Announcement::model()->findAll(); 

    $attachments=Attachments::model()->findAllByAttributes(array(
       'content_id' => $id, 
       )); 

    if (!empty(Yii::app()->session['announcement_message'])) 
    { 
     Yii::app()->user->setFlash('message',Yii::app()->session['announcement_message']); 
     Yii::app()->session['announcement_message'] = null; 
    } 

    $this->render('index',array(
     'dataProvider'=>$dataProvider, 
    )); 
    } 
else 
{ 
    $this->redirect(Yii::app()->createAbsoluteUrl('news/index',array('page'=>'1'))); 
} 
} 

回答

1

你提的問題是非常難以遵循。 ..但我會嘗試通過舉例說明如何使用CDataProvider和CListView來顯示當前登錄用戶所擁有的所有通知。假定公告模型的表格有一個user_id字段,其​​中包含擁有或創建它的用戶的ID。

首先,在你的控制你的indexAction()

// get the logged in user's ID 
$userId = Yii::app()->user->id; 
// now define the dataprovider, which will do the SQL query for you 
$dataProvider = new CActiveDataProvider(// declare a new dataprovider 
    'Announcement', // declare the type of Model you want to query and display 
    array(// here we build the SQL 'where' clause 
    'criteria' => array(// this is just building a CDbCriteria object 
     'condition' => 'user_id=:id', // look for content with the user_id we pass in 
     'params' => array(':id' => $userId), // pass in (bind) user's id to the query 
     //'order'=>'date_modified DESC', // add your sort order if you want? 
     //'with'=>'commentCount', // join in your commentCount table? 
    ) 
) 
); 
$this->render('index',array(// render the Index view 
    'dataProvider'=>$dataProvider, // pass in the data provider 
)); 

然後在您的index.php觀點:

// create the CListView and pass in the $dataProvider we created above, in the indexAction 
$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, // this is the data provider we just created 
    'itemView'=>'_view2', 
    'template'=>'{items}<div>{pager}</div>', 
    'ajaxUpdate'=>false, 
));