Различия между некоторыми биржевыми методами


Изменение страницы продукта Я столкнулся с некоторыми методами, касающимися запасов и доступности продукта:

$_product->isSaleable());
$_product->isSalable());
$_product->isAvailable());
$_product->isInStock());

Может ли кто-нибудь сравнить их функциональность и добавить несколько подсказок, когда какой-либо из них следует использовать? Если есть еще какие-либо методы, которые могут быть неправильно поняты, как они, пожалуйста, добавьте их в комментарии.

Author: Raphael at Digital Pianism, 2017-02-10

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;
}
 9
Author: Raphael at Digital Pianism, 2017-02-10 09:41:10

Все это методы, которые проверяют доступность продукта с различными параметрами.

  1. Isinstock() - Просто проверьте, есть товар на складе или нет. И для этого проверьте значение атрибута продукта Статуса запаса, если оно установлено как На складе, то оно вернет значение true.

  2. IsAvailable() - Проверяет доступность продукта в соответствии со статусом продукта, состоянием запасов, видимостью и веб-сайтом.

  3. Подлежит продаже () или issalable() - Он аналогичен isAvailable, но имеет событие отправки "catalog_product_is_salable_after" перед возвращением значения. И в этом случае разработчик может написать свою собственную логику, чтобы установить доступность продукта. И на основании этого продукт будет доступен на веб-сайте.

 6
Author: Ashish Jagnani, 2017-02-10 10:03:23