Domanda

Il negozio cui sto lavorando è solo per prodotti scaricabili. Durante l'acquisto se abbiamo un libro di un particolare set di attributi inviamo una richiesta SOAP ad una società esterna (per ottenere l'URL scaricabile del ebook dalla società esterna). Ho scritto un modulo che sostituisce il saveOrderAction del OnepageController.php

Ho creato una tabella di database in più che memorizza le informazioni su URL scaricabile dell'elemento che viene aggiornato sul saveOrderAction.

come durante il check-out il ID ordine non viene generato ho creato un osservatore che controlla per l'ordine di essere salvati evento, nel corso di questo si trova l'ID ordine dei prodotti attuali che ho aggiornare la tabella del database che ho creato.

Il problema che sto avendo ora è come aggiornare gli URL scaricabili quando l'utente clicca il download sul loro sezione scaricabile prodotti del proprio account del cliente.

Nel DownloadController.php ho trovato la funzione linkAction che credo sia chiamata quando il pulsante di download viene cliccato per un prodotto. Lì ho print_r la variabile $linkPurchasedItem che mostra una purchased_id e item_id che sembrano essere unico per il prodotto.

Per tornare l'URL scaricabile che viene salvato nel database (sul mio tavolo custom) e dato dalla società esterna avrò bisogno di aggiornare la tabella del database che ho creato ad un certo punto per inserire la 'purchased_id' o 'item_id' così nel DownloadController.php sul linkAction posso correre un'altra chiamata database per ottenere l'URL scaricabile giusta per il prodotto di questa funzione viene chiamata per.

Quindi le mie domande sono:

  • A che punto è la purchased_id e / o item_id generato?
  • E 'possibile farli in OnepageController.php?
  • Qual è il modo migliore per identificare in modo univoco ogni prodotto in ogni ordine nella mia tabella di database personalizzato in modo da poter fare riferimento nel DownloadController.php?

Grazie per qualsiasi aiuto in anticipo.

È stato utile?

Soluzione

Prendiamo le vostre domande principali, in ordine:

1. A che punto è la purchased_id e / o item_id generato?

Sia purchased_id e item_id sono generati all'interno Mage_Downloadable_Model_Observer dal metodo saveDownloadableOrderItem. Questo osservatore è iscritto ad ascoltare per la sales_order_item_save_commit_after evento -. Che è chiamato ogni volta che un articolo di ordine viene salvato e la transazione db commit ha completato

La linea specifico in cui questo è insieme è ~ 105 *:

$linkPurchasedItem = Mage::getModel('downloadable/link_purchased_item')
    ->setPurchasedId($linkPurchased->getId())
    ->setOrderItemId($orderItem->getId());

Questo accade appena prima che genera l'hash il link di download. Vedrai che non pone esplicitamente il item_id -. Anzi, non è necessario perché è la chiave primaria autoincrement per la tabella

In sintesi, gli ID sono impostati dopo l'articolo di ordine è stato salvato con successo al database, il che significa l'ordine stesso viene salvato anche.

2. E 'possibile farli in OnepageController.php?

Poiché l'articolo di ordine deve essere salvato al fine di generare il purchased_id, la risposta è no.

3. Qual è il modo migliore per identificare in modo univoco ciascun prodotto in ogni ordine nella mia tabella di database personalizzato in modo da poter fare riferimento nel DownloadController.php?

Più o meno allo stesso modo, come mostrato in precedenza nella setOrderItemId modello di setter, hanno usato id della posizione ordine cliente di riferimento quel particolare prodotto. Si dovrebbe anche utilizzare questa strategia. Al fine di iniettare questo nella vostra propria tabella, riscrivere Mage_Downloadable_Model_Observer per salvare al tuo tavolo in parallelo per il salvataggio nelle tabelle scaricabili - altrimenti dovrete copiare il set di modello indietro in quella classe, facendo molti controlli per garantire che il tipo di prodotto id è scaricabile, ecc.

Riepilogo:

Non hai intenzione di essere in grado di generare link per il download dal proprio servizio SOAP fino a dopo l'ordine è stato completato. Senza un importante refactoring non v'è alcun modo per purchased_id l'accesso in Onepage.php.


* almeno in CE 1.8 Alpha / EE 1.13.0.1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top