Mensaje Stock - Bsale-IO/template-docs GitHub Wiki
Desde los template version 4.0.0 se puede configurar el mensaje que mostrará el producto según el stock que presente su variante, para esto es necesario crear un componente: Product > detalle > stock
- Estructura Básica
- Componente Básico
- Break point
- Mostrar cantidad de productos en stock
- Agregar elementos html
- Condicionar la configuración según atributos del producto
- Detalle por sucursal
- Modal detalle por sucursal
Dentro de la etiqueta capture
deben ir las configuraciones del mensaje donde:
atributo | significado |
---|---|
0 |
mensaje cuando el producto no tiene stock |
full 1
|
mensaje cuando hay stock y/o el producto no controla stock |
unlimitedStock 2
|
mensaje que se mostrará cuando el producto no controle stock, si no esta configurado mostrará mensaje de full
|
- (1) Si no configuras el mensaje
full
se mostrará el mensaje por defecto En Stock- (2) Si no configuras el mensaje
unlimitedStock
mostrará el mensajefull
, si no está configurado (1) Se mostrará mensaje por defecto En Stock
Cada atributo de la configuración debe comó estructura JSON
:
- Los
atributos
y susvalores
deben ir entre comillas dobles"
- Cada atributo debe ir separado de su valor por dos puntos
:
"atributo":"valor"
- Los atributos deben ir separados por comas
,
. El último atributo no puede tener una coma,
"atributo":"valor", "atributo2":"valor"
Es necesario crear un componente: Product > detalle > stock
y llamarlo dentro del componente Producto > detalle
.
{% if product.classification != 1 %}
{% capture stock %}
"0": "Agotado",
"full": "Con Stock",
"unlimitedStock": "Con Stock"
{% endcapture %}
<div data-bs="product.stock" data-info='{ {{stock | replace: "'",'\"'}} }'>
</div>
{% endif %}
{{"Product > detalle > stock" | get_component }}
Puedes definir mensajes según la cantidad de productos que existan como en el siguiente ejemplo:
{% if product.classification != 1 %}
{% capture stock %}
"0": "Agotado",
"5": "Últimas unidades",
"10": "Quedan pocas unidades",
"full": "Con Stock"
{% endcapture %}
<div data-bs="product.stock" data-info='{ {{stock | replace: "'",'\"'}} }'></div>
{% endif %}
De esta forma:
- Si no quedan productos (
0
) mostrará Agotado - Si quedan 5 o menos productos mostrará Últimas unidades
- Si quedan 10 o menos productos mostrará Quedan pocas unidades
- Si hay más de 10 unidades mostrará Con Stock
Para poder mostrar la cantidad de productos que queda en stock se utiliza la variable {cantidad}
que es reemplazada por el stock del producto
{% if product.classification != 1 %}
{% capture stock %}
"0": "agotado",
"1": "queda {cantidad} producto",
"5": "quedan {cantidad} productos",
"full": "en stock",
"unlimitedStock": "producto en Stock"
{% endcapture %}
<div data-bs="product.stock" data-info='{ {{stock | replace: "'",'\"'}} }'></div>
{% endif %}
de esta forma:
- si no quedan productos se mostrará el mensaje agotado
- si queda un sólo producto queda 1 producto
- si quedan 5 o menos productos, por ejemplo 4 se mostrará quedan 4 productos
- si quedan más de 5 producto, por ejemplo 6 se mostrará el mensaje
"full"
en stock - si el producto no controla stock se mostrará el mensaje producto en Stock
Puedes agregar elementos html a los mensaje, pero dejes emplear comillas escapadas si empleas etiquetas style
, id
o class
{% if product.classification != 1 %}
{% capture stock %}
"0": "<b>Agotado</b>",
"full": "En Stock"
{% endcapture %}
<div data-bs="product.stock" data-info='{ {{stock | replace: "'",'\"'}} }'>
</div>
{% endif %}
Puedes agregar etiquetas html en la estructura siempre y cuando utilices comillas simple '
. Esta forma sirve para definir etiquetas style
, class
u otras que necesites
{% if product.classification != 1 %}
{% capture stock %}
"0": "<span style='color: red;'>Agotado</span>",
"full": "En Stock"
{% endcapture %}
<div data-bs="product.stock" data-info='{ {{stock | replace: "'",'\"'}} }'>
</div>
{% endif %}
También puedes condicionar el tipo de mensaje utilizando una validación if
{% if product.classification != 1 %}
{% capture stock %}
"0": "Agotado",
{% if product.brand contains "huawei" %}
"5": "Últimas unidades",
"full": "Producto en Stock",
{% elsif product.brand contains "lg" %}
"full": "quedan {cantidad} celulares",
{% else %}
"10": "<strong>¡Sólo quedan {cantidad} productos!</strong>",
{% endif %}
"unlimitedStock": "En stock"
{% endcapture %}
<div data-bs="product.stock" data-bs data-info='{ {{stock | replace: "'",'\"'}} }'></div>
{% endif %}
- Si el producto es Huawei dará este
json
"0": "Agotado", "5": "Últimas unidades", "full": "Producto en Stock", "unlimitedStock": "En stock"
- Si el producto tiene stock
0
mostrará Agotado - Si quedan
5
o menos productos en stock mostrará Últimas unidades - Si quedan más de
5
productos en stock mostrará Producto en Stock - Si el producto no controla Stock mostrará En Stock
- Si el producto es LG dará este
json
"0": "Agotado", "full": "quedan {cantidad} celulares", "unlimitedStock": "En stock"
- Si el producto tiene stock
0
mostrará Agotado - Si hay
1
o más stock mostrará quedan {cantidad} celulares donde{cantidad}
es el número de productos que hay, por ejemplo si quedan4
productos mostrará quedan 4 celulares, si quedan20
mostrará quedan 20 celulares - Si el producto no controla Stock mostrará En Stock
- Si el producto no cumple no pertenece a ninguna de esas marcas dará este
json
"0": "Agotado", "unlimitedStock": "En stock"
- Si el producto tiene stock
0
mostrará Agotado - Si el producto no controla Stock mostrará En Stock
- Si el producto tiene
1
o más en stock mostrará el mensaje por defecto En Stock
Es posible entregar un mensaje personalizado por sucursal para ello se utiliza el selector data-bs="product.stock.detail"
atributo | significado |
---|---|
0 |
mensaje cuando el producto no tiene stock |
full 1
|
mensaje cuando hay stock y/o el producto no controla stock |
unlimitedStock 2
|
mensaje que se mostrará cuando el producto no controle stock, si no esta configurado mostrará mensaje de full
|
table |
boolean: true devuelve la estructura con forma de tablaboolean: false devuelve la estructura con forma de div` |
tableTitle |
array define títulos que tendrá la tabla, el formato es el siguiente: ["titulo1","titulo2"] |
- (1) Si no configuras el mensaje
full
se mostrará el mensaje por defecto En Stock- (2) Si no configuras el mensaje
unlimitedStock
el mensaje defull
, si no está configurado (1) Se mostrará mensaje por defecto En Stock
- Con tabla
{% if product.classification != 1 %}
{% capture stock %}
"0": "<span style='color: red;'>Agotado</span>",
"full": "{cantidad}",
"table": true,
"tableTitle":["sucursal", "stock"]
{% endcapture %}
<div class="bs-table" data-bs="product.stock.detail" data-info='{ {{stock | replace: "'",'\"'}} }'>
</div>
{% endif %}
Resultado
<div class="bs-table" data-bs="product.stock.detail" data-info='...'> <table> <tr> <th> sucursal</th> <th> stock</th> </tr> <tr> <td> Casa matriz </td> <td> 5 </td> </tr> <tr> <td> Capital </td> <td> 15 </td> </tr> </table> </div>
sucursal stock Casa matriz 5 Capital 15
- Con div, sin tabla
{% if product.classification != 1 %}
{% capture stock %}
"0": "<span style='color: red;'>Agotado</span>",
"full": "{cantidad}",
"table": false
{% endcapture %}
<div class="bs-table" data-bs="product.stock.detail" data-info='{ {{stock | replace: "'",'\"'}} }'>
</div>
{% endif %}
Resultado
<div class="bs-table" data-bs="product.stock.detail" data-info='...'> <div> Casa matriz </div> <div> 5 </div> <div> Capital </div> <div> 15 </div> </div>
{% capture sucursal %}
"0": "Agotado",
"5": "ultimas unidades",
"50": "{cantidad}",
"full": "50+",
"unlimitedStock": "producto en Stock",
"table": true,
"tableTitle": ["Sucursal", "Stock" ]
{% endcapture %}
<!-- Button trigger modal -->
<div class="mt-2">
<button type="button" class="btn btn-primary"
data-toggle="modal"
data-target="#modalStock">
Stock por sucursal
</button>
</div>
<!-- Modal -->
<div class="modal fade" id="modalStock" tabindex="-1"
role="dialog" aria-labelledby="modalStockLabel"
aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">
Stock por sucursal
</h5>
<button type="button" class="close"
data-dismiss="modal" aria-label="Close">
</button>
</div>
<div class="modal-body">
<div class="bs-table"
data-bs="product.stock.detail"
data-info='{ {{sucursal}} }'>
</div>
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-primary"
data-dismiss="modal">
Cerrar
</button>
</div>
</div>
</div>
</div>
/******************
Sucursales
*******************/
.bs-table{
display:flex;
flex-wrap:wrap;
}
.bs-table table{
width: 100%;
margin-bottom: 1rem;
}
.bs-table table td{
vertical-align: top;
border-top:1px solid;
}
.bs-table div {
width:50%;
}