Paginierungsverwirrung - Paginierung verwendet Start, PopulateState verwendet Limitstart?

7

Ich bin ein bisschen verwirrt.

Wenn ich mir den durch Paginierung erstellten Link im Front-End anschaue, sehe ich einen Abfrageparameter namens start, der in den einzelnen Seitenzahlen-Links und Start- und End-Links enthalten ist.

Die Methode populateStatein der Basisklasse JModelListsucht jedoch nach limitstartif $this->contexta non null value.

Da der Basiskonstruktor für JModelListMengen $this->context, die gleich sind, <component_name>.<model_name>im Standardfall $this->contextnicht null ist, weist populateState normalerweise den Wert aus der $_GET['limitstart']Verwendung zu, getUserStateFromRequest()wie der abgeschnittene Code zeigt:

$value = $app->getUserStateFromRequest($this->context . '.limitstart', 'limitstart', 0);
$limitstart = ($limit != 0 ? (floor($value / $limit) * $limit) : 0);
$this->setState('list.start', $limitstart); 

Ich wäre wirklich dankbar, wenn jemand erklären könnte, warum die Dinge so gemacht werden und was ich tun muss, damit populateState und Paginierung sich auf die Variable einigen, die die Zeile enthält, mit der die Seite beginnen soll.

TIA.

Nick Weavers
quelle
Wenn Sie die Standardpaginierung verwenden, indem Sie die $pagination = $this->get('Pagination');Ansichtsdatei aufrufen, sind die erforderlichen Statusvariablen in der populateState-Methode des Modells auf diese Weise leicht zu verstehen -$limit= $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'uint'); $this->setState('list.limit', $limit); $limitstart = JRequest::getUInt('limitstart', 0); $this->setState('list.start', $limitstart);
dev-m
Wie ich antwortete, ist dies das, was Sie im Grunde tun werden, indem Sie die populateState () -Methode in Ihrer von jmodellist erweiterten Modellklasse überschreiben. Andernfalls würden Sie mit übergeordneten Klassencodes durcheinander gebracht.
dev-m
Vielen Dank an @professional für die Bereitstellung der Lösung. Ich denke, der Wechsel zwischen Start und Limitstart hat etwas mit SEF zu tun, aber ich habe noch nicht herausgefunden, wo sich der Schalter befindet. Könnten Sie Ihre Antwort als Antwort posten und ich werde es akzeptieren.
Nick Weavers

Antworten:

3

Einige Standardcodes sind verwirrend, da Joomla diese für Prozesse verwendet, die vom Rendern der Seite bis zum Ende der Seite reichen. Gemäß den Anforderungen muss die Paginierung nach zwei festgelegten Statusvariablen festgelegt werden. Daher müssen Sie die überschriebene populateState () -Methode Ihres Modells (source - com_weblinks) festlegen.

// List state information
$limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'uint');
$this->setState('list.limit', $limit);

$limitstart = JRequest::getUInt('limitstart', 0);
$this->setState('list.start', $limitstart);

Wenn Sie sich die Methode getPagination () in der übergeordneten Klasse jmodellist ansehen, können Sie außerdem eine Vorstellung davon bekommen, wie Dinge aus Statusvariablen berechnet werden, um die Paginierung anzuzeigen.

dev-m
quelle