Magento - уникально ссылаться на элементы заказа во время оформления одной страницы
-
16-10-2019 - |
Вопрос
Магазин, над которым я работаю, предназначен только для загружаемых продуктов. Во время оформления заказа, если у нас есть книга с определенным набором атрибутов, мы отправляем запрос 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