Регистрация нового пользователя в Magento - введите свой код - PullRequest
0 голосов
/ 19 сентября 2011

Я пытаюсь установить слабую связь между установкой Magento и другим приложением.В частности, на данный момент меня волнуют только две вещи - клиенты и их покупки.До сих пор я редактировал файл app/code/core/Mage/Customer/controllers/AccountController.php - функция createPostAction() дополнена для отправки информации о клиенте в другое приложение.В файл success.phtml была внесена другая модификация для отправки деталей заказа после его размещения.

У меня проблема в том, что если пользователь просто помещает товары в корзину (как гость) изатем регистрируется как часть процесса оформления заказа - запись о клиенте во втором приложении никогда не создается.Это работает только в том случае, если пользователь сначала явно регистрируется, а затем проверяет отдельно.

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

Редактировать: я не включаю примеры кода, поскольку это в значительной степени не имеет значения - проблема не в коде, а в том, что он явно не в том месте.Где было бы хорошим местом для добавления пользовательского кода, который должен запускаться при регистрации нового клиента?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

Это немного сложно сделать чисто в Magento, но возможно достичь. У меня была та же самая задача некоторое время назад, и я решил ее с помощью наблюдателей

Сначала вам нужно создать наблюдателя, который прослушивает событие controller_action_postdispatch:

<events>
    <controller_action_postdispatch>
        <observers>
            <yourmodule_anything>
                <type>singleton</type>
                <class>yourmodule/observer</class>
                <method>someMethod</method>
            </yourmodule_anything>
        </observers>
    </controller_action_postdispatch>
</events>

Затем в вашем методе наблюдателя вы можете проверить имена действий следующим образом

<?php
$action = $observer->getEvent()->getControllerAction();
if ($action->getFullActionName() == 'customer_account_createpost') {
    if (Mage::getSingleton('customer/session')->isLoggedIn()) { // this check allows to determine if customer session was created which means successfull registration
    }
}

Нечто подобное можно сделать и при оформлении заказа. В целом, наблюдатели - отличный (и правильный) способ расширить функциональность Magento. Подробнее о них здесь

1 голос
/ 19 сентября 2011

Антон S прав - вы должны проверить, запускает ли Magento событие, когда это происходит.Если это так, ваш код должен реагировать на это событие.

Если это не так или вам нужна пользовательская логика для запуска до создания учетной записи, рассмотрите возможность перегрузки / перегрузки контроллера с помощью пользовательского модуля: http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/how_to_overload_a_controller

Сохраняет исходный код ядра без изменений.По сути, он говорит Magento использовать вместо этого ваш собственный контроллер.Если метод, который нужно выполнить, не найден в вашем контроллере, он вместо этого будет использовать код из ядра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...