20150203 - Le titre a été remplacé par 'JModelLegacy renvoie 0 élément lors du paramétrage de limit 0 et limitstart> 0' car le titre ne correspondait plus.
Je développe un composant et après un certain temps de débogage, j'ai trouvé un phénomène très étrange.
Dans mon interface, vous pouvez définir une limite de pagination pour afficher une limite définie d'éléments. Tout a l'air bien au premier regard.
Dans plusieurs circonstances, je n’ai récupéré aucun article. C'est pourquoi j'ai commencé à déboguer le code.
Dans le modèle hérité de Joomla \libraries\legacy\model\legacy.php
, Il existe une fonction _getList($query, $limitstart = 0, $limit = 0)
, chargée de lancer la requête et de renvoyer les résultats. Et voici mon problème:
Si $ limitstart a une valeur> 0 et que $ limit = 0, aucun élément ne sera renvoyé. Ce problème se pose lorsque vous basculez avec la pagination sur le dernier site. La limite sera fixée à 0 car il n'y en a plus. Seuls les derniers résultats doivent être affichés, par exemple. $ startlimit = 15 et $ total = 18, mais la fonction mentionnée renvoie 0.
Quel est le problème ici? Quelqu'un peut aider?
La limite sera fixée à 0 car il n'y en a plus. - FALSE!
$limit
Ne doit jamais être 0. Limite est le nombre maximum d'enregistrements à renvoyer, donc ne peut pas être 0. Si vous continuez à parcourir les pages, la limite ne changera pas, même pour la dernière page.
Vous avez probablement quelque chose de mal configuré ou vous le fixez exprès à 0.
Je fais certaines hypothèses ici et je devine quel pourrait être le problème. Comme vous ne pouvez pas utiliser directement la classe Legacy, je suppose que vous utilisez/héritez de JModelList
en appelant la méthode getItems()
.
_getList($query, $this->getStart(), $this->getState('list.limit'));
Comme vous pouvez le constater, il existe un appel à une variable d'état:
$this->getState('list.limit')
Vérifiez que cette variable d'état est définie et que sa valeur est différente de null ou de 0.
J'espère que cela t'aides.