Question

Le magasin je travaille est pour les produits téléchargeables seulement. Au cours de la caisse si nous avons un livre d'un ensemble d'attributs particulier, nous envoyons une requête SOAP à une société externe (pour obtenir l'URL téléchargeable de l'ebook de la société externe). Je l'ai écrit un module qui remplace l'saveOrderAction du OnepageController.php

J'ai créé une table de base de données supplémentaire qui stocke les informations sur l'URL téléchargeable de l'élément qui est mis à jour sur le saveOrderAction.

Comme lors de l'achat de l'Ordre ID est pas généré J'ai créé un observateur qui vérifie l'ordre d'être événements enregistrés, au cours de ce qu'il trouve le numéro de commande des produits actuels qui mettre à jour la table de base de données que j'ai créé.

Le problème que je vais avoir est maintenant comment mettre à jour les URL téléchargeables lorsque l'utilisateur clique sur le téléchargement de leur section de produits téléchargeables de leur compte client.

Dans le DownloadController.php j'ai trouvé la fonction linkAction que je crois est appelée lorsque le bouton de téléchargement est cliqué pour un produit. Là je print_r la variable $linkPurchasedItem qui montre une purchased_id et item_id qui semble être unique pour le produit.

Pour revenir l'URL téléchargeable qui est enregistrée dans la base de données (sur ma table personnalisée) et compte tenu de l'entreprise extérieure je besoin de mettre à jour la table de base de données que j'ai créé à un moment donné pour insérer le « purchased_id » ou « ITEM_ID » Ainsi, dans le DownloadController.php sur le linkAction je peux exécuter un autre appel de base de données pour obtenir le droit URL téléchargeable pour le produit de cette fonction est nécessaire.

Par conséquent, mes questions sont:

  • À quel moment est le purchased_id et / ou item_id généré?
  • Est-il possible de les obtenir dans le OnepageController.php?
  • Quelle est la meilleure façon d'identifier de manière unique chaque produit dans chaque ordre dans ma table de base de données personnalisée afin que je puisse y faire référence dans le DownloadController.php?

Merci pour toute aide à l'avance.

Était-ce utile?

La solution

Nous allons répondre à vos questions principales, dans l'ordre:

1. À quel moment est le purchased_id et / ou item_id généré?

Les deux purchased_id et item_id sont générés à l'intérieur de la méthode Mage_Downloadable_Model_Observer saveDownloadableOrderItem. Cet observateur est inscrit à écouter le sales_order_item_save_commit_after de l'événement -. Qui est appelé à chaque fois un élément de commande est enregistrée et la transaction db allouent a terminé

La ligne spécifique où ce paramètre est réglé est ~ 105 *:

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

Cela se produit juste avant qu'il ne génère le hachage pour le lien de téléchargement. Vous verrez qu'il ne précise pas explicitement la item_id -. En effet, il est nécessaire, car il est la clé primaire autoincrement pour la table

En résumé, les ids sont réglées après que l'élément de commande est enregistré avec succès à la base de données, ce qui signifie l'ordre lui-même est également enregistré.

2. Est-il possible de les obtenir dans le OnepageController.php?

Parce que l'élément de commande doit être enregistré afin de générer le purchased_id, la réponse est non.

3. Quelle est la meilleure façon d'identifier de manière unique chaque produit dans chaque ordre dans ma table de base de données personnalisée afin que je puisse y faire référence dans le DownloadController.php?

De la même manière, comme indiqué ci-dessus dans le poseur de modèle setOrderItemId, ils ont utilisé l'identifiant de l'ordre de vente élément à référence produit particulier. Vous devez également utiliser cette stratégie. Pour injecter dans votre propre table, réécrire Mage_Downloadable_Model_Observer pour enregistrer sur votre propre table en parallèle à la sauvegarde dans les tableaux téléchargeables - sinon vous devrez copier le jeu de modèle vient dans cette classe, en faisant beaucoup de contrôles pour veiller à ce que l'identifiant de type de produit est téléchargeable, etc.

Résumé:

Tu ne vas pas être en mesure de générer des liens de téléchargement de votre service SOAP jusqu'à ce que l'ordre soit terminé. Sans un refactoring majeur il n'y a aucun moyen de purchased_id d'accès Onepage.php.


* au moins dans CE 1.8 Alpha / EE 1.13.0.1

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top