Pagination Seitenzahl

Hallo ich möchte gerne die Anzahl der angezeigten Seiten bei der Pagination begrenzen. Momentan sind 10 wohl fest eingestellt.

Ich hab schon im Forum gesucht und einen Beitrag von 2011 gefunden bei dem geschrieben wurde, dass der Faktor dafür in den Theme Einstellungen unter Anzeige konfiguriert werden kann. Allerdings habe ich die Theme Einstellungen sowohl von Flow als auch von Azure durchsucht und nichts passendes gefunden.

Kann mir da jemande helfen?

Beste Grüße

Hallo,

beim Theme lässt sich einstellen, wie viele Artikel in einer Artikelliste pro Seite angezeigt werden sollen. Mit der Paginierung hat das aber nichts zu tun.

Gruß
Jürgen

Hi danke für die Antwort, aber ich möchte nicht die Anzahl der Artikel ändern sondern die Anzahl der Seiten die in der Pagination angezeigt werden.

Das haben wir durchaus verstanden, allerdings macht es absolut keinen Sinn die Paginierung irgendwie zu begrenzen, weil die Anzahl der Seiten direkt von der Anzahl der Artikel abhängt und es fraglich ist, warum jemand z.B. nur Seiten 1-5 anzeigen wollen könnte, obwohl es eigentlich 10 Seiten gibt.
Außerdem gabs noch nie eine Theme-Einstellung für Paginierung, daher auch der Hinweis von Juergen Busch für den Fall, dass du die beiden Sachen doch verwechselst (wäre ja nicht ungewöhnlich bei Neulingen :wink: )

Und da war auch schon der entscheidende Hinweis: es gibt keine Einstellung dafür. Daher musst du alle Anpassungen im Code machen.

Auch danke an dich vanilla thunder für die Antwort, aber natürlich kann es durchaus Sinn machen die Anzahl der angezeigten Seiten in der Pagination einzuschränken.

Wenn ich beispielsweise 40 Seiten habe, werden auf Seite 1 standardmäßig nur 9 angezeigt und die letzte Seite 40. Also insgesamt 10. Ich möchte erreichen, dass statt der insgesamt 10 Seitenvorschläge nur 6 angezeigt werden, da mir die Paginationsleiste sonst zu breit wird (vor allem auf Mobilgeräten).

In der pagination.tpl ist dieser Wert nicht festgelegt, also nehme ich an das er in der Datenbank steht?

Nach diesem Thread war die Einstellung früher mal möglich: http://forum.oxid-esales.com/showthread.php?t=24764

Hat denn wirklich niemand eine Idee wie man das lösen kann?

Q&D:
alist.php

protected function _loadArticles($oCategory)
    {
        $myConfig = $this->getConfig();

        $iNrofCatArticles = (int) $myConfig->getConfigParam('iNrofCatArticles');
        $iNrofCatArticles = $iNrofCatArticles ? $iNrofCatArticles : 1;

        // load only articles which we show on screen
        $oArtList = oxNew('oxarticlelist');
        $oArtList->setSqlLimit($iNrofCatArticles * $this->_getRequestPageNr(), $iNrofCatArticles);
        $oArtList->setCustomSorting($this->getSortingSql($this->getSortIdent()));

        if ($oCategory->isPriceCategory()) {
            $dPriceFrom = $oCategory->oxcategories__oxpricefrom->value;
            $dPriceTo = $oCategory->oxcategories__oxpriceto->value;

            $this->_iAllArtCnt = $oArtList->loadPriceArticles($dPriceFrom, $dPriceTo, $oCategory);
        } else {
            $aSessionFilter = oxRegistry::getSession()->getVariable('session_attrfilter');

            $sActCat = oxRegistry::getConfig()->getRequestParameter('cnid');
            $this->_iAllArtCnt = $oArtList->loadCategoryArticles($sActCat, $aSessionFilter);
        }

        $this->_iCntPages = round($this->_iAllArtCnt / $iNrofCatArticles + 0.49);

		[B]if($this->_iCntPages > 10)$this->_iCntPages = 10;[/B]

        return $oArtList;
    }

kann ich nicht nachvollziehen - in flow 4.10.3 sieht es so aus

@patchwork: ich glaube so sieht das aus wenn es nur 9 Seiten gibt. Bei mir gibt es aber 22

@rubbercut: Vielen Dank für die Antwort, aber wenn ich das mache, dann werden nur noch die ersten 10 Seiten angezeigt, egal auf welcher Seite ich bin.

ich glaube so sieht das aus wenn es nur 9 Seiten gibt …

sieht immer so aus - auch 20 und mehr Seite
Welches theme verwendest du?

Flow 4.10.3 …deshalb wundert mich das etwas

sieht aber bei dir anders aus als im Demoshop
http://demoshop.oxid-esales.com/professional-edition/tag/kite/

[QUOTE=shopmajic;187037]
@rubbercut: Vielen Dank für die Antwort, aber wenn ich das mache, dann werden nur noch die ersten 10 Seiten angezeigt, egal auf welcher Seite ich bin.[/QUOTE]

Achso, ich dachte die ersten 10 Seiten. Dann musst Du Dir eine Art “Wanderzirkus” bauen. Könnte in etwa so gehen. $differ bestimmt den Abstand zur aktuellen Seitenwahl:

oxubase.php

