2016-06-13 20 views
5

Sono nuovo in Magento 2. Qualcuno conosce un modo per disattivare un metodo di spedizione basato su un attributo che contiene i prodotti nel carrello. Diciamo che vogliamo abilitare il ritiro del negozio solo per determinati prodotti. Sul checkout onepage questi sono aggiornati con un post/resto/it/V1/guest-carr/SESSION_ID/stima-spedizione-metodi, ma ho provato il modulo checkout e modulo-preventivo e ancora non riesco a trovare dove questo codice è così posso estenderlo Sarebbe utile se qualcuno lo ha già trovato prima.Metodi di spedizione del filtro Magento 2 basati sull'attributo del prodotto

Grazie

risposta

2

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.)

Problemi correlati