11

Magento を使用して電子書籍サイトを構築しています。リリースに向けて、無料でダウンロードできる書籍を多数用意する予定です。通常の Magento の「カタログ」機能を使用して、その下に製品を含むカテゴリを追加できることを期待していました。ただし、これらは無料でダウンロードできる製品であるため、ユーザーがダウンロードしようとしたときにチェックアウトを行うことはあまり意味がありません。

チェックアウトを完全にバイパスする無料のダウンロード可能な製品を作成する方法を知っている人はいますか? ダウンロード可能な製品には「無料サンプル」オプションがあることに気付きましたが、有料製品を追加するときにこのフィールドを本来の目的で使用する予定であるため、可能であればこれを使用したくない.

[編集] 「質問が明確でない」という理由で、この質問に反対票を投じた方がいることに気づきました。明確にするために、私は欲しい:

  1. ユーザーが通常のチェックアウト プロセスを実行する必要がないダウンロード可能な製品を Magento で作成できるかどうかを知る (無料であるため)
  2. ダウンロード可能な製品の「無料サンプル」フィールドではない

残念ながら、これ以上雄弁に尋ねることはできないと思います。[/編集]

4

3 に答える 3

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

例外をもう少しうまく処理する必要がありますが、それは機能的に正しいはずです。

于 2011-02-21T08:01:35.007 に答える
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>";
    }
}

そうでない場合は、少なくとも正しい道に進むことを願っています。

それが役立つことを願っています。ありがとう、ジョー

于 2010-04-15T02:24:23.060 に答える