Переопределение контроллера учетной записи CsMarketplace с настраиваемым контроллером

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

Я установил плагин CsMarketplace на свой веб-сайт для управления поставщиками.

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

Необходимо переопределить: function createPostAction(); в файле mypoject/app/code/local/Ced/CsMarketplace/controllers/AccountController.php

Файл 1: mypoject/app/code/local/Core/Ced/CsMarketplace/controllers/AccountController.php

require_once 'app/code/local/Ced/CsMarketplace/controllers/AccountController.php';

class Core_Ced_CsMarketplace_AccountController extends Ced_CsMarketplace_Controller_AbstractController {

/**
 * Create customer account action
 */
  public function createPostAction() {
    //my custom code
  }
}

Файл 2: mypoject/app/code/local/Core/Ced/CsMarketplace/etc/config.xml

<?xml version="1.0"?>
<config>
<modules>
    <Core_Ced_CsMarketplace>
        <version>1.0</version>
    </Core_Ced_CsMarketplace>
</modules>
<frontend>
    <routers>
        <CsMarketplace>
            <args>
                <modules>
                    <Core_Ced_CsMarketplace before="Ced_CsMarketplace">Core_Ced_CsMarketplace</Core_Ced_CsMarketplace>
                </modules>
            </args>
        </CsMarketplace>
    </routers>
</frontend>
</config>

Файл 3: mypoject/app/etc/modules/Core_All.xml

<?xml version="1.0"?>
<config>
 <modules>
    <Core_Customer>
        <active>true</active>
        <codePool>local</codePool>
    </Core_Customer>
    <Core_Ced_CsMarketplace>
        <active>true</active>
        <codePool>local</codePool>
    </Core_Ced_CsMarketplace>
</modules>
</config>

1 ответ

Ваш контроллер неправильно размещен в файловой системе. Magento всегда предполагает, что контроллеры расположены где-то под controllers каталог, который находится точно в папке Namespace + Modulename, например

app/code/[codepool]/[Namespace]/[Modulename]/controllers/ # I previously missed the codepool, because Magento 2 :-)

Вы пытаетесь заставить систему найти контроллеры в месте, где она не может их найти.

(редактировать на основе комментария ОП)

Контроллерам нужны два уровня глубины (пространство имен + имя модуля). Следующее не будет работать:

app/code/local/Namespace/controllers
app/code/local/Namespace/Modulename/SomeOtherFolder/controllers

В вашем случае вы можете выбрать CustomCed как ваше пространство имен, давая:

app/code/local/CustomCsd/CsMarketplace/controllers/AccountController.php

Там вы переопределите createPostAction(),

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

Другие вопросы по тегам