伶俜 2008-9-11 16:18
[原创]Pagination ZF
1. ajouter[b] $sql .= " SQL_CALC_FOUND_ROWS " ;[/b]à la ligne 133 dans zend/db/select.php (soit ajouter $_partsInit =array(self ::SQL_CALC_FOUND_ROWS => false,) et les méthod dans uneclass héritage. mais je trouve que ça ne gène pas toujour faireSQL_CALC_FOUND_ROWS dans une requete select.)
2. Modèle
[i]class Animation extends Zend_Db_Table
{
/**
* The table name.
*
* @var string
*/
protected $_name = 'animation';
public function getCountQuery()
{
$res = $this->_db->fetchRow("SELECT FOUND_ROWS() as total_nombre;");
return $res["total_nombre"];
}
}[/i][i][/i]
3. Controleur
class IndexController extends Zend_Controller_Action[i] public function indexAction() [i] $this->view->page_title = "Albums" ; $Album = new Album() ; $page = (int)$this->_request->getParam(’page’, 0) ; $where = array() ;//à ajouter $sortby = ’title’ ;//à modifier[/i][/i]
[i][i]$this->view->albums = $Album->fetchAll($where,$sortby,NUM_PAR_PAGE,$page*NUM_PAR_PAGE)->toArray() ;[/i][/i]
[i][i]$pagination = new Custom_Pagination($Album->getCountQuery(),$this->_request) ;[/i][/i]
[i][i]$this->view->pagination = $pagination->render() ; [/i][/i]
4.View (smarty)
[i]section name=album loop=$albums[/i][i]/section[/i][table][tr=rgb(255,][td][i]$albums[album].title[/i][/td][td][i]$albums[album].artist[/i][/td][/tr][/table][i]$pagination[/i]5. class Custom_Paginationclass Custom_Pagination[i] private $total_page ; private $total_nombre ; private $page_courante ; private $_request ;[/i]
[i]function __construct($total_nombre,$request) [i] $this->_request = clone $request ; $this->page_courante = $this->_request->getParam("page") ; $this->total_page = ceil($total_nombre/NUM_PAR_PAGE) ; $this->total_nombre = $total_nombre ; [/i][/i]
[i]function render() [i] //à ajouter les pages précédentes, suivantes ....... $html = ’’ ; if($this->total_page > 1) [i] for($i=0 ;$i<$this->total_page ;$i++) [i] if($i>0)$html.= "/" ; $this->_request->setParam("page",$i) ; $html.= ’[url=http://phpwebfrance.free.fr/html/%27.$this-%3ErebuildUrl%28%29.%E2%80%99]’.($i+1).’[/url]’ ; [/i] [/i] return $html ; [/i][/i]
[i]// reconstruire l’URL/album/index/index/page/1,/album/index/index/page/2,... //à améliorer.j’ai essayé $this->_request->setParam("page", $num_page) ; mais$this->_request->getRequestUri ne chage pas, si autre méthod ?function rebuildUrl() [i] $url = $this->_request->getBaseUrl() ; $params = $this->_request->getParams() ; $url .="/".$params["module"] ; $url .="/".$params["controller"] ; $url .="/".$params["action"] ; foreach ( $params as $key=>$value) [i] if( !in_array($key,array("module","controller","action"))) $url.="/".$key."/".$value ; [/i] return $url ; [/i][/i]