[email protected] Posted December 30, 2019 Share Posted December 30, 2019 (edited) Buenas a todos. Estoy creando un módulo donde visualizo algunos artículos y quería saber como obtener los siguientes datos que si veo en la ficha de producto: Estoy hablando del tpl: themes\classic\templates\catalog\_partials\product-prices.tpl 1) Hay una serie de datos que parecen en el array de producto, cuando llamamos a su ficha: [has_discount] => 1 [discount_type] => percentage [discount_percentage] => -10% [discount_percentage_absolute] => 10% [discount_amount] => 0,41 € [discount_amount_to_display] => -0,41 € [price_amount] => 3.72 [regular_price_amount] => 4.13 [regular_price] => 4,13 € [discount_to_display] => 0,41 € [unit_price_full] => [show_availability] => 1 [availability_date] => [availability_message] => En Stock [availability] => available 2) Lo mismo con las flags, themes\classic\templates\catalog\_partials\product-flags.tpl No se a que funcion o class llamar para obtener estos valores desde mi módulo Gracias por la ayuda. Edited January 2, 2020 by [email protected] (see edit history) Link to comment Share on other sites More sharing options...
ventura Posted December 30, 2019 Share Posted December 30, 2019 Depende del controller , si es la pagina de producto, en alguno de sus hook, eg displayProductAdditionalInfo Se puede utilizar esta instancia con un array que incluye todas las variables de la pagina de producto $product = $this->context->controller->getProduct(); En las ultimas versiones de Prestashop, los tradicionales objetos (Products, Orders ..) han sido reemplazados por instancias LazyArray Link to comment Share on other sites More sharing options...
[email protected] Posted December 30, 2019 Author Share Posted December 30, 2019 Ventura, gracias por responder. Me explico mejor. Quiero crear un módulo que es un slide de productos. Se mostrará en un hook de producto (aún no he decido cual, pero no creo que tenga importancia) Imagina que tengo 10 productos en mi catálogo, Referencias de 1 a 10. Alguien visualiza el 1 y yo le intento colocar en el slide el 2 y 3. En mi módulo hago las llamadas: $product[2] = new Product(2,false,$lang,$shop); $product[3] = new Product(3,false,$lang,$shop); En esas respuestas no tengo los datos que os pongo, supongo que prestashop de algun modo hace esos calculos en alguna class pero no soy capaz a que me los de o me los calcule. Una vez que tuviera esos datos ya en la tpl del propio módulo las colocaria al gusto. Lo último que comentas LazyArray, como llamo a esa instancia? Veo que en el archivo: src\Adapter\Presenter\Product\ProductLazyArray.php si existe la llamada al [has_discount] por ejemplo. como utilizo esta class? Como la llamo para que me de los datos que busco? Gracias. Link to comment Share on other sites More sharing options...
luishuaymana Posted December 30, 2019 Share Posted December 30, 2019 SI se puede realizar pero los productos en el slider seran consecutivos? o son productos seleccionados. ejemplo: producto 1 : se ven producto (2-3-4-5) producto 2 : se ven producto (3-4-5) o aleatorio o selecionado? Link to comment Share on other sites More sharing options...
[email protected] Posted December 31, 2019 Author Share Posted December 31, 2019 Gracias luishuaymana por contestar. Los productos salen de un aleatorio previo, (en un futuro incluiré que se puedan seleccionar para un producto concreto sus "asociados"). Link to comment Share on other sites More sharing options...
ventura Posted December 31, 2019 Share Posted December 31, 2019 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, ); } 2 Link to comment Share on other sites More sharing options...
[email protected] Posted December 31, 2019 Author Share Posted December 31, 2019 (edited) 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. Edited January 2, 2020 by [email protected] mistake (see edit history) 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