2010-04-13 4 views
11

Я использую Magento для создания сайта электронных книг. Для выпуска мы планируем иметь множество бесплатных загружаемых книг. Мы надеялись, что можно будет использовать обычную функциональность Magento «catalog» для добавления категорий с продуктами под ними. Однако, поскольку это бесплатные загружаемые продукты, на самом деле не имеет смысла отправлять пользователей через проверку, когда они пытаются загрузить.Skip Checkout in Magento для загружаемого продукта

Кто-нибудь знает, как создать бесплатный загружаемый продукт, который вообще обходит кассу? Я заметил, что есть опция «бесплатной выборки» для загружаемых продуктов, но я бы предпочел не использовать это, если смогу, когда планирую использовать это поле по назначению, когда добавляю платные продукты.

[EDIT] Я заметил, что некоторые из вас проголосовали за этот вопрос за «отсутствие ясности вопроса». Для ясности, я хочу:

  1. знать, если это возможно создать загружаемый продукт в Magento, который не требует от пользователей , чтобы пройти через этот процесс обычно контроль (поскольку она свободна)
  2. и , который не является полем «Free Sample» загружаемого продукта

к сожалению, я не думаю, что я могу попросить это больше красноречиво. [/ EDIT]

+0

Я полагаю, что людям может не понравиться название. Звучит немного похоже на спам. Возможно, что-то похожее на «Пропустить проверку в Magento»? – 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>"; 
    } 
} 

Если нет, то я надеюсь, что по крайней мере получает вас на правильный путь.

Надеюсь, что это поможет. Спасибо, Joe

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