2014-03-03 16 views
0

我創建了一個腳本來存儲來自外部來源的magento中的文章。Magento不替換存儲的文章

這是目前我在做什麼

$this->product = Mage::getModel('catalog/product')->loadByAttribute('sku',$this->artnr); 
    Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID); 
    if($this->product===false || $this->product->getId()<1){ 
     $this->product = Mage::getModel('catalog/product'); 
     $this->product->setSku($this->actindo['art_nr']); 
     $this->newProduct = true; 
     $this->product->setAttributeSetId($this->getDefaultAttributeSetId()); 
     $this->product->setStoreId(Mage::app()->getStore()->getWebsiteId()); 
     $this->product->setCreatedAt(strtotime('now')); 
    } 

然後,我將所有喜歡的描述等所需的字段

,然後我做了商店

$this->product->save(); 

產品在管理後臺中正確顯示,但在商店前臺中不可見。

我檢查了數據庫,發現有幾個索引沒有寫入。 也不保存平坦表。 如果我以後再次將其存儲在管理後端,則會保存所有內容。 我有平板電腦目前禁用。 但是他們的內容仍然被寫入。

我使用Magento 1.7.0.1和PHP5.3作爲fpm和web服務器nginx運行。

我也已經嘗試重建索引和一切,但它仍然不可見在前端。 我在做什麼錯? 我推送到腳本的所有字段都會被寫入,並在管理部分顯示。 ????

回答

1

你可能已經嘗試了所有這些,但我知道搞清楚'爲什麼產品沒有顯示'是一個令人沮喪的過程。

我的建議是嘗試在Magento管理區域手動製作類似的產品,然後檢查每個產品的管理區域中的所有字段。你可能會仔細考慮設置'website_ids',我認爲store_id和website_id是不同的東西,不是嗎? $store_id = Mage::app()->getStore()->getStoreId(); vs $store_website_id = Mage::app()->getStore()->getWebsiteId();

您還可以使用system-> import/export導出工具來比較Magento設置的值與您的算法設置的值。

您是否正在閱讀用於產品保存的Magento AdminHTML功能?

/* path: app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php */ 
    Mage_Adminhtml_Catalog_ProductController::saveAction() 
    // (and then obviously) 
    Mage_Adminhtml_Catalog_ProductController::_initProductSave() 
    Mage_Adminhtml_Catalog_ProductController::_initProduct() 

所以在看代碼,如果你能捕獲Magento管理的POST當您單擊保存按鈕,當您手動進行測試的產品,那麼你將可以看到的是什麼「傳入」 saveAction()函數並將其與您的代碼進行比較。

你從哪裏運行代碼?如果你正在實例化你自己的Mage :: app(),我認爲你需要將它設置爲管理會話並設置商店ID等。我找不到對此的參考,但是如果您認爲這可能與它有關,請搜索一下。也許你可以使用調用saveAction()或重新使用該代碼,而不是使用$ this-> product-> save()。

如果您有用於運行任意代碼的測試模塊,請嘗試通過構建不同產品集合的調試調用和回聲來了解生成的產品和手動輸入的測試產品之間的區別。計劃B:如果您有外部產品數據源,您可能會發現最優秀的'MAGMI Datapump API'是實現您想要的最簡單最快捷的方式。

那信息太多了嗎?

+0

今天我會試試這個。 –

+0

重量和稅收類別都是Magento新產品表單中的必填字段,因此請檢查這些字段。 – Malachy

+0

感謝這個幫助。我導出數據並檢查未設置的內容並找到它。 –

1

爲了在前端擁有產品,需要一些設置。
必須啓用:

->setStatus(1); 

它必須是可見

->setVisibility(4); //or 2 

必須在股票或您必須對前端股票產品的顯示出設置。

$stockItem = array(); 
$stockItem['qty'] = 100; //something bbigger than 0 
$stockItem['is_in_stock'] = 1; 
$product->setData('stock_item', $stockItem); 
+0

對不起,我錯過了那部分。該信息被寫入對象。任何方式,但在我的例子中沒有顯示。我寫股票是股票,可銷售集合狀態爲1,可見性爲4,但它們仍未顯示在指標中。 –