R4xx4r Posted July 13, 2020 Share Posted July 13, 2020 (edited) Hallo ihr, Neue Woche ... neue Frage ... Ich hoffe bald macht es klick und ich kann mein Wissen zurück geben und euch auch helfen DANKE für eure Geduld! Ich arbeite gerade an einem Modul welches mir ausgewählte Produkte in das default products.tpl injecten soll. So eine Art "TOP PRODUKTE" section. Das Backend ist fertig und ich bekomme auch mein Array an Produkt ID's zurück. Das Ziel ist es jetzt die Produktinfos zu bekommen und an das default template einer frischen PrestaShop Installation zu übergeben. Hier dachte ich an themes\classic\templates\catalog\_partials\products.tpl Jetzt ist mein großes Problem, dass ich es nicht schaffe meine Daten in die gleiche Struktur zu bekommen wie es das Standard Template benötigt. Wenn ich zB Die Suche debugge - welche auch dieses Template nutzt - sehe ich, dass ein Product vom Typ object(PrestaShop\PrestaShop\Adapter\Presenter\Product\ProductListingLazyArray ist, sprich ich habe dieses ProductListingLazyArray und daraus zieht er sich dann in den einzelnen Templates alle Infos wie {$product.id_product} oder {$product.url} usw. Da ich "meine" Produkte mit $product = new Product($productId, true); erstelle habe ich aber natürlich kein ProductListingLazyArray sondern ein Objek vom Typ Product. Habt ihr vlt einen Tipp wie ich das umwandeln kann oder bin ich komplett auf dem falschen Weg? DANKE und einen schönen Start in die Woche! LG, Edited July 13, 2020 by R4xx4r solved the issue (see edit history) Link to comment Share on other sites More sharing options...
R4xx4r Posted July 13, 2020 Author Share Posted July 13, 2020 Ich beantworte meine Frage selbst, da ich es jetzt doch geschafft habe Hier meine Methode mit der ich das ganze mache. /** * creates relevant product information for frontend output * * @param array $allSelectedProductIds array with all id's of the selected products * @param int $languageId language id of the shop you are in * * @return array all product information we need for our frontend rendering */ public function getFrontendProductInformation($allSelectedProductIds, $languageId) { // set default category Home $category = new Category((int)2); // create new product search proider $searchProvider = new CategoryProductSearchProvider( $this->context->getTranslator(), $category ); // set actual context $context = new ProductSearchContext($this->context); // create new search query $query = new ProductSearchQuery(); $query->setResultsPerPage(PHP_INT_MAX)->setPage(1); $query->setSortOrder(new SortOrder('product', 'position', 'asc')); $result = $searchProvider->runQuery( $context, $query ); // Product handling - to get relevant data $assembler = new ProductAssembler($this->context); $presenterFactory = new ProductPresenterFactory($this->context); $presentationSettings = $presenterFactory->getPresentationSettings(); $presenter = new ProductListingPresenter( new ImageRetriever( $this->context->link ), $this->context->link, new PriceFormatter(), new ProductColorsRetriever(), $this->context->getTranslator() ); $products = array(); foreach ($result->getProducts() as $rawProduct) { $productId = $rawProduct['id_product']; if(in_array($productId, $allSelectedProductIds)) { $product = $presenter->present( $presentationSettings, $assembler->assembleProduct($rawProduct), $this->context->language ); array_push($products, $product); } } return $products; } sprich ich erzeuge mir einfach eine art "fake suche" und gleiche das Suchergebnis, dann mit den von mir gewählten Produkten ab. Ich hoffe, dass hilft vlt doch dem ein oder anderen. Wenn nicht gerne fragen und ich versuche es genauer zu erklären LG 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now