Infinite Scrolling / Pagination / Artikellistung / Seite 2, 3, usw. funktioniert nicht. Zeigt nur eine 1

Hallo

Nach Update auf 5.7.16 funktioniert die Pagination bzw. das Infinite Scrolling nicht mehr.
Wird Seite 2, 3, 4, usw. aufgerufen, dann wird statt des Artikel-Listing nur eine 1 angezeigt.

Hat jemand eine Idee, woran das liegen könnte.
Cache geleert, Theme kompiliert …
Produktion- in Bearbeitungsmodus …
Bringt alles nichts.

Danke

Tom

Das Infinite Scrolling wird mit JavaScript gesteuert. Wird nun JavaScript durch einen Fehler nicht korrekt ausgeführt, dann hängt auch dieses Scrolling.

Idee?

Vielleicht mal mit F12 die Entwicklerkonsole vom Browser aufrufen und schauen ob dort Fehler beim JavaScript stehen. Falls nichts, könnte es ggf. auch am Theme liegen. Dann zum Test mal auf das originale Shopware Theme umstellen und schauen ob es dann funktioniert.

Der Effekt tritt bei uns seit Update auf 5.7.16 ebenfalls auf. Bei Klick auf eine andere Seite in der Listenansicht, Nutzung der Filter oder der Sortierung, werden als Liste und als Paginierung nur eine „1“ angezeigt.
Wird die Seite anschließend neu geladen (die URL hat sich durch den vorherigen Klick bereits geändert) wird der gewünschte Inhalt angezeigt.
Der Effekt tritt ebenfalls auf, wenn anstelle des individuellen Themes das Standard-Responsive-Theme verwendet wird. Dann werden die 1en allerdings dem Inhalt hinzugefügt.

Bei uns war die Methode setSearchResultResponse() (in engine/Shopware/Controllers/Widgets/Listing.php in Zeile 321) der Übeltäter. Ich habe sie durch die alte Methode ersetzt und die beiden davon benutzten Methoden fetchListing() und fetchPagination() ebenfalls wieder ergänzt. Damit läuft es.

    private function setSearchResultResponse(ProductSearchResult $result)
    {
        $body = [
            'totalCount' => $result->getTotalCount(),
        ];

        if ($this->Request()->getParam('loadFacets')) {
            $body['facets'] = array_values($result->getFacets());
        }
        if ($this->Request()->getParam('loadProducts')) {
            $body['listing'] = $this->fetchListing($result);
            $body['pagination'] = $this->fetchPagination($result);
        }
        $this->View()->assign($body);

        $this->Response()->headers->set('Shopware-Listing-Total', (string) $result->getTotalCount());
    }
    /**
     * @return string
     */
    private function fetchListing(ProductSearchResult $result)
    {
        $categoryId = (int) $this->Request()->getParam('sCategory');

        if ($this->Request()->has('productBoxLayout')) {
            $boxLayout = $this->Request()->get('productBoxLayout');
        } else {
            $boxLayout = $this->get(Shopware_Components_Config::class)->get('searchProductBoxLayout');
            if ($categoryId) {
                $boxLayout = Shopware()->Modules()->Categories()->getProductBoxLayout($categoryId);
            }
        }

        $products = $this->convertProductsResult($result, $categoryId);

        $this->loadThemeConfig();

        $this->View()->assign([
            'sArticles' => $products,
            'pageIndex' => (int) $this->Request()->getParam('sPage'),
            'productBoxLayout' => $boxLayout,
            'sCategoryCurrent' => $categoryId,
            'sCategoryContent' => Shopware()->Modules()->Categories()->sGetCategoryContent($categoryId),
        ]);

        $this->get('events')->notify('Shopware_Controllers_Widgets_Listing_fetchListing_preFetch', [
            'result' => $result,
            'subject' => $this,
        ]);

        return $this->View()->fetch('frontend/listing/listing_ajax.tpl');
    }

    /**
     * @return string
     */
    private function fetchPagination(ProductSearchResult $result)
    {
        $sPerPage = (int) $this->Request()->getParam('sPerPage');

        if ($sPerPage <= 0) {
            $sPerPage = 1;
        }

        $this->View()->assign([
            'sPage' => (int) $this->Request()->getParam('sPage'),
            'pages' => ceil($result->getTotalCount() / $sPerPage),
            'baseUrl' => $this->Request()->getBaseUrl() . $this->Request()->getPathInfo(),
            'pageSizes' => explode('|', $this->container->get(\Shopware_Components_Config::class)->get('numberArticlesToShow')),
            'shortParameters' => $this->container->get(QueryAliasMapper::class)->getQueryAliases(),
            'limit' => $sPerPage,
        ]);

        $this->get('events')->notify('Shopware_Controllers_Widgets_Listing_fetchPagination_preFetch', [
            'result' => $result,
            'subject' => $this,
        ]);

        return $this->View()->fetch('frontend/listing/actions/action-pagination.tpl');
    }
1 Like

tausend dank.
das war tatsächlich das problem.
darf ich fragen, wie du darauf gekommen bist?

gruß
tom

Hallo Tom,
schön das ich dir helfen konnte.
Ich habe mir angeschaut, welche Dateien im 5.7.16er-Update enthalten waren, diese auf Dateien eingeschränkt, die sich mit der Artikelliste bzw. den Filtern beschäftigen und darin nach Methoden gesucht, die für die Suche oder Listendarstellung zuständig sind. Dann habe ich die mit der gleichen Methode aus dem Backup verglichen und einfach mal ausgetauscht.
Gruß
LD