2010-04-13 12 views
11

Tôi đang sử dụng Magento để xây dựng trang web điện tử. Để phát hành, chúng tôi dự định có một số sách miễn phí có thể tải xuống. Chúng tôi hy vọng rằng sẽ có thể sử dụng chức năng 'catalog' Magento bình thường để thêm các danh mục với các sản phẩm bên dưới. Tuy nhiên, vì đây là những sản phẩm có thể tải xuống miễn phí, nên việc gửi người dùng thông qua thanh toán khi họ cố tải xuống không thực sự hợp lý.Bỏ qua Checkout trong Magento để tìm sản phẩm có thể tải xuống

Có ai biết cách tạo sản phẩm có thể tải xuống miễn phí mà bỏ qua toàn bộ quá trình thanh toán không? Tôi đã nhận thấy rằng có tùy chọn 'mẫu miễn phí' cho các sản phẩm có thể tải xuống, nhưng tôi không muốn sử dụng tùy chọn này nếu tôi có thể sử dụng trường này cho mục đích dự định của mình khi tôi thêm sản phẩm phải trả phí.

[EDIT] Tôi đã nhận thấy rằng một số người trong số các bạn đã bỏ phiếu cho câu hỏi này về 'thiếu câu hỏi rõ ràng'. Để rõ ràng, tôi muốn:

  1. biết nếu nó có thể tạo ra một sản phẩm có thể tải về tại Magento mà không yêu cầu người dùng phải trải qua quy trình kiểm tra thông thường (vì nó là miễn phí)
  2. và mà không phải là 'miễn phí mẫu' lĩnh vực của một sản phẩm có thể tải về

Đáng tiếc là tôi không nghĩ rằng tôi có thể yêu cầu bất kỳ này hùng hồn hơn. [/ EDIT]

+0

Tôi đoán là mọi người có thể không thích tiêu đề. Nghe có vẻ hơi giống spam. Có lẽ một cái gì đó dọc theo dòng "Bỏ qua Checkout trong Magento"? – statenjason

+0

Phản hồi tốt, - Tôi đã cập nhật tiêu đề. –

+0

Bạn có muốn ghi lại tải xuống dưới dạng "thứ tự" hay chỉ cho phép mọi người lấy chúng. Là một đơn đặt hàng, bạn có thể xem lịch sử của những người đã tải xuống nó ... –

Trả lời

6

Mã này sẽ cho phép khách hàng đăng nhập "đặt hàng" cho sản phẩm miễn phí, ảo khi bỏ qua thanh toán và chuyển hướng thẳng đến phần Tải xuống của tôi trong tài khoản của họ.

Thêm dòng sau vào catalog/product/list.phtml tại vị trí bạn muốn.

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

Sau đó tạo một module mới với một controllers/CheckoutController.php chứa mã này:

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

Bạn sẽ cần phải xử lý các trường hợp ngoại lệ tốt hơn một chút, nhưng đó phải là chức năng chính xác.

+0

Tôi đã thử mã của bạn, nhưng tôi không thể thực hiện theo thứ tự tùy chỉnh. –

3

phỏng đoán mù tốt nhất của tôi (xem các khối và mô hình trong Mage_Downloadable) đang sử dụng loại sản phẩm. Vì vậy, ở đâu đó trong mẫu sản phẩm của bạn, bạn có thể thực hiện việc này:

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

Nếu không, tôi hy vọng ít nhất bạn sẽ đi đúng hướng.

Hy vọng điều đó sẽ hữu ích. Cảm ơn, Joe

+0

Cảm ơn bạn. Có vẻ như một trong các đồng nghiệp của tôi đã làm được điều này với các sản phẩm có thể định cấu hình, nhưng tôi không chắc chắn làm cách nào. Nếu tôi biết tôi sẽ đăng nó ở đây. –

1

Bạn có thể lặp qua danh sách các liên kết có thể tải xuống và thêm liên kết cho từng liên kết.

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