it-swarm.com.de

Die manuelle Übersteuerung der Paginierung im Modell gibt 0 Elemente zurück

20150203 - Der von 'JModelLegacy' geänderte Titel gibt 0 Elemente zurück, wenn Limit 0 und Limitstart> 0 festgelegt werden, da der Titel nicht mehr passt.

Ich entwickle eine Komponente und habe nach einiger Zeit ein sehr merkwürdiges Phänomen festgestellt.

In meinem Frontend können Sie ein Paginierungslimit festlegen, um eine definierte Anzahl von Elementen anzuzeigen. Auf den ersten Blick sieht alles gut aus.

Unter verschiedenen Umständen habe ich keine Artikel zurückbekommen. Deshalb habe ich angefangen, den Code zu debuggen.

Im Vorgängermodell von Joomla \libraries\legacy\model\legacy.php Gibt es eine Funktion _getList($query, $limitstart = 0, $limit = 0), die für die Initiierung der Abfrage und die Rückgabe der Ergebnisse verantwortlich ist. Und hier ist mein Problem:

Wenn $ limitstart einen Wert> 0 und $ limit = 0 hat, werden keine Elemente zurückgegeben. Dieses Problem tritt auf, wenn Sie mit der Paginierung zur letzten Site wechseln. Das Limit wird auf 0 gesetzt, da es kein Limit mehr gibt. Es sollen nur die letzten Ergebnisse angezeigt werden, z. $ startlimit = 15 und $ total = 18, aber die erwähnte Funktion gibt 0 zurück.

Was ist hier los? Kann jemand helfen?

2
Perino

Das Limit wird auf 0 gesetzt, da es kein Limit mehr gibt. - FALSE!

$limit Sollte niemals 0 sein. Limit ist die maximale Anzahl von Datensätzen, die zurückgegeben werden sollen, daher kann sie nicht 0 sein. Wenn Sie weiter durch die Seiten blättern, ändert sich das Limit auch für die letzte Seite nicht.

Wahrscheinlich haben Sie etwas falsch konfiguriert oder setzen es absichtlich auf 0.

Ich mache hier einige Annahmen und rate, woran es liegen könnte. Da Sie die Legacy-Klasse nicht direkt verwenden können, gehe ich davon aus, dass Sie tatsächlich JModelList verwenden/erben und die Methode getItems() aufrufen.

_getList($query, $this->getStart(), $this->getState('list.limit'));

Wie Sie sehen, wird eine Statusvariable aufgerufen:

$this->getState('list.limit')

Stellen Sie sicher, dass diese Statusvariable festgelegt ist und einen anderen Wert als null oder 0 hat.

Hoffe das hilft.

1
Valentin Despa