簡體   English   中英

當產品視圖塊在Magento之外呈現時,無法將可配置產品添加到購物車

[英]Cannot add configurable products to cart when Product View blocks rendered outside of Magento

我正在嘗試在Magento外部顯示“產品視圖”頁面的部分內容。 我能夠正確顯示所有內容以及要加載的所有Javascript - 但是,每當我單擊“添加到購物車”按鈕時,我都會收到一條消息“請指定產品的選項”。

如我的評論中所述,如果我改變了

 
 
 
 
  
  
  $addtocartBlock->createBlock()
 
 
  

 
 
 
 
  
  
  $addtocartBlock->getBlockSingleton()
 
 
  

整個頂部被Add To Cart塊替換。 見編輯。

有什么想法嗎?

我覺得添加到購物車按鈕不能正常工作,因為它沒有明確地連接到其他塊,但我可能是錯的。

或者,對於以編程方式呈現這些塊的一些一般指導原則也是非常有用的 - 雖然我非常擅長PHP,Magento只是失去了我而且我經常只是從Magento論壇剪切和粘貼隨機片段

謝謝!


編輯:

經過多一點挖掘,還有幾點:

  1. 在每個塊下面移動renderView()調用(而不是將它們聚集在一起)修復了“添加到購物車替換主信息塊”問題。
  2. 簡單的產品可以毫無問題地添加。 我遇到的唯一問題是讓Magento認可為可配置產品提交的產品選項。

MOAR EDITZ !!!!! 1111!

根據這個“不會死的問題”,我發現@mouldovan-gheorghe-daniel關於“super_attribute”數組沒有與POST的其余部分一起發送是正確的。 此外,如果我使用Firebug將可配置產品字段剪切並粘貼為提交<form>元素的子元素,那么一切都很有效。 最終切入追逐:

tl; dr - 我如何加載可配置的產品屬性作為添加到CART BLOCK的孩子?

噢!

這是我的代碼:

 <?php //Pretty standard loading Magento stuff. $bootstrap = $_SERVER['DOCUMENT_ROOT'] . '/magento/app/Mage.php'; require_once $bootstrap; session_name ( 'frontend' ); Mage::getSingleton ( 'core/session', array ('name' => 'frontend' ) ); $app = Mage::app('default'); $app->getTranslator()->init('frontend'); umask(0); session_name('frontend'); Mage::getSingleton('customer/session'); //I'm not sure I need this. $_product = Mage::getModel('catalog/product'); $_product->load($product_id); Mage::unregister('product'); Mage::register('product', $_product); //The following loads the main Mage_Catalog_Block_Product_View block. $linksBlock = $app->getLayout()->getBlockSingleton("catalog/product_view"); $linksBlock->setProduct($_product)->setTemplate('catalog/product/view.phtml'); //The following loads the configurable product attributes block. $checkoutLinksBlock = $app->getLayout() ->getBlockSingleton("catalog/product_view_type_configurable") ->setTemplate('catalog/product/view/type/options/configurable.phtml'); $checkoutLinksBlock->setParentBlock($linksBlock); /* The following loads the Add To Cart block. If I use getBlockSingleton() instead * of createBlock(), this replaces the entire top block. */ $addtocartBlock = $app->getLayout() ->createBlock("catalog/product_view") ->setTemplate('catalog/product/view/addtocart.phtml'); $addtocartBlock->setParentBlock($linksBlock); $blocks['info'] = $linksBlock->renderView(); $blocks['addtocart'] = $addtocartBlock->renderview(); if ($_product->getTypeId() == 'configurable') $blocks['config'] = $checkoutLinksBlock->renderView(); else $blocks['config'] = ''; Mage::unregister('product'); // ...And output everything here. echo $blocks['info'] . $blocks['config'] . $blocks['addtocart']; 

所有可配置產品都需要通過特定選項添加到購物車中,對於簡單的產品,您只需要數量和ID。 這是在將可配置產品添加到購物車時應該查看請求數組的方式。

Array(
    [uenc] => aHR0cdsfsdfdsfdssssssssssssss
    [product] => 4816
    [qty] => 2
    [related_product] =>
    [super_attribute] => Array(
            [352] => 1093
        )
) 

“super_attribute”包含用戶選擇的選項。 所以我建議檢查這些數據是否在瀏覽器請求中。 也許您在沒有正確驗證js驗證的情況下發布數據,並且用戶不從可用的可配置選項中選擇任何內容,或者根本不呈現可配置選項下拉列表。

也許你可以找到一種更適合你需求的方法,但這就是我要做的:

在Magento中創建自定義控制器

艾倫風暴有一些偉大的Magento的教程,看看這其中的控制器。 擴展默認產品控制器。 這是您將從Drupal安裝訪問的控制器(可能在iframe中調用?)。

創建自定義布局

這里開始 - 您將能夠了解布局的工作原理。 看一下產品頁面的呈現方式(檢查布局XML文件以及.phtml模板)。 我想一想將物品添加到購物車時會發生什么。

有了上述兩個,您應該擁有一個具有工作功能的產品頁面,並能夠自定義頁面布局和樣式以與當前站點一起使用。 它本身並不是真正的橋梁。 如果這就是您所追求的,請查看Magento的API。

如果您仍想使用現有解決方案,請查看Magento的布局文檔。 在產品視圖頁面的.phtml中,您將看到生成的HTML - 以及您需要生成的HTML - 以模擬添加到購物車表單。

編輯不知道為什么沒有評論的downvotes(如果我的答案不符合你的喜好,讓我知道為什么,我會改進它)。 Magento是一個框架,雖然接受的解決方案可能有效,但它不是“Magento”方式:未來的開發人員(包括自己)可能很難維護提供的解決方案。 學習Magento如何工作(以及合並它)的額外努力是值得的 - 畢竟,您的客戶正在付錢給您解決他們的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM