Hinweis: Wenn Sie Produkte mit PHP-Code bearbeitet haben, indizieren Sie sie anschließend im Administrator neu. Sparen Sie sich Zeit, um herauszufinden, warum sie nicht wie ich unten angezeigt werden.
Ich gehe in Kreisen umher und versuche herauszufinden, wie is_salable
die Einstellungen für ein Produkt festgelegt sind. So kann ich herausfinden, warum meine Produkte jetzt angezeigt werden.
Es gibt nur eine Stelle im Code, an der ich ihn finden kann:
$salable = $this->isAvailable();
aber ich kann nicht herausfinden, wie oder woher das kommt, denn wenn ich folge isAvailable
, scheint es nur eine Schleife zu geben ...
/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();
}
Nach $ this-> isAvailable () geht es hier um ein paar Zeilen:
**public function isAvailable()
{
return $this->getTypeInstance(true)->isSalable($this);
}**
Dies ruft dann app / code / core / Mage / Catalog / Model / Product / Type / Configurable.php's isSalable auf
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;
}
welches das Elternteil aufruft: /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;
}
was hat gerade ein Datenaufruf auf den Wert is_saleable?!? Habe ich das richtig verfolgt? Woher kommt dieser Wert?
Ich habe auf meiner Installation für is_salable ein rekursives Grep ausgegeben. Dies sollte sicherlich alle Zeilen anzeigen, in denen es gesetzt ist, aber ich sehe keine sofort:
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');
GEFUNDEN:
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);
Es war setIsSalable, nach dem ich nicht gesucht habe, sondern nur setIsSalable .