Как мне сделать захват пользовательской формы в Magento, которая хранится вместе с заказом? - PullRequest
0 голосов
/ 27 сентября 2011

Я работаю над модулем, чтобы добавить новый этап под названием Аренда в модуль Onepage Checkout в magento. Проблема не в добавлении шага, а в захвате данных.

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

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

Как бы вы поступили так? Какова будет ваша личная стратегия для реализации этого?

1 Ответ

0 голосов
/ 19 мая 2012

Во-первых, все должно зависеть от того, какими будут данные «Аренда».Может ли он соответствовать / быть соответствующим образом размещен внутри пользовательской опции продукта?Или вам нужно создать собственный атрибут продаж для хранения данных?

Если вы хотите последнее, вам следует использовать Magento Module Creator от SilkSoftware , чтобы создать модуль для реализации атрибутов продаж.

Также: хороший поток / сценарий использования атрибутов продаж: Magento: установка пользовательского атрибута в модели sales / order_shipment

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

<input type="text" name="rental[text_data]" />
<input type="text" name="rental[text_data2]" />

Где text_data и text_data2 - ваши нужные имена переменных.

В конечном итоге заказ отправляется / сохраняется с помощью действия контроллера, называемого saveOrderAction в Mage_Checkout_OnepageController, или любого другого класса контроллера, используемого в настоящее время для страницы оформления заказа.Не редактируйте соответствующий файл класса PHP для этого в app/code/core/Mage/Checkout/controllers/OnepageController.php!Поскольку вы хотите разделить это на другой модуль, вы должны попытаться переписать этот контроллер, чтобы ваш собственный класс Controller внутри вашего модуля, который расширяет вышеупомянутый базовый класс (Mage_Checkout_OnepageController), должен был использоваться Magento вместо него.

Хороший учебник по переписыванию контроллеров можно найти здесь .

Здесь вы можете сделать любой из двух вариантов:

1.), Который вы можете скопироватьвся функция saveOrderAction и создание подпрограмм для сохранения там данных об аренде.если вы следовали семантике именования, которую я предложил, вы сможете получить данные формы, выполнив:

<?php
// app/code/local/Namespace/Module/controllers/Checkout.php
class Namespace_Module_Checkout extends Mage_Checkout_OnepageController {

    public function saveOrderAction() {


        .....

        $this->getOnepage()->getQuote()->save();

        $rental = $this->getRequest->getParam('rental');
        $text_data = $rental['text_data'];
        $text_data = $rental['text_data2'];
        someSaveRoutine($text_data, $text_data2);
        //..or someSaveRoutine($rental);

        .....
   }
}

2.) во-вторых, вы можете заменить приведенный выше код пользовательской отправкой события

 $rental = $this->getRequest->getParam('rental');
 Mage::dispatchEvent('checkout_onepage_controller_saveorder', array('rental'=> $rental));

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

Я знаю, что это не так много, но это начало.Я посмотрю на редактирование этого, чтобы уточнить в ближайшем будущем.

...