2013-02-28 26 views
0

需要更新magento中的價格表,如果條件爲真,如果是false skip。檢查條件,然後更新Magento

問題是,不知道爲什麼函數_checkIfSkuInStock爲所有人返回1。

我設置了一個產品有庫存,一個缺貨。

以下是更新價格表的代碼,如果sku存在,並且我還想添加條件(如果產品有貨,否則跳過)。

function _getConnection($type = 'core_read'){ 
    return Mage::getSingleton('core/resource')->getConnection($type); 
} 

function _getTableName($tableName){ 
    return Mage::getSingleton('core/resource')->getTableName($tableName); 
} 

function _getAttributeId($attribute_code = 'special_price'){ 
    $connection = _getConnection('core_read'); 
    $sql = "SELECT attribute_id 
       FROM " . _getTableName('eav_attribute') . " 
      WHERE 
       entity_type_id = ? 
       AND attribute_code = ?"; 
    $entity_type_id = _getEntityTypeId(); 
    return $connection->fetchOne($sql, array($entity_type_id, $attribute_code)); 
} 

function _getEntityTypeId($entity_type_code = 'catalog_product'){ 
    $connection = _getConnection('core_read'); 
    $sql  = "SELECT entity_type_id FROM " . _getTableName('eav_entity_type') . " WHERE entity_type_code = ?"; 
    return $connection->fetchOne($sql, array($entity_type_code)); 
} 

function _getIdFromSku($sku){ 
    $connection = _getConnection('core_read'); 
    $sql  = "SELECT entity_id FROM " . _getTableName('catalog_product_entity') . " WHERE sku = ?"; 
    return $connection->fetchOne($sql, array($sku)); 

} 

function _checkIfSkuExists($sku){ 
    $connection = _getConnection('core_read'); 
    $sql  = "SELECT COUNT(*) AS count_no FROM " . _getTableName('catalog_product_entity') . " WHERE sku = ?"; 
    $count  = $connection->fetchOne($sql, array($sku)); 
    if($count > 0){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

function _checkIfSkuInStock($sku){ 
    $connection = _getConnection('core_read'); 
    $sql  = "SELECT COUNT(*) AS count_no FROM " . _getTableName('cataloginventory_stock_item') . " WHERE is_in_stock = 1"; 
    $count  = $connection->fetchOne($sql, array($sku)); 
    if($count > 0){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

function _updatePrices($data){ 
    $connection  = _getConnection('core_write'); 
    $sku   = $data[0]; 
    $newspecial_price  = $data[1]; 
    $productId  = _getIdFromSku($sku); 
    $attributeId = _getAttributeId(); 

    $sql = "UPDATE " . _getTableName('catalog_product_entity_decimal') . " cped 
       SET cped.value = ? 


       WHERE cped.attribute_id = ? 
       AND cped.entity_id = ?"; 
     $connection->query($sql, array($newspecial_price, $attributeId, $productId)); 
    } 

$csv    = new Varien_File_Csv(); 
$data    = $csv->getData('special_price.csv'); //path to csv 
array_shift($data);  

    $message = ''; 
$count = 1; 
foreach($data as $_data){ 
    if(_checkIfSkuExists($_data[0]) and _checkIfSkuInStock($_data[0]) == 0){ 
     try{ 
      _updatePrices($_data); 
      $message .= $count . '> Success:: (' . $_data[1] . ') product code (' . $_data[0] . '). <br />'; 

     }catch(Exception $e){ 
      $message .= $count .'> Error:: While Upating Price (' . $_data[1] . ') of Sku (' . $_data[0] . ') => '.$e->getMessage().'<br />'; 
     } 
    }else{ 
     $message .= $count .'> Error:: Product code (' . $_data[0] . ') not in database<br />'; 
    } 
    $count++; 
} 
echo $message; 

任何幫助表示讚賞。

回答

1

在此代碼:

function _checkIfSkuInStock($sku){ 
$connection = _getConnection('core_read'); 
$sql  = "SELECT COUNT(*) AS count_no FROM " . _getTableName('cataloginventory_stock_item') . " WHERE is_in_stock = 1"; 
$count  = $connection->fetchOne($sql, array($sku)); 
if($count > 0){ 
    return true; 
}else{ 
    return false; 
} 

}

你嘗試用SKU填充:$連接 - > fetchOne($ sql中,數組($ SKU)); 但是您的請求中沒有任何準備好的字段(?)。

添加這樣的事情:

"SELECT COUNT(*) AS count_no FROM " . _getTableName('cataloginventory_stock_item') . " WHERE is_in_stock = 1 AND product_id=?" 

然後用

$connection->fetchOne($sql, array($this->_getIdFromSku($sku))); 

應該更好地工作;)

+0

喜@dagfr和感謝這個解決方案,這裏是一個小問題,但不明白爲什麼。 ==解析錯誤:語法錯誤,意外的T_VARIABLE:$ connection-> fetchOne($ sql,array($ this - > _ getIdFromSku($ sku))); – Dario 2013-02-28 13:44:24

+0

檢查上一行是否有缺失';'在SQL請求(我複製/粘貼它沒有';') – dagfr 2013-02-28 13:45:43

+0

對不起,發現分號丟失,但現在我得到這個錯誤:致命錯誤:使用$ this時不在$ connection-> fetchOne($ sql ,數組($ this - > _ getIdFromSku($ sku))); – Dario 2013-02-28 13:53:03