2012-10-11 106 views
2

我已經多次使用過magento,但這是最終的挑戰。我正在一家擁有400,000多種產品的magento商店工作,每個商店都有自己的變體/產品選項。我們的主商店(基於自定義購物車系統並在MSSQL上運行)每天添加和移除數百種產品。Magento - 動態產品/動態定價/即時創建產品

我已經配置的Magento抓住所有的類別,產品,文本,DESCRIPTIO,價格變化等,並在飛行中如http://www.offices-furniture.co.uk/pp?prod=mercury-reception-unit.html

的問題是我現在需要能夠添加動態創建的產品頁面這些產品到購物車沒有他們物理存在的後端。我已經添加了一個產品到後端,並計劃使用這個作爲一個通用模板類型的產品,所以它總是將這個產品(變體)添加到購物車中,例如

http://www.offices-furniture.co.uk/frodo.php但我不能爲我得到的價格改變.... grrrr ..

如果任何人都可以指出我在正確的方向如何通過前端的HTML或PHP更改價格,並將其張貼到購物車而不更改價格在後端

在此先感謝所有...

這裏是我試過全光照的代碼g改變價格;

<?php 
require_once ("app/Mage.php"); 
umask(0); 

Mage::app("default"); 

Mage::getSingleton("core/session", array("name" => "frontend")); 

// get the current Magento cart 
$cart = Mage::getSingleton('checkout/cart'); 
$product = Mage::getModel('catalog/product'); 
$product->setCustomPrice(99); 
$product->setOriginalCustomPrice(99); 
$product->getProduct()->setIsSuperMode(true); 
$product->setTypeId('configurable'); 
$product->setTaxClassId(1); //none 
$product->setSku(ereg_replace("\n","","videoTest2.2")); 
$product->setName(ereg_replace("\n","","videoTest2.2")); 
$product->setDescription("videoTest2.2"); 
$product->setPrice("129.95"); 
$product->setShortDescription(ereg_replace("\n","","videoTest2.2")); 
$cart->save(); 

if(isset($_POST['submit'])){ 

// call the Magento catalog/product model 

$product = Mage::getModel('catalog/product') 
// set the current store ID 
->setStoreId(Mage::app()->getStore()->getId()) 
// load the product object 
->load($_POST['product']); 
*/ 

//////////////////////////// 
// get the current Magento cart 
$cart = Mage::getSingleton('checkout/cart'); 
$product = Mage::getModel('catalog/product') 
// set the current store ID 
->setStoreId(Mage::app()->getStore()->getId()) 
// load the product object 
->load($_POST['product']); 
$product->setCustomPrice(99); 
$product->setOriginalCustomPrice(99); 
$product->getProduct()->setIsSuperMode(true); 
$product->setTypeId('configurable'); 
$product->setTaxClassId(1); //none 
$product->setSku(ereg_replace("\n","","videoTest2.2")); 
$product->setName(ereg_replace("\n","","videoTest2.2")); 
$product->setDescription("videoTest2.2"); 
$product->setPrice("129.95"); 
$product->setShortDescription(ereg_replace("\n","","videoTest2.2")); 
$cart->save(); 
///////////////////////////////////// 

// start adding the product 
// format: addProduct(<product id>, array(
// 'qty' => <quantity>, 
// 'super_attribute' => array(<attribute id> => <option id>) 
//) 
//) 
$cart->addProduct($product, array(
'qty' => $_POST['qty'], 
'price' => 50, 

'super_attribute' => array(key($_POST['super_attribute']) => $_POST['super_attribute'][525]) 
) 
); 

// save the cart 
$cart->save(); 

// very straightforward, set the cart as updated 
Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 

// redirect to index.php 
header("Location: frodo.php"); 

}else{ 
?> 
+0

我不認爲你可以改變價格這種方式......看看http://stackoverflow.com/questions/9721583/changing-the-price-in-quote-while-adding-product-到購物車,Magento的 –

回答

1

您的問題並不完全清楚。有兩種可能的解釋方法(我猜你的意思是第二種,因爲第一個問題有一個相對簡單的解決方案):

1)您只需要購物車中的自定義價格,但它不需要通過結帳持續
2)您確實需要能夠使用Magento結帳將產品以自定義價格出售。

廣告1:只有改變價格在購物車

這是比較容易的。我會使用JavaScript和通過AJAX訪問的自定義PHP腳本,並可以計算應顯示的價格。這可以通過DOM操作完成。在AJAX計算完成之前,CSS可以幫助您隱藏價格。

這樣做的另一種方法是編輯價格模板文件。由於Magento phtml文件在當前呈現的對象(例如購物車或引用)的View類中被調用,因此您將能夠獲取ProductID。然後,您可以檢查正在添加的產品是否是您的神奇自定義模板產品並相應地更改價格。

在基地/默認模板,你會獲得該項目ID作爲這樣的基礎/默認/模板/結帳/車/項目/ default.phtml

$product_id = $_item->getProduct()->getId(); 

當你弄清楚WEEE的什麼樣的組合, InclTax等你用於你的網站(所以你知道你的價格實際得到顯示在default.pthml中),你可以在那裏得到一個if語句並以某種方式顯示定製價格。

廣告2:保持價格結帳

改變了,我不認爲這是可能做到這一點。特別是隨着Magento的着迷爲了完整性(該等產品和他們的信息將始終可以通過該命令,即使你從目錄中刪除)。

你會得到這個(至少據我可以想像)最接近的是有你設置的模板產品包括了能夠利用可變價格自定義下拉選項。

你可以嘗試動態設置爲自定義下拉選項的唯一值的價格,但我懷疑,甚至會工作。然後,您可以嘗試的最後一件事是每次下單時向該產品的自定義選項添加一個值(使用您的自定義價格)。這樣一來,你一直Magento的開銷降到最低,而是通過提供Magento的一種方式,讓你所出售的實物產品的歷史,仍然滿足Magento的官僚機構。

另一個建議

還有使用產品的定製選項,他們註定要被使用的方式的可能性。如果您創建的基本模板產品具有足夠的自定義選項(例如襯衫尺寸,顏色,印刷,面料)並隨時添加新的自定義選項值。這樣你也可以檢查一個選項是否已經存在,每個選項可以有自己的附加價格值。

最後建議

如果你真的想全力以赴,你可以嘗試寫Magento的自定義模塊,依次爲:

  • 創建產品時,它被添加到籃。
  • 當訂單完成後或當客戶從籃子中刪除再刪除該產品。
  • 定期修剪定製產品(例如通過Mage/cron),前提是它們不會存儲在任何客戶的存儲中。

這將在所有創建臨時產品,而不是沒有產品。

我希望我分享了一些可以幫助你前進的想法!

4

這裏有一段代碼可能會幫助你......當產品被添加到購物車時,你可以在飛行中明確地改變價格。我在checkout_cart_save_before事件觀察者上使用它,在此示例中,它會在物品的重量超過10磅時觸發。

/** 
* Set the price if the weight is over 10 lbs 
* 
* @param Varien_Event_Observer $observer 
*/ 
public function setPriceOnCartSaveBefore(Varien_Event_Observer $observer) 
{ 
    $cart = $observer->getCart(); 
    $items = $cart->getItems(); 

    foreach($items as $item) { 
     if ($item->getWeight() > 10) { 
      $item->setCustomPrice(69.99); 
      $item->setOriginalCustomPrice(69.99); 
     } 
    } 
}