Magento - уникально ссылаться на элементы заказа во время оформления одной страницы

magento.stackexchange https://magento.stackexchange.com/questions/5498

Вопрос

Магазин, над которым я работаю, предназначен только для загружаемых продуктов. Во время оформления заказа, если у нас есть книга с определенным набором атрибутов, мы отправляем запрос SOAP внешней компании (чтобы получить загружаемый URL -адрес электронной книги от внешней компании). Я написал модуль, который переопределяет saveOrderAction принадлежащий OnepageController.php

Я создал дополнительную таблицу базы данных, в которой хранится информация о загружаемом URL -адресах элемента, который обновляется на saveOrderAction.

Поскольку во время оформления заказа идентификатор заказа не сгенерирован, я создал наблюдателя, который проверяет на сохраненное событие, во время этого он находит идентификатор заказа текущих продуктов, которые я обновляю таблицу базы данных, которую я создал.

Проблема, с которой я сталкиваюсь, заключается в том, как обновить загружаемые URL -адреса, когда пользователь нажимает загрузку в разделе загружаемых продуктов своей учетной записи клиента.

в DownloadController.php Я нашел функцию linkAction Что, я считаю, называется, когда кнопка загрузки нажимается для продукта. Там у меня есть print_r а $linkPurchasedItem переменная, которая показывает purchased_id а также item_id которые кажутся уникальными для продукта.

Чтобы вернуть загружаемый URL -адрес, который сохраняется в базе данных (в моей пользовательской таблице) и приведен от внешней компании, мне нужно будет обновить таблицу базы данных, которую я создал в какой -то момент, чтобы вставить «приобретенную_ид» или «item_id», так что в DownloadController.php на linkAction Я могу запустить еще один вызов базы данных, чтобы получить правильный загружаемый URL -адрес продукта, на которую требуется эта функция.

Поэтому мои вопросы:

  • В какой момент purchased_id и/или item_id сгенерировано?
  • Возможно ли получить их в OnepageController.php?
  • Какой лучший способ уникально идентифицировать каждый продукт в каждом порядке в моей пользовательской таблице баз данных, чтобы я мог ссылаться на его в DownloadController.php?

Спасибо за любую помощь заранее.

Это было полезно?

Решение

Давайте возьмем ваши основные вопросы, чтобы:

1. В какой момент purchased_id и/или item_id сгенерировано?

Оба purchased_id а также item_id генерируются внутри Mage_Downloadable_Model_Observer из метода saveDownloadableOrderItem. Анкет Этот наблюдатель зарегистрирован для прослушивания мероприятия sales_order_item_save_commit_after - который называется каждый раз, когда элемент заказа сохраняется, а фиксация транзакции БД завершается.

Конкретная линия, в которой это установлено, составляет ~ 105*:

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

Это происходит как раз перед тем, как он генерирует хэш для ссылки на скачивание. Вы увидите, что это явно не устанавливает item_id - Действительно, в этом нет необходимости, потому что это основной ключ автоинсюрмана для таблицы.

В итоге, Идентификаторы устанавливаются после успешного сохранения элемента заказа в базе данных, что означает, что сам порядок также сохраняется.

2. Можно ли получить их в OnePageController.php?

Поскольку элемент заказа должен быть сохранен, чтобы генерировать purchased_id, ответ - нет.

3. Как лучше всего определить каждый продукт в каждом порядке в моей таблице пользовательских баз данных, чтобы я мог ссылаться на его в загрузке controller.php?

Во многом так же, как показано выше в сеттере модели setOrderItemId, они использовали идентификатор элемента заказа на продажу для ссылки на этот конкретный продукт. Вы также должны использовать эту стратегию. Чтобы ввести это в свой собственный стол, переписать Mage_Downloadable_Model_Observer Чтобы сохранить в своей собственной таблице параллельно с сохранением в загружаемых таблицах - в противном случае вам придется скопировать шаблон, изложенный в этом классе, выполняя множество чеков, чтобы убедиться, что идентификатор типа продукта можно загрузить и т. Д.

Резюме:

Вы не сможете генерировать ссылки на загрузку из своего SOAP Service до тех пор, пока заказ не будет завершен. Без крупного рефакторика нет способа получить доступ к purchased_id в OnePage.php.


* По крайней мере в CE 1.8 Alpha / EE 1.13.0.1

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top