Probabilmente più di un modo per ottenere questo risultato, ma il mio metodo di scelta è stato quello di creare un plugin per \ Magento \ Spedizione \ modello \ Spedizione, in particolare i collectRates() funzione. Concessi i nostri requisiti erano più specifici dei tuoi (in fondo).
flusso logico di base è ...
collectRates()(funzione non modificato in \ Magento \ Spedizione \ modello \ Spedizione, raccoglie tariffe per tutti i metodi di spedizione)
afterCollectRates()(plug-in)
- A questo punto tutti i metodi di spedizione hanno ape n chiamato e le tariffe memorizzate nel nostro oggetto $ richiesta.
- È possibile determinare i prodotti che sono nel carrello via $ request-> getAllItems()
- NOTA: Bambino/prodotti controllanti sono elementi separati, ea seconda del vostro negozio di configurazione, l'uno o l'altro non può avere l'attributo personalizzato che vuoi guardare.
- è possibile vedere tutti i metodi/tariffe di spedizione tramite $ request-> getResult() -> getAllRates()
- non ho trovato una funzione fondamentale per rimuovere un tasso, la mia soluzione era quella di .. .
- Unset tutti i dati in frequenza per rimuovere
- Dopo tutte le tariffe siano modificati, utilizzare un ciclo foreach() per memorizzarli in un tempArray (con una certa logica di non aggiungere, se il costo == 0, ecc .)
- ora a filo e ripristinare tutte le tariffe esistenti tramite $ request-> getResult() -> Reset()
- Infine, aggiungere i tassi dal tempArray indietro nel
seconda su come calcoli i tassi, potresti anche voler estendere i vari metodi di spedizione in modo da poterli ignorare completamente quando alcuni prodotti sono nel carrello (probabilmente non per il tuo caso d'uso, ma per chiunque cerchi di disabilitare UPS/FedEx/etc.tariffe)
Come accennato, le nostre esigenze erano più ampia e abbiamo avuto anche una funzione beforeCollectRates(), che in realtà ha creato l'array prodotto e di qualche altra logica (abbiamo dovuto restringere vari metodi di trasporto, aggiungi la manipolazione di prodotti specifici, e utilizzare la logica dimensionale per creare un elenco di scatole di spedizione da inviare a UPS/FedEx, ecc. per la parte CollectRates() effettiva.)
fonte
2016-06-21 20:32:49