2010-04-13 12 views
11

Ich benutze Magento, um eine eBooks Site zu bauen. Für die Veröffentlichung planen wir eine Reihe von frei herunterladbaren Büchern. Wir hatten gehofft, dass es möglich wäre, die normale Magento-Katalogfunktionalität zu verwenden, um Kategorien mit darunter liegenden Produkten hinzuzufügen. Da es sich jedoch um frei herunterladbare Produkte handelt, ist es nicht wirklich sinnvoll, Benutzer beim Herunterladen durch die Kasse zu schicken.Überspringen Sie Kasse in Magento für ein herunterladbares Produkt

Kennt jemand eine Möglichkeit, ein kostenloses herunterladbares Produkt zu erstellen, das die Kasse insgesamt umgeht? Ich habe festgestellt, dass es eine "kostenlose Probe" -Option für herunterladbare Produkte gibt, aber ich würde es vorziehen, dies nicht zu verwenden, wenn ich dieses Feld für den beabsichtigten Zweck nutzen möchte, wenn ich bezahlte Produkte hinzufüge.

[EDIT] Ich habe festgestellt, dass einige von Ihnen diese Frage wegen 'mangelnder Klarheit der Frage' abgelehnt haben. Aus Gründen der Klarheit möchte ich:

  1. wissen, ob es zu erstellen Download-Produkt in Magento möglich ist, die Benutzer erfordert keine über die üblichen Kasse Prozess zu gehen (da es frei ist)
  2. und die einer herunterladbaren Produkt

Leider mehr das ich ist nicht glaube, ich fragen kann jede eloquent nicht die ‚Free Sample‘ Feld. [/ EDIT]

+0

Meine Vermutung ist, dass Leute den Titel möglicherweise nicht mögen. Es klingt ein wenig Spam-ähnlich. Vielleicht etwas in Anlehnung an "Skip Checkout in Magento"? – statenjason

+0

Gutes Feedback, - Ich habe den Titel aktualisiert. –

+0

Möchten Sie den Download als "Bestellung" aufzeichnen oder nur Personen erlauben, sie zu greifen. Als Auftrag können Sie die Geschichte von sehen, wer es herunterlädte ... –

Antwort

6

Dieser Code ermöglicht es eingeloggten Kunden, eine Bestellung für ein kostenloses, virtuelles Produkt zu tätigen, während sie die Kasse umgehen und direkt zum Abschnitt "Meine Downloads" ihres Kontos umleiten.

Fügen Sie die folgende Zeile zu Ihrem catalog/product/list.phtml an der gewünschten Stelle hinzu.

<?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 } ?> 

Dann ein neues Modul mit einem controllers/CheckoutController.php diesen Code erstellen enthält:

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

Hier finden Sie die Ausnahmen ein wenig besser behandeln müssen, aber das sollte funktionell richtig sein.

+0

Ich habe Ihren Code versucht, aber ich kann die benutzerdefinierte Reihenfolge nicht machen. –

3

Meine beste blinde Schätzung (Blick auf die Blöcke und Modelle in Mage_Downloadable) verwendet die Produkttyp-Instanz. Also, irgendwo in Ihrer Produktvorlage, können Sie in der Lage sein, dies zu tun:

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

Wenn nicht, ich hoffe, dass zumindest bekommt man auf dem richtigen Weg.

Hoffe, dass hilft. Danke, Joe

+0

Danke. Es sieht aus als ob einer meiner Kollegen dies mit konfigurierbaren Produkten geschafft hat, aber ich bin mir nicht sicher wie. Wenn ich es herausfinde, werde ich es hier posten. –

1

Sie können eine Liste Ihrer herunterladbaren Links durchlaufen und für jeden einen Link hinzufügen.

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