PrestaShop 1.7 no elimina los productos agotados de los carritos de compras, lo que crea problemas importantes al mantener un stock bajo. ¡Veamos cómo mejorar la experiencia de nuestros clientes con una simple modificación!
Versión de texto
Si tiene muchos usuarios, a veces puede suceder que un producto se agote mientras está en el carrito de alguien. Por ejemplo, dos usuarios agregan la última unidad, uno procede a la caja y el otro no. Lo que sucede es que cuando el segundo cliente realiza el pedido, el producto ya no estará disponible y causará confusión, si no irritación, a esa persona, especialmente si no puede reabastecer ese artículo específico.

El presentador de carrito en PrestaShop 1.7

El primer archivo que necesitamos editar es cartPresenter , que es responsable de mostrar la información del carrito en toda la tienda.
Abra src / Adapter / Cart / cartpresenter.php y agregue lo siguiente alrededor de la línea 51, en las propiedades de la clase:
1
private static $removedProducts = [];
Luego, busque el método actual y justo después de la siguiente declaración:
1
2
3
4
5
if ($shouldSeparateGifts) {
    $rawProducts = $cart->getProductsWithSeparatedGifts();
} else {
    $rawProducts = $cart->getProducts(true);
}
Agrega esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
// start nemo
 
if(!self::$removedProducts)
    foreach ($rawProducts as $pk => $product)
    {
    // we want to remove the product in case it's not available
        if($product['quantity_available'] <= 0 && !Product::isAvailableWhenOutOfStock($product['out_of_stock']))
        {
            Context::getContext()->cart->deleteProduct($product['id_product'],$product['id_product_attribute'], $product['id_customization'], $product['id_address_delivery']);
            self::$removedProducts[] = $product['name'];
            unset($rawProducts[$pk]);
            continue;
        }
    }
    
Context::getContext()->smarty->assign(['removed_products' => self::$removedProducts]);
\Media::addJsDef(['removed_products' => self::$removedProducts]);
¡Y eso es todo por php! Antes de continuar, asegurémonos de que el producto realmente se elimine, así que probémoslo y veamos si realmente se eliminan.

La plantilla de carrito de compras en PrestaShop 1.7

Hasta abiertos vamos temas / clásico / módulos / ps_shoppingcart / ps_shoppingcart.tpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
18
{if isset($removed_products) && $removed_products}
  <div id="removed-modal" class="modal">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-body">
          <p>{l s='These products are out of stock' d='Shop.Theme.Checkout'}</p>
            <ul>
              {foreach from=$removed_products item='r_product'}
                <li>- {$r_product}</li>
              {/foreach}
            </ul>
            <p>{l s='And have therefore been removed from your cart' d='Shop.Theme.Checkout'}</p>
        </div>
 
      </div>
    </div>
  </div>
{/if}
Y lo último es activar el modal cuando lo necesitamos, así que agreguemos algo de javascript a themes / classic / assets / js / custom.js
1
2
3
if(removed_products.length > 0) {
    $('#removed-modal').modal('show');
}
¡Y eso es! Ahora, este modal no parece tan elegante, pero no se preocupe, ya que en uno de los próximos videos repasaremos la creación y el estilo de ventanas emergentes personalizadas en prestashop 1.7, ¡así que estad atentos!