2010-04-13 3 views
11

Magento를 사용하여 eBook 사이트를 구축하고 있습니다. 이 릴리스에는 무료로 다운로드 할 수있는 여러 도서가있을 예정입니다. 우리는 일반적인 Magento '카탈로그'기능을 사용하여 밑에있는 제품 카테고리를 추가하는 것이 가능할 것으로 기대했습니다. 그러나 무료로 다운로드 할 수있는 제품이기 때문에 다운로드를 시도 할 때 결제를 통해 사용자를 보내는 것이 실제로 의미가 없습니다.Magento의 Checkout을 건너 뛰면 다운로드 할 수 있습니다.

누구나 계산을 우회하는 무료 다운로드 제품을 만드는 방법을 알고 있습니까? 다운로드 가능한 제품에 대한 '무료 샘플'옵션이 있음을 알고 있지만 유료 제품을 추가 할 때 의도 한 용도로이 필드를 사용하려는 경우 가능한 경우이 옵션을 사용하지 않는 것이 좋습니다.

[편집] 저는 여러분 중 일부가 '질문의 명확성 부족'에 대해이 질문에 투표했습니다. 명확하게하기 위해, 내가 원하는 :

  1. 알고가 (이 무료이기 때문에) 보통 체크 아웃 과정을 거쳐야 사용자에게 을 필요로하지 않습니다 젠토에서 다운로드 할 수있는 제품
  2. 을 만들 가능한 경우
  3. 및 다운로드 제품

의 '무료 샘플'필드 하지 불행히도 나는이 더 이상 설득력 요청할 수 있습니다 생각하지 않습니다. [/ 편집]

+0

내 생각에 사람들은 제목이 마음에 들지 않을 수도 있습니다. 스팸과 비슷하게 들립니다. 아마도 "Magento에서 Checkout을 건너 뛰기"의 라인을 따라 무엇인가? – statenjason

+0

좋은 의견, - 제목을 업데이트했습니다. –

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

당신은 조금 더 나은 예외를 처리해야하지만 기능적으로 정확해야합니다.

+0

나는 당신의 코드를 시험해 봤지만, 나는 주문을 할 수 없다. –

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

하지, 나는 적어도 옳은 길에 당신을 얻는 것을 희망합니다.

희망이 있습니다. 감사합니다. 조

+0

고마워요. 구성 가능한 제품으로이 작업을 수행하는 동료 중 한 명인 것처럼 보입니다. 그러나 어떻게해야할지 모르겠습니다. 내가 찾으면 여기에 게시 할 것입니다. –

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>"; 
} 
관련 문제