我正在使用Magento构建电子书网站。对于发布,我们计划提供一些免费下载的书籍。我们希望可以使用正常的Magento“目录”功能来添加下面的产品类别。但是,由于这些产品是免费下载的产品,因此在用户尝试下载时通过结帐方式发送用户并不合理。
有没有人知道如何创建免费下载产品,完全绕过结账?我注意到可下载产品有一个“免费样本”选项,但如果可以,我宁愿不使用它,因为我计划在添加付费产品时将此字段用于其预期目的。
[编辑] 我注意到你们中的一些人因为“缺乏清晰度问题”而投了这个问题。为清楚起见,我想:
不幸的是,我认为我不能再雄辩地提出这个问题了。 [/编辑]
答案 0 :(得分:6)
此代码允许登录客户在绕过结帐时“免费订购”免费虚拟产品,并将其直接重定向到其帐户的“我的下载”部分。
将以下行添加到您想要的位置catalog/product/list.phtml
。
<?php if($_product->isVirtual() && $_product->getFinalPrice()==0) { ?>
<a href="/modulename/checkout/purchase/id/<?php echo $_product->getId()?>"><?php echo $this->__('Download and Install') ?></a>
<?php } ?>
然后使用包含此代码的controllers/CheckoutController.php
创建一个新模块:
public function purchaseAction() {
if (!Mage::getSingleton('customer/session')->isLoggedIn()) {
$this->_redirectUrl(Mage::getBaseUrl().'customer/account');
return;
}
$request = $this->getRequest();
$id = $request->getParam('id');
$product = Mage::getModel('catalog/product')
->load($id)
->setStoreId(Mage::app()->getStore()->getId());
if(!($product->getIsVirtual() && $product->getFinalPrice() == 0)){
Mage::getSingleton('checkout/session')->addError($this->__('Method only available for Free Downloadable Items'));
return $this;
}
$onepage = Mage::getSingleton('checkout/type_onepage');
/* @var $onepage Mage_Checkout_Model_Type_Onepage */
try{
$quote = $onepage->getQuote();
/* @var $quote Mage_Sales_Model_Quote */
$quote->addProduct($product);
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
$onepage->initCheckout();
$payment=array('method'=>'free');
$onepage->savePayment($payment);
$onepage->saveOrder();
$this->getResponse()->setRedirect('/downloadable/customer/products');
}
catch(Exception $e){
$result = $e->getMessage();
Mage::getSingleton('checkout/session')->addError($result);
}
}
您需要更好地处理异常,但这应该在功能上正确。
答案 1 :(得分:3)
我最好的盲目猜测(查看Mage_Downloadable中的块和模型)正在使用产品类型实例。因此,在产品模板的某个位置,您可以执行此操作:
// $_product is the current product
$links = $product->getTypeInstance(true)->getLinks();
if(count($links)) {
foreach($links as $link) {
print "<a href='". $this->getUrl('downloadable/download/link', array(
'id' => $item->getLinkHash(),
'_secure' => true,
'_nosid' => true
)) . "'>Download</a>";
}
}
如果没有,我希望至少让你走上正确的道路。
希望有所帮助。谢谢, 乔
答案 2 :(得分:1)
您可以循环浏览可下载链接列表,并为每个链接添加链接。
$links=Mage::getModel('downloadable/link')
->getCollection()
->addFieldToFilter('product_id',array('eq'=>$_product->getId()));
foreach($links as $link){
echo "<a href='" . $link->getLink_url() . "'>Download</a>";
}