On 12/31/2019 at 10:07 AM, ventura said:Lo que necesitas entonces es añadir al principio de mimodulo. php los invocadores de las clases que proporcionan toda la info de los productos
use PrestaShop\PrestaShop\Core\Module\WidgetInterface; use PrestaShop\PrestaShop\Adapter\Image\ImageRetriever; use PrestaShop\PrestaShop\Adapter\Product\PriceFormatter; use PrestaShop\PrestaShop\Core\Product\ProductListingPresenter; use PrestaShop\PrestaShop\Adapter\Product\ProductColorsRetriever;
Luego puedes crear una instancia con todos los datos del producto, asi por ejemplo
protected function getLosProductosAMostrar() { $sql =' La consulta con los criterios especificos, con los productos selecionados a mostrar' $products = Db::getInstance()->executeS($sql); $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_for_template = []; foreach ($products as $rawProduct) { $products_for_template[] = $presenter->present( $presentationSettings, $assembler->assembleProduct($rawProduct), $this->context->language ); } return $products_for_template; // Array resultante con toda la info de los productos }Por ultimo se pasa el array de los productos resultantes al archivo .tpl del modulo, con la función especifica
public function getWidgetVariables($hookName = null, array $configuration = []) { $products = $this->getLosProductosAMostrar($productIds); if (!empty($products)) { return array( 'products' => $products, ); }
Muchas gracias por la info.
A ver si mañana puedo hacer las pruebas y os cuento como ha quedado.
A funcionado a la perfección.
Muchas gracias por el código.
saludos.