ShippingOrderProcessor nicht gut registriert?

Oct 21 2020

Ich versuche, eine @ jsacksick-Lösung zu implementieren, die die Anzeige der Versandkosten auf der Warenkorbseite erzwingen sollte (normalerweise ist sie zu diesem Zeitpunkt noch nicht vorhanden). Ich habe dafür ein neues Modul erstellt und die Struktur ist einfach:

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

ShippingOrderProcessor.php ist eine exakte Kopie der @ jsacksick-Klasse: https://gist.github.com/jsacksick/fde031197df92236ef5a916775e17a2e

Info-Datei enthält:

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

Die Moduldatei ist leer und die Servicedatei enthält:

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

Aber es funktioniert nicht. Ich habe versucht, Haltepunkte __construct()und process()Methoden dieser Klasse festzulegen, aber sie werden nie erreicht.

Ich habe versucht, die letzte Zeile hier zu ändern:

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

wie hier erklärt: https://docs.drupalcommerce.org/commerce2/developer-guide/orders/order-refresh-and-process

aber dann stürzt meine Site ab, wenn ich versuche, den Cache zu leeren?

Für mich sieht es so aus, als hätte ich dieses Prozessorobjekt nicht gut registriert. Das wahrscheinlichste Problem liegt in der Servicedatei, aber ich kann nicht herausfinden, was es ist (" trade_shipping.shipping_order_processor " ist der richtige Wert?).

Versuchte Dumping-Dienste mit Drush wie:

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

und sogar der Entwicklungsmodus wird für jeden Versuch aktiviert , den ich bekomme: Der Befehl "Entwicklungscontainerdienste" ist nicht definiert. o.ä.

Ich habe natürlich mein Modul aktiviert, versucht, Caches zu löschen, aber nicht geholfen.

Update: Der Fehler, den ich erhalte, wenn ich die letzte Zeile der Servicedatei in Folgendes ändere:

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

ist:

Der Dienst 'dispipping_fix.shipping_order_processor' für den Verbraucher 'Commerce_order.order_refresh' implementiert Drupal \ Commerce_order \ OrderProcessorInterface nicht.

Die Datei ShippingOrderProcess.php beginnt mit:

<?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;
  }

...

Update 2:

Verwaltet, um den Cache zu leeren: Für meine Dateistruktur muss der Namensraum sein:

namespace Drupal\shipping_fix;

Auch Servies-Datei geändert und jetzt sieht es so aus:

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 }

Jetzt funktioniert das Löschen des Caches, aber ich sehe immer noch keine Versandkosten auf der Warenkorbseite ...

Antworten

NoSssweat Oct 22 2020 at 12:01

In diesem Fall möchten Sie dies ausführen, bevor Sie die commerce_shipping.early_order_processorPriorität auf 300 setzen

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 }