Yii Framework Forum: Pagination && Pagesize - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Pagination && Pagesize pagination Rate Topic: -----

#1 User is offline   dongidong 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 25-January 13

Posted 25 January 2013 - 07:18 PM

Bonsoir tous le monde voilla je debute sur Yii frameworke et je travaille sur un site ou je doit faire un boutton de page size il permettra d'afficher le nombre d'elements par page 8 16 24 .... je ne sais pas comment le faire dans protected/components/clinkPageFrontend j'ai la fonction qui suit:


 public function createPageSizeButtons()
	{
		// possible pageSize
		$list=array(8,16,24,32);
		$lines=array();
		
		// generate pageSize link
		foreach($list as $l)
		{
			if($this->pageSize==$l)
				continue;
			$lines[]='<li><a href="'.$this->getController()->createUrl(Yii::app()->controller->action->id,array('id'=>$this->id,'pageSize'=>$l)).'">'.$l.'</a></li>';
		}
		
		$pageSizeSelect='<div id="resutle">
									<ul id="numbs" onclick="$(this).children(\'ul\').toggle()">
										<li class="push"><span>'.$this->pageSize.'</span><span class="picto"></span></li>
										<ul class="drop">
											'.implode('',$lines).'
										</ul>
									</ul>
									<span class="txt">Résultats par page</span>
								</div>';
		
		return $pageSizeSelect;
	}




ici dans le controller de la page INDEX voila ske jai
 public function actionIndex()
	{
		
		$pageSize=(!empty($_GET['pageSize']))?$_GET['pageSize']:7;
		$marque=(!empty($_GET['m']))?$_GET['m']:null;
		$categorie=(!empty($_GET['c']))?$_GET['c']:null;
		
		$criteria = new CDbCriteria();
		$criteria->compare('id_marque',$marque);
		$criteria->compare('id_categorie',$categorie);
		
		$count=Produit::model()->count($criteria);
		$pages=new CPagination($count);
		
		// results per page
		$pages->pageSize=$pageSize;
		$pages->applyLimit($criteria);
		$criteria->limit=$pages->getLimit();
        $criteria->offset=$pages->getOffset();
		$dataProvider = Produit::model()->findAll($criteria);
		
		
		
		// get categorie/marque id/titre for search purpose
		$sql="select id,titre from categorie WHERE id=:id LIMIT 1";
		$cmd=Yii::app()->db->createCommand($sql);
		$cmd->bindParam(':id',$categorie,PDO::PARAM_INT);	
		$categorieData = $cmd->queryRow();
		
		$sql="select id,titre from marque WHERE id=:id LIMIT 1";
		$cmd=Yii::app()->db->createCommand($sql);
		$cmd->bindParam(':id',$marque,PDO::PARAM_INT);	
		$marqueData = $cmd->queryRow();
		
	
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
			'pagination'=>$pages,
			'pageSize'=>$pageSize,
			'marque'=>$marqueData,
			'categorie'=>$categorieData,
		));
	}



sachant que je n'ai rien ajouter pour crée le boutton de size j'ai juste fait la pagination (suivant precedent)
dans le view voila se que j'ai mis pour afficher les boutton suivant precedent

<div id="contenu" class="container">
					<span id="arrow"></span>		
				   <div id="top_access">
						<div class="clear"></div>
							<div id="bread">
									<?php 
										$this->breadcrumbs=array(
										'Liste produits'
													);	?>
								</div>
							 <div>
									<?php 
										$begin=$pagination->getOffset()+1;
										$end=($pagination->getLimit() * ($pagination->getCurrentPage()+1));
										$end=($end -> $pagination->getItemCount())?$pagination->getItemCount():$end;
										?>
								
										<!--<h3>Affichage de <?php echo $begin; ?> à <?php echo $end; ?> résultats sur <?php echo $pagination->getItemCount();  ?> accessoires correspondants</h3>-->
										
										<?php $this->widget('CLinkPagerFrontend', array(
												'pages' => $pagination,
												'firstPageLabel'=>false,
												'lastPageLabel'=>false,
												'cssFile'=>false,
												'pageSize'=>$pageSize,
												'header'=>false,
												'htmlOptions'=>array('class'=>'pagin'),
											)) ?>	
								
						   </div>
					</div>	
					<div class="clear"></div>
		     </div>



ma questions

comment je vais proceder pour integer le boutton pagesize ?
esque vous pouvais comment fonctionne pagination en detaile et comment faire appelle a elle quand j'en aurais besoin merci ?
0

#2 User is offline   le_top 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 386
  • Joined: 08-June 10
  • Location:France (Ile-de-France/Val d'Oise)

Posted 23 February 2013 - 04:05 PM

Pour cela j'ai fait un Behavior que j'ai attaché au CGridView concerné en mettant dans son template la référence à la méthode créée par ce Behavior. Lorsque le template contient 'pagerlist', le gridview essaie d'appeler la méthode 'renderPagerlist'.



Utilisation du CGridView:
$this->widget(
[size=2]		[/size]CGRIDVIEW, // Constante faisant référence au gridview.
[size=2]            'template'=>CHtml::tag('div',array('class'=>'grid-pager-head'),"{pager} {pagerlist}")."\n{items}\n{exportbuttons}",[/size]
            'behaviors'=>array(
                    array(
                            'class'=>'YPagerListBehavior',
                            'pagerlist'=>array('10'=>10,'25'=>25,'50'=>50,'100'=>100,'300'=>300,'1000'=>1000)
                            )
[size=2]                    ),[/size]



Structure de la classe pour le Pager:
class YPagerListBehavior extends CBehavior {
   public $pagerlist;
   [...]

    public function renderPagerlist()
    {
	[...]
        // Rendu de la liste, ... .
    }
}



Cette technique permet la réutilisation du Pager.
0

#3 User is offline   grandoom 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 34
  • Joined: 11-July 12

Posted 01 March 2013 - 02:34 AM

slt,

ça m'interesse de savoir pourquoi la propriété 'pageSize' de la classe 'CPagination' n'est pas utilisée directement pour répondre à ce besoin?

Apparemment on peut imposer un nombre d'objets par page en passant la valeur à cette propriété...

exemple

function actionIndex(){
    $criteria=new CDbCriteria();
    $count=Article::model()->count($criteria);
    $pages=new CPagination($count);

    // results per page
    $pages->pageSize=10;  //////////////////////////<<<
    $pages->applyLimit($criteria);
    $models=Article::model()->findAll($criteria);

    $this->render('index', array(
    'models' => $models,
         'pages' => $pages
    ));
}


Quelle est la bonne pratique Yii?
Ne pourrait-on pas plutôt traiter ça par une form dans la view qui permet de changer la valeur par defaut de pageSize? ou pas?

cad
un truc du genre dans la view
echo CHtml::form('', 'post', array('class'=>'navbar-form'));
      echo CHtml::dropDownList('pagesizeSelector' , Yii::app()->getPageSize(),array('10','18','24','48'), array(
 		'submit'=>'', 
 		'csrf'=>true, 
 		'class'=>'span1',
 		'id'=>'pagesizeSelector',
		););
      echo CHtml::endForm();


avec une analyse du request dans le controleur

if(Yii::app()->request->getPost('pagesizeSelector') !== null && in_array($_POST['pagesizeSelector'], array('10','18','24','48'), true)){mise à jour de la valeur de pagesize }

avant le traitement du CGridView...
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users