ShippingOrderProcessor nicht gut registriert?
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
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 }