Logo de islavisual
Isotipo de islavisual IslaVisual
imagen de sección

Ultima revisión 24/11/2012

Consultar datos de PrestaShop para mostrarlos en el Front-Office

Cualquier módulo que creemos tendrá que mostrar cierta información en pantalla, o tener alguna clase de funcionalidad. En nuestro caso queremos que se muestre información sobre las ofertas especiales de nuestra tienda. Para ello, vamos a modificar el método function hookLeftColumn($params) qué es el encargado de mostrar nuestro bloque en la columna izquierda.

Esta funcionalidad ya la ofrece el blockSpecials, pero como ejemplo, no vamos a complicarlo y, porque no decirlo, es un buen ejemplo práctico. Este ejemplo además es una modificación del artículo Crear un Módulo en PrestaShop: Mi primer Módulo descrito anteriormente.

Si la lógica de negocio se ejecuta desde la capa de controlador y las vistas en la capa Vista (presentación), si queremos dar una nueva funcionalidad a nuestro módulo para realizar las consultas oportunas para recuperar la información deseada en moduletesting.php y más tarde lo trataremos en la vista moduletesting.tpl.

public function hookLeftColumn( $params ){
    global $smarty;
 
    if ($special = Product::getRandomSpecial(intval($params['cookie']->id_lang)))
        $smarty->assign(array(
        'special' => $special,
        'priceWithoutReduction_tax_excl' => Tools::ps_round($special['price_without_reduction'] / (1 + $special['rate'] / 100), 2),
        'oldPrice' => $special['price'] + $special['reduction'],
        'mediumSize' => Image::getSize('medium')));

    return $this->display(__FILE__, 'testModule.tpl');
}

Primero, definimos una variable global $smarty, que será el array dónde almacenaremos cualquier información que queramos que esté disponible desde las vistas (archivos TPL).

Después creamos una variable $special para almacenar los resultados de nuestra consulta, y para ello utilizamos la función getRandomSpecial de la clase Product que nos ofrece PrestaShop.

Una vez recuperada la información, como decía, la enviamos a la capa de presentación, asignando a la variable global $smarty un índice llamado special que contendrá el array con los resultados de la consulta de nuestra base de datos.

Recorrer los datos anteriores y mostrarlos

Para recorrer los datos en nuestro bloque del frontOffice deberemos recuperar la información del array global $smarty.

<!-- Block Module_Testing -->
<div id="module_testing_block_left" class="block">
     <h3>Bienvenido</h3>
     <div class="block_content">
          {if $special}
               <ul class="products">
                    <li class="product_image">
                         <a href="{$special.link}">
                              <img title="{$special.name|escape:html:'UTF-8'}" src="{$link->getImageLink($special.link_rewrite, $special.id_image, 'medium')}" alt="{$special.legend|escape:html:'UTF-8'}" width="{$mediumSize.width}" height="{$mediumSize.height}" />
                         </a>
                    </li>
                    <li>
                         <h4>
                              <a title="{$special.name|escape:html:'UTF-8'}" href="{$special.link}">{$special.name|escape:html:'UTF-8'}</a>
                         </h4>
                         <span class="price-discount">
                              {if !$priceDisplay}
               {displayWtPrice p=$special.price_without_reduction}
                              {else}
               {displayWtPrice p=$priceWithoutReduction_tax_excl}
                              {/if}
                         </span>
                         {if $special.reduction_percent}
                              <span class="reduction">
               (-{$special.reduction_percent}%)
                              </span>
                         {/if}
                    <span class="price">
                              {if !$priceDisplay} {displayWtPrice p=$special.price}
                              {else} {displayWtPrice p=$special.price_tax_exc} {/if}
                         </span>
                    </li>
               </ul>
               <a class="button_large" title="{l s='Todas las Ofertas' mod='ModuleTesting'}" href="{$base_dir}prices-drop.php">{l s='Todas las Ofertas' mod='ModuleTesting'}</a>
          {else}
               {l s='No hay Ofertas' mod='ModuleTesting'}
          {/if}
     </div>
</div>
<!-- /Block Module_Testing -->

Cómo se aprecia, para utilizar propiedades de un objeto en una plantilla de Smarty basta con utilizar la sintáxis de {$special.link} dónde $special es el objeto, en éste caso un array asociativo, y link es un campo de ese array.

Instalación del módulo

La instalación del módulo es sencilla.

Si habéis creado el módulo en vez de modificarlo, primero nos dirigimos a la url de Administración, nos logamos y pinchamos en la opción de Módulos de la pestaña Módulos.

Una vez dentro, en el campo buscar, escribimos el displayName que pusimos en nuestro módulo, en este caso, Módulo de Pruebas y le damos al botón BUSCAR.

Si nos fijamos veremos que hay un recuadro en el que remarca que no está instalado y a la derecha hay un botón que pone instalar. Si le damos, se instalará y nos tendrá que decir un mensaje como Módulo (s) instalado con éxito.

Prueba y ejecución del módulo

Ahora probamos que se ejecute en nuestra tienda de pruebas. Si lo queremos ver estará en la parte de debajo de la columna izquierda en el front-end de la tienda.

Sobre el autor

Imagen de Pablo Enrique Fernández Casado
Pablo Enrique Fernández Casado

CEO de IslaVisual, Manager, Full Stack Analyst Developer y formador por cuenta ajena con más de 25 años de experiencia en el campo de la programación y más de 10 en el campo del diseño, UX, usabilidad web y accesibilidad web. También es escritor y compositor de música, además de presentar múltiples soft kills como la escucha activa, el trabajo en equipo, la creatividad, la resiliencia o la capacidad de aprendizaje, entre otras.

Especializado en proveer soluciones integrales de bajo coste y actividades de consultoría de Usabilidad, Accesibilidad y Experiencia de Usuario (UX), además de ofrecer asesoramiento en SEO, optimización de sistemas y páginas web, entre otras habilidades.