नोट: यदि आप PHP कोड द्वारा उत्पादों को संपादित कर रहे हैं, तो बाद में उन्हें फिर से अनुक्रमित करें, अपने स्वयं के घंटे बचाने के लिए काम करने की कोशिश करें कि वे मुझे नीचे क्यों नहीं दिखा रहे हैं ...
मैं हलकों में चक्कर लगा रहा हूं कि कैसे is_salable
किसी उत्पाद के लिए सेट करने की कोशिश कर रहा हूं , और इस तरह से काम करता हूं कि मेरे उत्पाद अब क्यों दिखाई दे रहे हैं।
कोड में केवल एक ही स्थान है जो मुझे मिल सकता है जो इसे सेट करता है:
$salable = $this->isAvailable();
लेकिन मैं यह कैसे या कहाँ से बाहर काम नहीं कर सकता, जब मैं isAvailable
इसे का पालन करें बस वापस चारों ओर लूप लगता है ...।
/app/code/core/Mage/Catalog/Model/Product.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();
}
निम्नलिखित $ इस-> उपलब्ध नहीं है () यहाँ से यह कुछ लाइनों जाता है:
**public function isAvailable()
{
return $this->getTypeInstance(true)->isSalable($this);
}**
इसके बाद ऐप / कोड / कोर / Mage / कैटलॉग / मॉडल / उत्पाद / प्रकार / विन्यास योग्य है। कॉल करने योग्य है
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;
}
जो अभिभावक को कॉल करता है: /app/code/core/Mage/Catalog/Model/Product/Type/Abstract.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;
}
जो सिर्फ is_saleable मान पर डेटा कॉल करता / करती है? क्या मैंने उस पर नज़र रखी? यह मूल्य कहां से आ रहा है?
मैंने is_salable के लिए अपनी स्थापना पर एक पुनरावर्ती grep जारी किया, निश्चित रूप से यह किसी भी रेखा को दिखाना चाहिए जहां यह सेट है, लेकिन मुझे कोई अधिकार नहीं दिखता है:
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');
मिल गया:
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);
यह सेटिसेबल था जिसे मैंने केवल सेटिसेबल के बजाय देखने के लिए नहीं सोचा / पता नहीं था ।