我正在尝试在Magento外部显示“产品视图”页面的部分内容。我能够正确显示所有内容以及要加载的所有Javascript - 但是,每当我点击“添加到购物车”按钮时,我都会收到一条消息“请指定产品的选项”。
如我的评论所述,如果我改变
$addtocartBlock->createBlock()
到
$addtocartBlock->getBlockSingleton()
整个顶部被Add To Cart块替换。见编辑。
有什么想法吗?
我感觉添加到购物车按钮无法正常工作,因为它没有明确地连接到其他块,但我可能错了。
或者,对于以编程方式呈现这些块的一些一般指导原则也是非常有用的 - 虽然我非常擅长PHP,Magento只是失去了我而且我经常只是剪切和粘贴random snippets from the Magento forum。
谢谢!
经过多一点挖掘,还有几点:
根据这个“不会死的问题”,我发现@molovan-gheorghe-daniel关于“super_attribute”数组没有与POST的其余部分一起发送是正确的。此外,如果我使用Firebug将可配置产品字段剪切并粘贴为提交<form>
元素的子元素,那么一切都可以正常工作。最终切入追逐:
呼!
这是我的代码:
<?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'];
答案 0 :(得分:1)
所有可配置产品都需要添加到具有特定选项的购物车中,对于简单的产品,您只需要数量和ID。这是在将可配置产品添加到购物车时应该查看请求数组的方式。
Array(
[uenc] => aHR0cdsfsdfdsfdssssssssssssss
[product] => 4816
[qty] => 2
[related_product] =>
[super_attribute] => Array(
[352] => 1093
)
)
“super_attribute”包含用户选择的选项。所以我建议检查这些数据是否在浏览器请求中。也许您在没有正确验证js验证的情况下发布数据,并且用户不从可用的可配置选项中选择任何内容,或者根本不呈现可配置选项下拉列表。
答案 1 :(得分:0)
也许你可以找到一种更适合你需求的方法,但这就是我要做的事情:
在Magento中创建自定义控制器
Alan Storm有一些很棒的Magento教程,请查看this one的控制器。扩展默认产品控制器。这是您将从Drupal安装访问的控制器(可能在iframe中调用?)。
创建自定义布局
开始here - 您将能够了解布局的工作原理。看一下产品页面的呈现方式(检查布局XML文件以及.phtml模板)。我想一想将物品添加到购物车时会发生什么。
通过以上两者,您应该拥有一个具有工作功能的产品页面,并能够自定义页面布局和样式以与当前站点一起使用。它本身并不是真正的桥梁。如果这就是您所追求的,请查看Magento的API。
如果您仍想使用现有解决方案,请查看Magento的布局文档。在产品视图页面的.phtml中,您将看到生成的HTML - 以及您需要生成的HTML - 以模拟添加到购物车表单。
修改强> 不确定为什么没有评论的downvotes(如果我的答案不符合你的喜好,让我知道为什么,我会改进它)。 Magento是一个框架,虽然接受的解决方案可能有效,但它不是“Magento”方式:未来的开发人员(包括自己)可能很难维护提供的解决方案。学习Magento如何工作(以及合并它)的额外努力是值得的 - 毕竟,您的客户正在付钱给您解决他们的问题。