DISPLAY FO Desde 1.5

displayProductButtons

~3 min de lectura

#Descripcion

Añade botones o contenido junto al boton de 'Añadir al carrito' en la pagina de producto. Es el hook ideal para funcionalidades como 'Añadir a la lista de deseos', 'Comparar productos', 'Compartir en redes sociales', 'Aviso de disponibilidad' o cualquier accion relacionada con el producto.

📍
Disparado por
  • ProductControllerCore::initContent()controllers/front/ProductController.php

#Parametros

Nombre Tipo Requerido Descripcion
$product array Si Array con datos del producto actual (id_product, name, price, etc.)
Retorno
string HTML con los botones o acciones adicionales

#Ejemplo de codigo

mymodule.php
php
public function install()
{
    return parent::install()
        && $this->registerHook('displayProductButtons');
}
mymodule.php
php
/**
 * Hook displayProductButtons — Boton de lista de deseos
 */
public function hookDisplayProductButtons($params)
{
    $product = $params['product'];
    $id_product = (int)($product['id_product'] ?? $product->id ?? 0);

    if (!$id_product) {
        return '';
    }

    // Verificar si el producto ya esta en la wishlist del cliente
    $inWishlist = false;
    if ($this->context->customer->isLogged()) {
        $inWishlist = Db::getInstance()->getValue(
            'SELECT COUNT(*) FROM `' . _DB_PREFIX_ . 'my_wishlist`
             WHERE id_customer = ' . (int)$this->context->customer->id . '
             AND id_product = ' . $id_product
        );
    }

    $this->context->smarty->assign([
        'id_product' => $id_product,
        'in_wishlist' => (bool)$inWishlist,
        'is_logged' => $this->context->customer->isLogged(),
        'wishlist_url' => $this->context->link->getModuleLink(
            $this->name, 'toggle', ['id_product' => $id_product]
        ),
    ]);

    return $this->display(__FILE__, 'views/templates/hook/product-button.tpl');
}
template.tpl
smarty
{hook h='displayProductButtons' product=$product}

#Notas y gotchas

  • ⚠️ El parametro `product` es un array en PS 1.7+, no un objeto Product. Usa `$product['id_product']`.
  • ⚠️ En PS 1.6, el parametro puede ser un objeto Product. Para compatibilidad: `$product['id_product'] ?? $product->id`.
  • ⚠️ El hook se ejecuta DENTRO del formulario de 'añadir al carrito', por lo que puedes añadir inputs hidden.
  • ⚠️ Para botones con AJAX, asegurate de registrar tus JS con `actionFrontControllerSetMedia`.
  • ⚠️ Tambien existe `displayProductAdditionalInfo` que se muestra debajo del boton de añadir al carrito.

#Relacionados

#Historial de versiones

Version PSCambio
1.5 Introducido para botones junto al carrito
1.7 El parametro product cambia de objeto a array
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.