2010-04-13 11 views
11

Sto usando Magento per costruire un sito di eBook. Per il rilascio, abbiamo in programma di avere un numero di libri scaricabili gratuitamente. Speravamo che sarebbe stato possibile utilizzare la normale funzionalità di 'catalogo' di Magento per aggiungere categorie ai prodotti sottostanti. Tuttavia, dal momento che si tratta di prodotti scaricabili gratuitamente, non ha senso inviare gli utenti al checkout quando provano a scaricare.Skip Checkout in Magento per un prodotto scaricabile

Qualcuno sa di un modo per creare un prodotto scaricabile gratuitamente che ignori del tutto la cassa? Ho notato che esiste un'opzione "campione gratuito" per i prodotti scaricabili, ma preferirei non utilizzarla se posso, poiché ho intenzione di utilizzare questo campo per lo scopo previsto quando aggiungo prodotti a pagamento.

[EDIT] Ho notato che alcuni di voi hanno votato questa domanda per "mancanza di chiarezza delle domande". Per chiarezza, voglio:

  1. sapere se è possibile creare un prodotto scaricabile in Magento che non richiede agli utenti per passare attraverso il processo di checkout solita (dal momento che è gratuito)
  2. e che non è il campo 'campione gratuito' di un prodotto scaricabile

Purtroppo non credo che posso chiedere questo più eloquente. [/ EDIT]

+0

La mia ipotesi è che alla gente possa non piacere il titolo. Sembra un po 'come lo spam. Forse qualcosa sulla falsariga di "Skip Checkout in Magento"? – statenjason

+0

Buone risposte, - Ho aggiornato il titolo. –

+0

Si desidera registrare il download come "ordine" o semplicemente consentire alle persone di afferrarlo. Come ordine, puoi vedere la cronologia di chi lo ha scaricato ... –

risposta

6

Questo codice consentirà ai clienti loggati di "effettuare un ordine" per un prodotto virtuale gratuito, evitando il checkout e reindirizzandoli direttamente alla sezione I miei download del proprio account.

Aggiungi la seguente riga al tuo catalog/product/list.phtml nel posto desiderato.

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

quindi creare un nuovo modulo con un controllers/CheckoutController.php contenente questo codice:

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

Avrai bisogno di gestire le eccezioni un po 'meglio, ma che dovrebbe essere funzionalmente corretta.

+0

Ho provato il tuo codice, ma non posso effettuare l'ordine personalizzato. –

3

La mia ipotesi migliore (considerando i blocchi e i modelli in Mage_Downloadable) utilizza l'istanza del tipo di prodotto. Così, da qualche parte nei vostri modelli di prodotto, si può essere in grado di fare questo:

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

In caso contrario, spero che almeno ti porta sulla strada giusta.

Spero che questo aiuti. Grazie, Joe

+0

Grazie. Sembra che uno dei miei colleghi sia riuscito a farlo con prodotti configurabili, ma non sono sicuro di come. Se lo scoprirò, lo posterò qui. –

1

È possibile scorrere un elenco di collegamenti scaricabile e aggiungere un collegamento per ciascuno di essi.

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