Estoy trabajando en la visualización de la disponibilidad de existencias en la página del producto (individual) de mi tema de Magento, y hay algo que no entiendo completamente acerca de esto.¿Cuál es la diferencia entre isSaleable() y isAvailable()?
veo dos métodos que se utilizan en las plantillas para comprobar si un producto está a la venta:
Mage_Catalog_Model_Product::isAvailable()
Mage_Catalog_Model_Product::isSaleable()
Mis propias conclusiones:
veo que isSalable()
(que a su vez es llamado por isSaleable()
) llama al isAvailable()
pero también despacha dos eventos (catalog_product_is_salable_before
y catalog_product_is_salable_after
).
En la parte frontal, he notado que en la plantilla base de Magento isAvailable()
se usa para decidir si se muestra el producto como "en existencia" o "agotado"; isSaleable()
se utiliza para decidir algo así como si mostrar un botón "Agregar al carro".
En la parte interna me he dado cuenta de que cuando la cantidad de existencias se convierte en cero y los pedidos pendientes son no autorizadas, la disponibilidad de existencias de un producto va a "agotado". Cuando la cantidad de stock se vuelve cero y los pedidos pendientes son permitidos, la disponibilidad de stock a del producto permanece sin cambios.
Pregunta:
las propiedades "disponibilidad de existencias" y "cantidad de stock" obviamente están vinculados entre sí y con los métodos mencionados PHP. Me gustaría saber:
lo que la semántica diferencia entre los métodos de PHP
isAvailable()
yisSaleable()
es y para qué lo usaría uno sobre el otro;qué es lo que aparenta no saber aún sobre su relación con estas propiedades y el comportamiento de Magento.
Gracias.
EDIT:
que he probado todas las combinaciones relevantes de la cantidad de stock (-1,0,1), disponibilidad de existencias (en/fuera de) y los pedidos pendientes (on/off) para un producto, y esto es el resultado:
St.Qu BckOrd St.Av isSalable() isSaleable() isAvailable() -1 0 0 0 0 0 -1 0 1 N/A N/A N/A -1 1 0 0 0 0 -1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 N/A N/A N/A 0 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1
Sólo por el bien de la integridad:
St.Av 0 = out of stock St.Av 1 = in stock BckOrd 0 = no backorders allowed BckOrd 1 = backorders are allowed
es el interruptor de la disponibilidad en Magento que controla el valor de retorno de todos los métodos PHP, pero cuando los pedidos pendientes a el apagado y la cantidad de stock cae por debajo de 1, la disponibilidad del stock se restablecerá automáticamente a 'agotado' (de ahí las filas N/A
).
Entiendo la diferencia semántica entre tener algo en stock y poder vender algo, pero todavía no sé cuál es la diferencia semántica entre isSaleable()/isSalable() y isAvailable(). ¿Por qué utilizar uno sobre el otro, cuando en cada situación que puedo pensar, hacen lo mismo (ver la pregunta editada)? Digo "que puedo pensar" porque me gustaría saber si hay situaciones en las que no he pensado que puedan hacer una distinción entre estos métodos, porque ahora tengo la sensación de que uno de ellos es inútil, lo que creo que es un poco rápido para juzgar. – pancake
En su pregunta editada, que ha escrito cuando los pedidos pendientes están apagadas y la cantidad de gotas por debajo de 1, la disponibilidad de existencias será automáticamente ajustará a 'fuera de stock' También hay un 'stock_is_changed_automatically' bandera, que utilizo para mostrar artículos que (técnicamente) no están inventariados, y están explícitamente en stock, pedidos pendientes, y cantidad = 0 – elcash
Esa es información útil, gracias por eso. No quiero parecer ingrato, pero aún no sé cuándo usar isSaleable y cuándo usar isAvailable, cuando * parecen * hacer lo mismo. Actualmente estoy creando un tema, así que me gustaría hacerlo bien. – pancake