public function generatePageNavigation($iPositionCount = 0)
    {
        startProfile('generatePageNavigation');

        $pageNavigation = new stdClass();

        $pageNavigation->NrOfPages = $this->_iCntPages;
        $iActPage = $this->getActPage();
        $pageNavigation->actPage = $iActPage + 1;
        $sUrl = $this->generatePageNavigationUrl();

        if ($iPositionCount == 0 || ($iPositionCount >= $pageNavigation->NrOfPages)) {
            $iStartNo = 2;
            $iFinishNo = $pageNavigation->NrOfPages;
        } else {
            $iTmpVal = $iPositionCount - 3;
            $iTmpVal2 = floor(($iPositionCount - 4) / 2);

            // actual page is at the start
            if ($pageNavigation->actPage <= $iTmpVal) {
                $iStartNo = 2;
                $iFinishNo = $iTmpVal + 1;
                // actual page is at the end
            } elseif ($pageNavigation->actPage >= $pageNavigation->NrOfPages - $iTmpVal + 1) {
                $iStartNo = $pageNavigation->NrOfPages - $iTmpVal;
                $iFinishNo = $pageNavigation->NrOfPages - 1;
                // actual page is in the middle
            } else {
                $iStartNo = $pageNavigation->actPage - $iTmpVal2;
                $iFinishNo = $pageNavigation->actPage + $iTmpVal2;
            }
        }

        if ($iActPage > 0) {
            $pageNavigation->previousPage = $this->_addPageNrParam($sUrl, $iActPage - 1);
        }

        if ($iActPage < $pageNavigation->NrOfPages - 1) {
            $pageNavigation->nextPage = $this->_addPageNrParam($sUrl, $iActPage + 1);
        }

        [B]if ($pageNavigation->NrOfPages > 1) {

            for ($i = 1; $i < $pageNavigation->NrOfPages + 1; $i++) {

                if ($i == 1 || $i == $pageNavigation->NrOfPages || ($i >= $iStartNo && $i <= $iFinishNo)) {
                    $page = new stdClass();
                    $page->url = $this->_addPageNrParam($sUrl, $i - 1);
                    $page->selected = ($i == $pageNavigation->actPage) ? 1 : 0;
                    $pageNavigation->changePage[$i] = $page;
                }
            }

            // first/last one
            $pageNavigation->firstpage = $this->_addPageNrParam($sUrl, 0);
            $pageNavigation->lastpage = $this->_addPageNrParam($sUrl, $pageNavigation->NrOfPages - 1);
        }[/B]

        stopProfile('generatePageNavigation');

        return $pageNavigation;
    }

=>

public function generatePageNavigation($iPositionCount = 0)
    {
        startProfile('generatePageNavigation');

        $pageNavigation = new stdClass();

        $pageNavigation->NrOfPages = $this->_iCntPages;
        $iActPage = $this->getActPage();
        $pageNavigation->actPage = $iActPage + 1;
        $sUrl = $this->generatePageNavigationUrl();

        if ($iPositionCount == 0 || ($iPositionCount >= $pageNavigation->NrOfPages)) {
            $iStartNo = 2;
            $iFinishNo = $pageNavigation->NrOfPages;
        } else {
            $iTmpVal = $iPositionCount - 3;
            $iTmpVal2 = floor(($iPositionCount - 4) / 2);

            // actual page is at the start
            if ($pageNavigation->actPage <= $iTmpVal) {
                $iStartNo = 2;
                $iFinishNo = $iTmpVal + 1;
                // actual page is at the end
            } elseif ($pageNavigation->actPage >= $pageNavigation->NrOfPages - $iTmpVal + 1) {
                $iStartNo = $pageNavigation->NrOfPages - $iTmpVal;
                $iFinishNo = $pageNavigation->NrOfPages - 1;
                // actual page is in the middle
            } else {
                $iStartNo = $pageNavigation->actPage - $iTmpVal2;
                $iFinishNo = $pageNavigation->actPage + $iTmpVal2;
            }
        }

        if ($iActPage > 0) {
            $pageNavigation->previousPage = $this->_addPageNrParam($sUrl, $iActPage - 1);
        }

        if ($iActPage < $pageNavigation->NrOfPages - 1) {
            $pageNavigation->nextPage = $this->_addPageNrParam($sUrl, $iActPage + 1);
        }

       [B] if ($pageNavigation->NrOfPages > 1) {
		$differ = 1;
		$realactpage = $iActPage + 1;
		$min = $realactpage - $differ;
		if($min <= 0){$differ = $differ -($min);}
		$max = $realactpage + $differ;
		if($max >= $pageNavigation->NrOfPages){$min = $min - ($max-$pageNavigation->NrOfPages);}
            for ($i = 1; $i < $pageNavigation->NrOfPages + 1; $i++) {
		if ($i >= $min && $i <= $max ) {
		$page = new stdClass();
		$page->url = $this->_addPageNrParam($sUrl, $i - 1);
		$page->selected = ($i == $pageNavigation->actPage) ? 1 : 0;
		$pageNavigation->changePage[$i] = $page;
		}
            }

            // first/last one
            $pageNavigation->firstpage = $this->_addPageNrParam($sUrl, 0);
            $pageNavigation->lastpage = $this->_addPageNrParam($sUrl, $pageNavigation->NrOfPages - 1);
        }[/B]

        stopProfile('generatePageNavigation');

        return $pageNavigation;
    }

@rubbercut: Wow vielen Dank für die Hilfe! Funktioniert genau wie gewünscht!