Magento - riferimento unicamente gli articoli di ordine nel corso di una pagina di checkout
-
16-10-2019 - |
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 / oitem_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.
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