Lưu ý: Nếu bạn đã chỉnh sửa sản phẩm bằng mã PHP, sau đó lập chỉ mục lại chúng trong quản trị viên, hãy tiết kiệm thời gian của bạn để cố gắng tìm ra lý do tại sao chúng không hiển thị như tôi bên dưới ...
Tôi đang đi vòng tròn trong các vòng tròn cố gắng tìm ra cách is_salable
thiết lập cho một sản phẩm, và do đó tìm ra lý do tại sao các sản phẩm của tôi hiện đang hiển thị.
Chỉ có một nơi trong mã tôi có thể tìm thấy nó đặt:
$salable = $this->isAvailable();
nhưng tôi không thể tìm ra làm thế nào hoặc từ đâu có được điều này, vì khi tôi làm theo isAvailable
nó dường như lặp lại xung quanh ....
/app/code/core/Mage/Catalog/Model/ Productt.php
public function isSalable()
{
Mage::dispatchEvent('catalog_product_is_salable_before', array(
'product' => $this
));
$salable = $this->isAvailable();
$object = new Varien_Object(array(
'product' => $this,
'is_salable' => $salable
));
Mage::dispatchEvent('catalog_product_is_salable_after', array(
'product' => $this,
'salable' => $object
));
return $object->getIsSalable();
}
theo $ this-> isAv Available () từ đây, nó đi một vài dòng:
**public function isAvailable()
{
return $this->getTypeInstance(true)->isSalable($this);
}**
sau đó gọi ứng dụng / code / core / Mage / Catalog / Model / Product / Type / Configurable.php's isSalable
public function isSalable($product = null)
{
$salable = parent::isSalable($product);
if ($salable !== false) {
$salable = false;
if (!is_null($product)) {
$this->setStoreFilter($product->getStoreId(), $product);
}
foreach ($this->getUsedProducts(null, $product) as $child) {
if ($child->isSalable()) {
$salable = true;
break;
}
}
}
return $salable;
}
mà gọi cha mẹ: /app/code/core/Mage/Catalog/Model/Sản phẩm / Type / Abauge.php's isSalable:
public function isSalable($product = null)
{
$salable = $this->getProduct($product)->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_ENABLED;
if ($salable && $this->getProduct($product)->hasData('is_salable')) {
$salable = $this->getProduct($product)->getData('is_salable');
}
elseif ($salable && $this->isComposite()) {
$salable = null;
}
return (boolean) (int) $salable;
}
mà chỉ có một cuộc gọi có / nhận dữ liệu trên giá trị is_salizable?!? Tôi đã theo dõi điều đó phải không? Giá trị này đến từ đâu?
Tôi đã ban hành một grep đệ quy trên bản cài đặt của mình cho is_salable, chắc chắn điều này sẽ hiển thị bất kỳ dòng nào được đặt nhưng tôi không thấy bất kỳ dòng nào ngay lập tức:
grep -r is_salable *
app/code/core/Mage/CatalogInventory/Model/Stock/Status.php: $object = new Varien_Object(array('is_in_stock' => $product->getData('is_salable')));
app/code/core/Mage/XmlConnect/Block/Wishlist.php: $itemXmlObj->addChild('is_salable', (int)$item->getProduct()->isSalable());
app/code/core/Mage/XmlConnect/Block/Catalog/Product.php: $item->addChild('is_salable', (int)$product->isSalable());
app/code/core/Mage/XmlConnect/Block/Cart/Crosssell.php: $itemXmlObj->addChild('is_salable', 0);
app/code/core/Mage/XmlConnect/Block/Cart/Crosssell.php: $itemXmlObj->addChild('is_salable', (int)$product->isSalable());
app/code/core/Mage/Catalog/Model/Product.php: Mage::dispatchEvent('catalog_product_is_salable_before', array(
app/code/core/Mage/Catalog/Model/Product.php: 'is_salable' => $salable
app/code/core/Mage/Catalog/Model/Product.php: Mage::dispatchEvent('catalog_product_is_salable_after', array(
app/code/core/Mage/Catalog/Model/Product.php: if ($this->hasData('is_salable')) {
app/code/core/Mage/Catalog/Model/Product.php: return $this->getData('is_salable');
app/code/core/Mage/Catalog/Model/Product/Type/Abstract.php: if ($salable && $this->getProduct($product)->hasData('is_salable')) {
app/code/core/Mage/Catalog/Model/Product/Type/Abstract.php: $salable = $this->getProduct($product)->getData('is_salable');
TÌM:
grep -r setIsSalable *
app/code/core/Mage/CatalogInventory/Model/Stock/Status.php: $product->setIsSalable($stockStatus);
app/code/core/Mage/CatalogInventory/Model/Stock/Status.php: $product->setIsSalable($status);
Đó là setIsSalable mà tôi không nghĩ / biết để tìm kiếm hơn là chỉ setIsSalable .