Lets first understand the problem, if you want a grid view of products on your Prestashop controller in a module like this in the screen shot
how to get this view in Prestashop, will you start this by writing a template and css for the same, I don’t think will be a good idea.
I am telling you a nice and simple way to get this view,
and the amazing fact is that what if there are a new theme installed in the prestashop, yes the solution will be compatible to any theme. see this in Prestashop Responsive Inventive Theme
so lets straight come to the coding part, here the first step is to use some needed packages at the top of your module class,
use PrestaShop\PrestaShop\Adapter\Image\ImageRetriever; use PrestaShop\PrestaShop\Adapter\Product\PriceFormatter; use PrestaShop\PrestaShop\Core\Product\ProductListingPresenter; use PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever;
now create a front controller or hook and return a smarty file from this.
and write the following code on this smarty template file,
{foreach from=$disountProducts item="product"} <li class="wk_product_list col-md-3 col-sm-4 col-xs-12"> {include file="catalog/_partials/miniatures/product.tpl" product=$product} </li> {/foreach}
as you can see this here I have directly include a smarty template file which is including from theme.
so obviously will be compatible with the current theme 🙂
I include the templete file in a foreach loop of products ($disountProducts)
now the question is what is in this variable $disountProducts.
of course the product details, but what is the format and how to create this.
so lets create this array.
/*products to show in grid*/ $discountedProducts = Product::getPricesDrop((int)$this->context->language->id);
here in $discountedProducts key id_products is required, other needed data will be assemble later.
so now the next step is to create the needed class objects,
$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() );
now come to the last step to get the required array.
$products_for_template = []; foreach ($discountedProducts as $productDetail) { $products_for_template[] = $presenter->present( $presentationSettings, $assembler->assembleProduct($productDetail), $this->context->language ); }
here I use $assembler->assembleProduct($productDetail) to assemble the needed product details.
thats it.
$this->context->smarty->assign( 'disountProducts', $products_for_template );
Be the first to comment.