Различия между некоторыми биржевыми методами
Изменение страницы продукта Я столкнулся с некоторыми методами, касающимися запасов и доступности продукта:
$_product->isSaleable());
$_product->isSalable());
$_product->isAvailable());
$_product->isInStock());
Может ли кто-нибудь сравнить их функциональность и добавить несколько подсказок, когда какой-либо из них следует использовать? Если есть еще какие-либо методы, которые могут быть неправильно поняты, как они, пожалуйста, добавьте их в комментарии.
2 answers
isSaleable()
это просто псевдоним isSalable()
:
/**
* Alias for isSalable()
*
* @return bool
*/
public function isSaleable()
{
return $this->isSalable();
}
Метод isSalable()
выглядит сложным, но он просто проверяет доступность продукта с помощью метода isAvailable()
:
/**
* Check is product available for sale
*
* @return bool
*/
public function isSalable()
{
if ($this->hasData('salable') && !$this->_catalogProduct->getSkipSaleableCheck()) {
return $this->getData('salable');
}
$this->_eventManager->dispatch('catalog_product_is_salable_before', ['product' => $this]);
$salable = $this->isAvailable();
$object = new \Magento\Framework\DataObject(['product' => $this, 'is_salable' => $salable]);
$this->_eventManager->dispatch(
'catalog_product_is_salable_after',
['product' => $this, 'salable' => $object]
);
$this->setData('salable', $object->getIsSalable());
return $object->getIsSalable();
}
Метод isAvailable()
проверяет, позволяет ли тип продукта или запас приобрести продукт:
public function isAvailable()
{
return $this->getTypeInstance()->isSalable($this) || $this->_catalogProduct->getSkipSaleableCheck();
}
Если вы проверите метод isSalable
из класса типа:
public function isSalable($product)
{
$salable = $product->getStatus() == \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED;
if ($salable && $product->hasData('is_salable')) {
$salable = $product->getData('is_salable');
}
return (bool)(int)$salable;
}
Наконец, метод isInStock()
проверяет только, включен ли статус (что странно, верно?):
public function isInStock()
{
return $this->getStatus() == \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED;
}
Все это методы, которые проверяют доступность продукта с различными параметрами.
Isinstock() - Просто проверьте, есть товар на складе или нет. И для этого проверьте значение атрибута продукта Статуса запаса, если оно установлено как На складе, то оно вернет значение true.
IsAvailable() - Проверяет доступность продукта в соответствии со статусом продукта, состоянием запасов, видимостью и веб-сайтом.
Подлежит продаже () или issalable() - Он аналогичен isAvailable, но имеет событие отправки "catalog_product_is_salable_after" перед возвращением значения. И в этом случае разработчик может написать свою собственную логику, чтобы установить доступность продукта. И на основании этого продукт будет доступен на веб-сайте.