Lors de la requête de données de pagination thinkphp, si le cache est défini, seule la première page sera affichée. Comment le casser ?
C'est-à-dire 12 >> Cet effet apparaît, mais lorsque vous cliquez sur 2, le contenu de la page 1 est toujours affiché.
$count=M('visitdata')->where(array('works_code'=>$get_code))->count();
$Page=nouveau \Think\Page($count,10);
$show=$Page->show();
S($get_code.'visitdata',null); //Si le cache n'est pas vidé au préalable, seule la page 1 sera affichée...
// Effectuer une requête de données de pagination. Si le cache est défini ici, seule la page 1 sera affichée.
M('visitdata')->cache($get_code.'visitdata',60)->where(array('works_code'=>$get_code))->order('visit_id')->limite ($Page->firstRow.','.$Page->listRows)->select();
$cache_visitdata=S($get_code.'visitdata');
$this->assign(array(
'code'=>$get_code,
'visitdata'=>$cache_visitdata
));
$this->assign('page',$show);
$this->display();
12 >> Cet effet apparaît, mais lorsque vous cliquez sur 2, le contenu de la page 1 est toujours affiché.
Comment le casser ?
C'est le tp3.2. Je ne l'ai pas utilisé depuis longtemps et j'ai oublié comment l'utiliser. Le questionneur peut faire ceci :
Obtenir le numéro de page
Vérifiez si le cache correspondant au numéro de page existe (la clé du cache peut s'écrire ainsi :
'content_page_' . $page
)Retour si le cache existe
Si le cache n'existe pas, exécutez la requête de base de données et mettez en cache une copie la prochaine fois que la demande arrivera, elle sera directement mise en cache
Je pense que le principal problème réside dans la valeur de la clé mise en cache.
clé et marque de pagination
Instruction SQL de sortie pour le débogage, voyez d'abord ce que SQL exécute, puis trouvez le problème
Ce que vous avez ici : ->cache($get_code.'visitdata',60)
$get_code.'visitdata' est le même dans le cas de la pagination, il ne sera donc pas mis à jour.
Vous devriez pouvoir inclure le numéro de page dans cette clé.