ShippingOrderProcessor non registrato bene?

Oct 21 2020

Sto cercando di implementare la soluzione @jsacksick che dovrebbe forzare la visualizzazione dei costi di spedizione nella pagina del carrello (normalmente non esiste ancora in quel passaggio). Ho creato un nuovo modulo per questo e la sua struttura è semplice:

shipping_fix
  src
    ShippingOrderProcessor.php
  shipping_fix.info.yml
  shipping_fix.module
  shipping_fix.services.yml

ShippingOrderProcessor.php è una copia esatta della classe @jsacksick: https://gist.github.com/jsacksick/fde031197df92236ef5a916775e17a2e

il file info contiene:

name: Shipping fix
description: Fixes missing shipping info on cart page
type: module
core: 8.x
dependencies:

Il file del modulo è vuoto e il file dei servizi contiene:

services:
  shipping_fix.shipping_order_processor:
    class: Drupal\shipping_fix\ShippingOrderProcessor
    tags:
      - { name: commerce_shipping.shipping_order_processor, priority: -300 }

Ma non funziona. Ho provato a impostare punti di interruzione all'interno __construct()e process()metodi di quella classe, ma non sono mai stati raggiunti.

Ho provato a cambiare l'ultima riga qui in:

 - { name: commerce_order.order_processor, priority: -300 }

come spiegato qui: https://docs.drupalcommerce.org/commerce2/developer-guide/orders/order-refresh-and-process

ma poi il mio sito va in crash quando provo a svuotare la cache?

Quindi a me sembra che non ho registrato bene questo oggetto del processore. Molto probabilmente il problema è nel file dei servizi, ma non riesco a capire cosa sia (" commerce_shipping.shipping_order_processor " è il valore corretto?).

Ho provato servizi di dumping con drush come:

drush devel:services
drush devel-container-services
drush devel-services

e anche la modalità di sviluppo è attivata per ogni tentativo che ottengo: Il comando "devel-container-services" non è definito. o simili.

Ovviamente ho attivato il mio modulo, ho provato a svuotare le cache, ma non ho aiutato.

Aggiornamento: l'errore che ottengo quando cambio l'ultima riga del file di servizi in:

 - { name: commerce_order.order_processor, priority: -300 }

è:

Il servizio "shipping_fix.shipping_order_processor" per il consumatore "commerce_order.order_refresh" non implementa Drupal \ commerce_order \ OrderProcessorInterface.

E il file ShippingOrderProcess.php inizia con:

<?php declare(strict_types=1);

namespace Drupal\my_module\OrderProcessor;

use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_order\OrderProcessorInterface;
use Drupal\commerce_shipping\ShipmentManagerInterface;
use Drupal\commerce_shipping\ShippingOrderManagerInterface;
use Drupal\profile\Entity\Profile;

/**
 * Ensures there are shipments from the start.
 */
final class ShippingProcessor implements OrderProcessorInterface {

  /**
   * The shipping order manager.
   *
   * @var \Drupal\commerce_shipping\ShippingOrderManagerInterface
   */
  protected $shippingOrderManager; /** * The shipment manager. * * @var \Drupal\commerce_shipping\ShipmentManagerInterface */ protected $shipmentManager;


  public function __construct(ShippingOrderManagerInterface $shippingOrderManager, ShipmentManagerInterface $shipmentManager) {
    $this->shippingOrderManager = $shippingOrderManager;
    $this->shipmentManager = $shipmentManager;
  }

...

Aggiornamento 2:

Riuscito a svuotare la cache: per la mia struttura di file lo spazio dei nomi deve essere:

namespace Drupal\shipping_fix;

Modificato anche il file servies e ora sembra:

services:
  shipping_fix.shipping_order_processor:
    class: Drupal\shipping_fix\ShippingProcessor
    arguments: ['@commerce_shipping.order_manager', '@commerce_shipping.shipment_manager']
    tags:
      - { name: commerce_order.order_processor, priority: -300 }

Ora la cancellazione della cache funziona, ma ancora non vedo i costi di spedizione nella pagina del carrello ...

Risposte

NoSssweat Oct 22 2020 at 12:01

In questo caso, ti consigliamo di eseguirlo prima di commerce_shipping.early_order_processorimpostare la priorità su 300

services:
  shipping_fix.shipping_order_processor:
    class: Drupal\shipping_fix\ShippingProcessor
    arguments: ['@commerce_shipping.order_manager', '@commerce_shipping.shipment_manager']
    tags:
      - { name: commerce_order.order_processor, priority: 300 }