Jump to content

(SOLUCIONADO) Datos en modulo


Recommended Posts

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 by [email protected] (see edit history)
Link to comment
Share on other sites

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

spacer.png

Link to comment
Share on other sites

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

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,
                );
    }

 

  • Like 2
Link to comment
Share on other sites

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 by [email protected]
mistake (see edit history)
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...