ShippingOrderProcessor kayıtlı değil mi?

Oct 21 2020

Sepet sayfasında nakliye maliyetlerini göstermeye zorlaması gereken @jsacksick çözümünü uygulamaya çalışıyorum (normalde bu adımda henüz mevcut değildir). Bunun için yeni bir modül oluşturdum ve yapısı basit:

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

ShippingOrderProcessor.php, @jsacksick sınıfının tam bir kopyasıdır: https://gist.github.com/jsacksick/fde031197df92236ef5a916775e17a2e

bilgi dosyası şunları içerir:

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

modül dosyası boş ve hizmetler dosyası şunları içeriyor:

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

Ama işe yaramıyor. O sınıfın içindeki kırılma noktalarını __construct()ve process()yöntemlerini belirlemeye çalıştım , ancak asla ulaşılamadı.

Buradaki son satırı şu şekilde değiştirmeyi denedim:

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

burada açıklandığı gibi: https://docs.drupalcommerce.org/commerce2/developer-guide/orders/order-refresh-and-process

ancak önbelleği temizlemeye çalıştığımda sitem çöküyor?

Bu yüzden bana göre bu işlemci nesnesini iyi kaydetmedim. Büyük olasılıkla sorun hizmetler dosyasındadır, ancak ne olduğunu anlayamıyorum (" commerce_shipping.shipping_order_processor " doğru değer mi?).

Damping hizmetleri gibi drush ile denendi:

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

ve hatta aldığım her denemede geliştirme modu açık: "devel-container-services" komutu tanımlanmadı. veya benzeri.

Elbette modülümü etkinleştirdim, önbellekleri temizlemeyi denedim ama yardımcı olmadım.

Güncelleme: Son hizmet satırını değiştirdiğimde aldığım hata:

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

dır-dir:

"Commerce_order.order_refresh" tüketicisi için "shipping_fix.shipping_order_processor" hizmeti, Drupal \ commerce_order \ OrderProcessorInterface'i uygulamıyor.

ShippingOrderProcess.php dosyası şununla başlar:

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

...

Güncelleme 2:

Önbelleği temizlemeyi başardı: Dosya yapım için ad alanı şöyle olmalı:

namespace Drupal\shipping_fix;

Ayrıca hizmet dosyası değiştirildi ve şimdi şöyle görünüyor:

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 }

Şimdi önbellek temizleme çalışıyor, ancak hala alışveriş sepeti sayfasında nakliye ücretlerini görmüyorum ...

Yanıtlar

NoSssweat Oct 22 2020 at 12:01

Bu durumda, commerce_shipping.early_order_processorönceliği 300 olarak ayarlamadan önce bunu çalıştırmak isteyeceksiniz.

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 }