Пропустить Checkout в Magento для загружаемого продукта

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

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

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

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

К сожалению, я не думаю, что я могу попросить об этом более красноречиво. [/РЕДАКТИРОВАТЬ]

Этот код позволит зарегистрированным клиентам «размещать заказ» для бесплатного виртуального продукта, минуя проверку и перенаправлять их прямо в раздел «Мои заказы» своей учетной записи.

Добавьте следующую строку в свой 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); } } 

Вам нужно будет обработать Исключения немного лучше, но это должно быть функционально правильным.

Мое лучшее слепое предположение (глядя на блоки и модели в 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>"; } } 

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

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

Вы можете просмотреть список загружаемых ссылок и добавить ссылку для каждого из них.

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