<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Commentaires sur : Pagination avec critères de filtrage complexes</title>
	<atom:link href="http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes/feed" rel="self" type="application/rss+xml" />
	<link>http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes</link>
	<description>Le cadre de développement PHP et son utilisation au jour le jour.</description>
	<pubDate>Sat, 17 May 2008 13:13:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>Par : Christophe Cholot</title>
		<link>http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-116</link>
		<dc:creator>Christophe Cholot</dc:creator>
		<pubDate>Thu, 13 Mar 2008 21:26:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-116</guid>
		<description>Hello,

Il est possible déplacer la méthode createStatement dans le modèle PostsCategorie : 

&lt;code&gt;
//app/models/posts_categories.php

function createStatement($data){
  $statement = array();
 
  if(isset($data['category'])){
        array_push($statement, array("{$this-&#62;name}.category_id" =&#62; intval($data['category']));
   return $statement;
  }
&lt;/code&gt;

et d'appeler $this-&#62;PostsCategorie-&#62;createStatement($this-&#62;params['named']), ce qui devrait répondre au besoin imminent. Par contre, pour joindre le modèle User il faudra, à mon avis,  passer par une requete intermediaire et combiner les résultats à l'aide de la fonction array_combine() et de la classe Set, soit écrire les requetes manuellement. :)</description>
		<content:encoded><![CDATA[<p>Hello,</p>
<p>Il est possible déplacer la méthode createStatement dans le modèle PostsCategorie : </p>
<p><code><br />
//app/models/posts_categories.php</p>
<p>function createStatement($data){<br />
  $statement = array();</p>
<p>  if(isset($data['category'])){<br />
        array_push($statement, array(&#8221;{$this-&gt;name}.category_id&#8221; =&gt; intval($data['category']));<br />
   return $statement;<br />
  }<br />
</code></p>
<p>et d&#8217;appeler $this-&gt;PostsCategorie-&gt;createStatement($this-&gt;params['named']), ce qui devrait répondre au besoin imminent. Par contre, pour joindre le modèle User il faudra, à mon avis,  passer par une requete intermediaire et combiner les résultats à l&#8217;aide de la fonction array_combine() et de la classe Set, soit écrire les requetes manuellement. <img src='http://www.formation-cakephp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Fred</title>
		<link>http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-115</link>
		<dc:creator>Fred</dc:creator>
		<pubDate>Thu, 13 Mar 2008 14:24:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-115</guid>
		<description>Salut Christophe,

Je reviens vers vous après plusieurs tentatives infructueuses, également du côté du Bakery ou de google groupes.
Mais cela pourrait s'avérer utile à d'autres, aussi je formule le problème si vous aviez le temps de le voir;

Vous avez ici un modèle Post tel que ;
$belongsTo = array ('User' =&#62; array('className' =&#62; 'User','foreignKey'=&#62;'user_id'));

Votre méthode createStatement va fournir un tableau de conditions liés au modèle Post : $this-&#62;Paginate('Post',...

Si j'ai maintenant des posts qui ont une ou plusieurs catégories, tel que :
var $hasAndBelongsToMany = array('Categorie' =&#62;
                               array('className'    =&#62; 'Categorie',
                                     'joinTable'    =&#62; 'posts_categories',
                                     'foreignKey'   =&#62; 'post_id',
                                     'associationForeignKey'=&#62; 'categorie_id',
                                     'conditions'   =&#62; '',
                                     'order'        =&#62; '',
                                     'limit'        =&#62; '',
                                     'unique'       =&#62; true,
                                     'finderQuery'  =&#62; '',
                                     'deleteQuery'  =&#62; '',
                                     'with'			=&#62; 'PostsCategorie'
                               )


Je vais pouvoir filtrer par catégorie sans passer par createStatement tel que :
$articles = $this-&#62;paginate('PostsCategorie',array('PostsCategorie.categorie_id' =&#62; intval($this-&#62;params['named']['Categorie'])));

Ca fonctionne bien, mais si je dois ajouter un filtre par catégorie et par user, la méthode paginate ne peut s'appliquer aux deux.
Bref, je ne vois pas comment filtrer dans cet exemple par catégorie (et plus) en utilisant la méthode createStatement ?

J'ai bien regardé aussi la méthode du bakery qui n'est pas viable pour les multiples HATBM :
http://bakery.cakephp.org/articles/view/pagination</description>
		<content:encoded><![CDATA[<p>Salut Christophe,</p>
<p>Je reviens vers vous après plusieurs tentatives infructueuses, également du côté du Bakery ou de google groupes.<br />
Mais cela pourrait s&#8217;avérer utile à d&#8217;autres, aussi je formule le problème si vous aviez le temps de le voir;</p>
<p>Vous avez ici un modèle Post tel que ;<br />
$belongsTo = array (&#8217;User&#8217; =&gt; array(&#8217;className&#8217; =&gt; &#8216;User&#8217;,'foreignKey&#8217;=&gt;&#8217;user_id&#8217;));</p>
<p>Votre méthode createStatement va fournir un tableau de conditions liés au modèle Post : $this-&gt;Paginate(&#8217;Post&#8217;,&#8230;</p>
<p>Si j&#8217;ai maintenant des posts qui ont une ou plusieurs catégories, tel que :<br />
var $hasAndBelongsToMany = array(&#8217;Categorie&#8217; =&gt;<br />
                               array(&#8217;className&#8217;    =&gt; &#8216;Categorie&#8217;,<br />
                                     &#8216;joinTable&#8217;    =&gt; &#8216;posts_categories&#8217;,<br />
                                     &#8216;foreignKey&#8217;   =&gt; &#8216;post_id&#8217;,<br />
                                     &#8216;associationForeignKey&#8217;=&gt; &#8216;categorie_id&#8217;,<br />
                                     &#8216;conditions&#8217;   =&gt; &#8221;,<br />
                                     &#8216;order&#8217;        =&gt; &#8221;,<br />
                                     &#8216;limit&#8217;        =&gt; &#8221;,<br />
                                     &#8216;unique&#8217;       =&gt; true,<br />
                                     &#8216;finderQuery&#8217;  =&gt; &#8221;,<br />
                                     &#8216;deleteQuery&#8217;  =&gt; &#8221;,<br />
                                     &#8216;with&#8217;			=&gt; &#8216;PostsCategorie&#8217;<br />
                               )</p>
<p>Je vais pouvoir filtrer par catégorie sans passer par createStatement tel que :<br />
$articles = $this-&gt;paginate(&#8217;PostsCategorie&#8217;,array(&#8217;PostsCategorie.categorie_id&#8217; =&gt; intval($this-&gt;params['named']['Categorie'])));</p>
<p>Ca fonctionne bien, mais si je dois ajouter un filtre par catégorie et par user, la méthode paginate ne peut s&#8217;appliquer aux deux.<br />
Bref, je ne vois pas comment filtrer dans cet exemple par catégorie (et plus) en utilisant la méthode createStatement ?</p>
<p>J&#8217;ai bien regardé aussi la méthode du bakery qui n&#8217;est pas viable pour les multiples HATBM :<br />
<a href="http://bakery.cakephp.org/articles/view/pagination" rel="nofollow">http://bakery.cakephp.org/articles/view/pagination</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Fred</title>
		<link>http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-114</link>
		<dc:creator>Fred</dc:creator>
		<pubDate>Tue, 11 Mar 2008 06:18:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-114</guid>
		<description>Super Christophe, je te remercie de ton aide :)</description>
		<content:encoded><![CDATA[<p>Super Christophe, je te remercie de ton aide <img src='http://www.formation-cakephp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Christophe Cholot</title>
		<link>http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-113</link>
		<dc:creator>Christophe Cholot</dc:creator>
		<pubDate>Mon, 10 Mar 2008 20:25:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-113</guid>
		<description>Si tu utilises une route admin, il faut préciser au paginator d'utiliser l'action en cours sans le prefix admin.  
Ce "problème" avait été signalé à l'équipe de développement par l'intermédiaire du Trac. En attendant, il est possible de résoudre ce problème très simplement en "forcant" la main au paginator : 

Dans la vue concernée, il suffit d'ajouter : 

$paginator-&#62;options(array('url' =&#62; isset($this-&#62;params['named']) ? $this-&#62;params['named'] : array())); 
	$paginator-&#62;params['action'] = str_replace(Configure::read('Routing.admin') . '_', '', $this-&#62;action);	
</description>
		<content:encoded><![CDATA[<p>Si tu utilises une route admin, il faut préciser au paginator d&#8217;utiliser l&#8217;action en cours sans le prefix admin.<br />
Ce &#8220;problème&#8221; avait été signalé à l&#8217;équipe de développement par l&#8217;intermédiaire du Trac. En attendant, il est possible de résoudre ce problème très simplement en &#8220;forcant&#8221; la main au paginator : </p>
<p>Dans la vue concernée, il suffit d&#8217;ajouter : </p>
<p>$paginator-&gt;options(array(&#8217;url&#8217; =&gt; isset($this-&gt;params['named']) ? $this-&gt;params['named'] : array()));<br />
	$paginator-&gt;params['action'] = str_replace(Configure::read(&#8217;Routing.admin&#8217;) . &#8216;_&#8217;, &#8221;, $this-&gt;action);</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Fred</title>
		<link>http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-112</link>
		<dc:creator>Fred</dc:creator>
		<pubDate>Mon, 10 Mar 2008 17:01:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-112</guid>
		<description>Merci beaucoup,
Ce qui ne parait pas évident, c'est de retrouver toutes les conditions passées par le paginator avec $paginator-&#62;next ou $paginator-&#62;prev

J'ai bien essayé un :
echo $paginator-&#62;next('Suivant',
									array('url' =&#62; isset($this-&#62;params['named']) ? $this-&#62;params['named']:array())
									); 

Mais il va me renvoyer vers :
controller/admin_index/les_arguments
au lieu de me renvoyer vers :
controller/index/les_arguments</description>
		<content:encoded><![CDATA[<p>Merci beaucoup,<br />
Ce qui ne parait pas évident, c&#8217;est de retrouver toutes les conditions passées par le paginator avec $paginator-&gt;next ou $paginator-&gt;prev</p>
<p>J&#8217;ai bien essayé un :<br />
echo $paginator-&gt;next(&#8217;Suivant&#8217;,<br />
									array(&#8217;url&#8217; =&gt; isset($this-&gt;params['named']) ? $this-&gt;params['named']:array())<br />
									); </p>
<p>Mais il va me renvoyer vers :<br />
controller/admin_index/les_arguments<br />
au lieu de me renvoyer vers :<br />
controller/index/les_arguments</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Christophe Cholot</title>
		<link>http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-111</link>
		<dc:creator>Christophe Cholot</dc:creator>
		<pubDate>Sat, 08 Mar 2008 22:45:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-111</guid>
		<description>Bonjour,
L'intérêt de cette méthode est justement de pas avoir à modifier les vues existantes tout en y appliquant des critères de filtrage complexe.  Dans "archive.ctp" il suffit simplement , comme precisé dans le tutorial d'ajouter la ligne suivante : &lt;code&gt; $paginator-&#62;options(array('url' =&#62; isset($this-&#62;params['pass'])?$this-&#62;params['pass']:array())); &lt;/code&gt; 
pour profiter des fonctions habituelles du Paginator (pagination, statistiques, tri..).
Cependant il est toujours possible de manipuler les variables passées dans l'URL à l'aide de &lt;code&gt;$this-&#62;params['named']&lt;/code&gt;.</description>
		<content:encoded><![CDATA[<p>Bonjour,<br />
L&#8217;intérêt de cette méthode est justement de pas avoir à modifier les vues existantes tout en y appliquant des critères de filtrage complexe.  Dans &#8220;archive.ctp&#8221; il suffit simplement , comme precisé dans le tutorial d&#8217;ajouter la ligne suivante : <code> $paginator-&gt;options(array('url' =&gt; isset($this-&gt;params['pass'])?$this-&gt;params['pass']:array())); </code><br />
pour profiter des fonctions habituelles du Paginator (pagination, statistiques, tri..).<br />
Cependant il est toujours possible de manipuler les variables passées dans l&#8217;URL à l&#8217;aide de <code>$this-&gt;params['named']</code>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Fred</title>
		<link>http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-110</link>
		<dc:creator>Fred</dc:creator>
		<pubDate>Sat, 08 Mar 2008 12:48:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/30/pagination-avec-criteres-de-filtrage-complexes#comment-110</guid>
		<description>Bonjour Christophe,

Comment utilises-tu les paramètres passés dans l'url avec le paginator ?
Ton dernier exemple manque de détail dans archives.ctp.
Merci de ton retour :)</description>
		<content:encoded><![CDATA[<p>Bonjour Christophe,</p>
<p>Comment utilises-tu les paramètres passés dans l&#8217;url avec le paginator ?<br />
Ton dernier exemple manque de détail dans archives.ctp.<br />
Merci de ton retour <img src='http://www.formation-cakephp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
</channel>
</rss>
