참고 : 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();
}
여기에서 $ this-> isAvailable () 다음에 몇 줄이옵니다.
**public function isAvailable()
{
return $this->getTypeInstance(true)->isSalable($this);
}**
그런 다음 app / 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;
}
다음은 부모를 호출합니다 : /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 값에 대해 has / get 데이터 호출은 무엇입니까?!? 내가 제대로 추적 했습니까? 이 가치는 어디에서 오는가?
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);
setIsSalable이 아니라 찾기 / 생각하지 않은 것이 setIsSalable 입니다.