Пропустить Checkout в Magento для загрузки продукта - PullRequest
11 голосов
/ 13 апреля 2010

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 21 февраля 2011

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

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

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

3 голосов
/ 15 апреля 2010

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

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

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

1 голос
/ 30 января 2015

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

$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>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...