簡體   English   中英

如何在Yii中使用CListView自定義dataProvider

[英]How to customize dataProvider using CListView in 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文檔中了解到,$ dataProvider將所有數據存儲在數據庫中,並將其放置在dataProvider本身中,而我的“ _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')));
}
}

您的問題很難回答...但是我將嘗試通過示例說明如何使用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,
));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM