Frage

Der Store, an dem ich arbeite, ist nur für herunterladbare Produkte vorgesehen.Wenn wir während des Bezahlvorgangs ein Buch mit einem bestimmten Attributsatz haben, senden wir eine SOAP-Anfrage an ein externes Unternehmen (um die herunterladbare URL des E-Books von dem externen Unternehmen zu erhalten).Ich habe ein Modul geschrieben, das das überschreibt saveOrderAction des OnepageController.php

Ich habe eine zusätzliche Datenbanktabelle erstellt, in der die Informationen über die herunterladbare URL des Artikels gespeichert sind, die auf der aktualisiert wird saveOrderAction.

Da während des Bezahlvorgangs die Bestell-ID nicht generiert wird, habe ich einen Beobachter erstellt, der nach dem Ereignis „Bestellung wird gespeichert“ sucht. Dabei findet er die Bestell-ID der aktuellen Produkte, die ich in der von mir erstellten Datenbanktabelle aktualisiere.

Das Problem, das ich jetzt habe, besteht darin, wie ich die herunterladbaren URLs aktualisieren kann, wenn der Benutzer im Abschnitt „Herunterladbare Produkte“ seines Kundenkontos auf „Herunterladen“ klickt.

Im DownloadController.php Ich habe die Funktion gefunden linkAction was meiner Meinung nach aufgerufen wird, wenn auf den Download-Button für ein Produkt geklickt wird.Da drin habe ich print_r Die $linkPurchasedItem Variable, die eine zeigt purchased_id Und item_id die für das Produkt einzigartig erscheinen.

Um die herunterladbare URL zurückzugeben, die in der Datenbank (in meiner benutzerdefinierten Tabelle) gespeichert und von der externen Firma bereitgestellt wird, muss ich irgendwann die von mir erstellte Datenbanktabelle aktualisieren, um die „purchased_id“ oder „item_id“ einzufügen DownloadController.php auf der linkAction Ich kann einen weiteren Datenbankaufruf ausführen, um die richtige herunterladbare URL für das Produkt zu erhalten, für das diese Funktion aufgerufen wird.

Daher sind meine Fragen:

  • An welchem ​​Punkt ist die purchased_id und/oder item_id erzeugt?
  • Ist es möglich, sie in die zu bekommen? OnepageController.php?
  • Wie kann ich jedes Produkt in jeder Bestellung in meiner benutzerdefinierten Datenbanktabelle am besten eindeutig identifizieren, damit ich darauf verweisen kann? DownloadController.php?

Vielen Dank für jede Hilfe im Voraus.

War es hilfreich?

Lösung

Gehen wir Ihre Hauptfragen der Reihe nach durch:

1.An welchem ​​Punkt ist die purchased_id und/oder item_id erzeugt?

Beide purchased_id Und item_id werden im Inneren erzeugt Mage_Downloadable_Model_Observer aus der Methode saveDownloadableOrderItem.Dieser Beobachter ist registriert, um das Ereignis abzuhören sales_order_item_save_commit_after – wird jedes Mal aufgerufen, wenn ein Bestellartikel gespeichert wird und der DB-Transaktions-Commit abgeschlossen ist.

Die spezifische Zeile, in der dies festgelegt wird, ist ~105*:

$linkPurchasedItem = Mage::getModel('downloadable/link_purchased_item')
    ->setPurchasedId($linkPurchased->getId())
    ->setOrderItemId($orderItem->getId());

Dies geschieht kurz bevor der Hash für den Download-Link generiert wird.Sie werden sehen, dass das nicht explizit festgelegt wird item_id – Tatsächlich ist dies nicht erforderlich, da es sich um den Autoinkrement-Primärschlüssel für die Tabelle handelt.

In Summe, Die IDs werden festgelegt, nachdem der Bestellartikel erfolgreich in der Datenbank gespeichert wurde, d. h. die Bestellung selbst wird ebenfalls gespeichert.

2.Ist es möglich, sie in die OnepageController.php zu bekommen?

Denn zum Generieren muss die Bestellposition gespeichert werden purchased_id, Die Antwort ist nein.

3.Wie kann ich jedes Produkt in jeder Bestellung in meiner benutzerdefinierten Datenbanktabelle am besten eindeutig identifizieren, damit ich in DownloadController.php darauf verweisen kann?

Ähnlich wie oben im Modellsetzer gezeigt setOrderItemId, verwendeten sie die ID der Kundenauftragsposition, um auf dieses bestimmte Produkt zu verweisen.Auch Sie sollten diese Strategie nutzen.Um dies in Ihre eigene Tabelle einzufügen, schreiben Sie es neu Mage_Downloadable_Model_Observer zum Speichern in Ihrer eigenen Tabelle parallel zum Speichern in den herunterladbaren Tabellen – andernfalls müssen Sie das in dieser Klasse festgelegte Muster kopieren und viele Überprüfungen durchführen, um sicherzustellen, dass die Produkttyp-ID herunterladbar ist usw.

Zusammenfassung:

Sie können Download-Links von Ihrem SOAP-Dienst erst dann generieren, wenn die Bestellung abgeschlossen ist.Ohne einen größeren Refactor gibt es keinen Zugriff purchased_id in Onepage.php.


* mindestens in CE 1.8 Alpha / EE 1.13.0.1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top