Skip Checkout in Magento for a downloadable product

前端 未结 3 1047
后悔当初
后悔当初 2020-12-03 05:56

I am using Magento to build an eBooks site. For the release, we plan to have a number of free downloadable books. We were hoping that it would be possible to use the normal

相关标签:
3条回答
  • 2020-12-03 06:29

    You can loop through a list of your downloadable links and add a link for each one.

    $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>";
    }
    
    0 讨论(0)
  • 2020-12-03 06:34

    This code will allow logged-in customers to "place an order" for a Free, Virtual product while bypassing checkout and redirect them straight to the My Downloads section of their account.

    Add the following line to your catalog/product/list.phtml in the spot you want it.

    <?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 } ?>
    

    Then create a new module with a controllers/CheckoutController.php containing this code:

    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);
     }
     }
    

    You'll need to handle the Exceptions a little better, but that should be functionally correct.

    0 讨论(0)
  • 2020-12-03 06:34

    My best blind guess (looking at the blocks and models in Mage_Downloadable) is using the product type instance. So, somewhere in your product templates, you may be able to do this:

    // $_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>";
        }
    }
    

    If not, I hope that at least gets you on the right path.

    Hope that helps. Thanks, Joe

    0 讨论(0)
提交回复
热议问题