Versión de texto

MÉTODO 1 - Habilitación selectiva del modo catálogo

Si no necesitamos mostrar precios a nuestros visitantes, la forma más sencilla y rápida de proceder es habilitar selectivamente el modo de catálogo. Abra classes / controller / FrontController.php y localice la siguiente cadena, dentro del método init:
1
'PS_CATALOG_MODE' => (bool)Configuration::get('PS_CATALOG_MODE') || (Group::isFeatureActive() && !(bool)Group::getCurrent()->show_prices),
Reemplácelo con lo siguiente:
1
'PS_CATALOG_MODE' => $catalog_mode || (Group::isFeatureActive() && !(bool)Group::getCurrent()->show_prices),
Necesitamos crear esa variable $ catalog_mode, por supuesto, así que agreguemos esto antes de todo el bloque de asignación:
1
2
3
$catalog_mode = (bool)Configuration::get('PS_CATALOG_MODE');
if(!$this->context->customer->id)
    $catalog_mode = true;
Como puede ver, simplemente verificamos si la identificación del cliente está configurada (es decir, si el usuario ha iniciado sesión) y, de ser así, configuramos el modo catálogo en verdadero, deshabilitando efectivamente todas las funcionalidades del carrito. Sin embargo, esto nos dejó con un bloque de carro inútil y sin precios. ¡Veamos cómo manejarlo de manera diferente entonces!

MÉTODO 2 - Desactivar productos de forma selectiva

Crearé una anulación para este, así que en override / classes, creemos un nuevo archivo llamado Product.php.
Abrámoslo y copiemos el método de construcción de la clase de producto principal. Deshágase de todo lo que hay dentro y simplemente agregue lo siguiente:
1
2
3
4
5
6
7
8
9
10
Class Product extends ProductCore
{
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
        parent::__construct($id_product, $id_lang, $id_shop);
 
        if(!Context::getContext()->customer->id)
            $this->available_for_order = false;
    }
}
Esto se hará cargo de la página del producto. Ahora, para la lista de productos, la propiedad se establece en otro lugar, y específicamente en el método getProductProperties (sin s). Copie todo el método de la clase original nuevamente, pero esta vez deje el contenido y agregue el siguiente código al final, justo antes de self :: $ producPropertiesCache [$ cache_key] = $ row;
1
2
if(!$context->customer->id)
    $row['available_for_order'] = false;
¡Y eso es todo lo que necesitamos! Dado que creamos una nueva anulación, recuerde que es necesario borrar cache / class_index.php para que se realicen los cambios.