Intereting Posts
Отправка почты, с отправителем электронной почты в качестве отправителя Как исправить память, израсходованную с помощью PHPExcel? MySQLi DATE_FORMAT не работает вообще Атрибут CF-Hash и сценарий таинственно добавлены к ссылкам mailto Отправка объекта FormData на сервер с помощью Ajax (содержит файлы) Как сделать MD5 более безопасным? Или это действительно необходимо? Как перенаправить после загрузки в Laravel? Удалите поле проверки, если товары корзины относятся к определенным категориям товаров Каким будет лучший способ отправить NSData через PHP в MySQL? Загрузка изображения с URL-адресом в Codeigniter Как запустить скрипт perl с несколькими аргументами из php jqGrid не может встроить редактирование Проверка / уведомление PHP-скрипта Неустранимая ошибка: нехватка памяти, но у меня много памяти (PHP) Показывать статус входа для подключения пользователя с помощью Websocket и Pusher

Контроллер копирования Magento на локальный

Когда я core/Mage/Adminhtml/Block/ некоторые файлы core/Mage/Adminhtml/Block/ files в local/Mage/Adminhtml/Block/ все работает нормально, но если я local/Mage/Adminhtml/controllers контроллер в local/Mage/Adminhtml/controllers – основной контроллер все еще работает, а система не видит мой локальный / … контроллер.

Solutions Collecting From Web of "Контроллер копирования Magento на локальный"

Это потому, что контроллеры загружаются по-другому, чем другие классы классов. Вы не делаете этого, ссылаясь на класс Mage . Чтобы узнать, как они загружаются, можно посмотреть стандартный маршрутизатор Magento и его метод getControllerFileName() :

 // Mage_Core_Controller_Varien_Router_Standard public function getControllerFileName($realModule, $controller) { $parts = explode('_', $realModule); $realModule = implode('_', array_splice($parts, 0, 2)); $file = Mage::getModuleDir('controllers', $realModule); if (count($parts)) { $file .= DS . implode(DS, $parts); } $file .= DS.uc_words($controller, DS).'Controller.php'; return $file; } 

Затем давайте посмотрим на Mage_Core_Model_Config::getModuleDir() (в классе конфигурации указывается внутри Mage::getModuleDir() ):

 public function getModuleDir($type, $moduleName) { $codePool = (string)$this->getModuleConfig($moduleName)->codePool; $dir = $this->getOptions()->getCodeDir().DS.$codePool.DS.uc_words($moduleName, DS); (...) } 

Как вы можете видеть, Magento получает настоящий пул модулей модуля в этом случае. Вот почему простая копия не будет работать. Вы должны переписать контроллеры.

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

РЕДАКТИРОВАТЬ

Чтобы переписать контроллер, вам нужно создать новый модуль в локальном пуле кодов (или использовать существующий). Если вы не знаете, как создать модуль, проверьте эту тему. Предположим, что вы хотите переписать контрольный контролер Magento Onepage.

В config.xml модуля добавьте следующее:

 <frontend> <routers> <checkout> <args> <modules> <mynamespace_mymodule before="Mage_Checkout">MyNamespace_MyModule</mynamespace_mymodule> </modules> </args> </checkout> </routers> </frontend> <!-- rewrite of admin controllers are the same. instead of <frontend> use <admin> --> 

Затем создайте контроллер в своем модуле в app / code / local / MyNamespace / MyModule / controller. Назовите его так же, как и контроллер, который переписывается. Вы должны использовать ту же структуру папок, что и Magento. В нашем случае мы создаем папку OnepageController.php в контроллерах.

 //you have to manually include the controller being rewritten, because Magento autoloader cannot automatically resolve it. require_once Mage::getModuleDir('controllers', 'Mage_Checkout') . DS . 'OnepageController.php'; class MyNamespace_MyModule_OnepageController extends Mage_Checkout_OnepageController { //copy a method you want to rewrite, eg public function saveOrderAction() { //Method body } } 

Вот и все! Обратите внимание, что после этого вам нужно очистить кеш Magento. Контроллеры администратора очень похожи на переписывание. Просто измените <frontend> на <admin> и вам хорошо идти. Обычно рекомендуется размещать админ-контроллеры в Adminhtml в папке controllers . Итак, пример config.xml будет выглядеть так:

 <admin> <routers> <adminhtml> <args> <modules> <mynamespace_mymodule before="Mage_Checkout">MyNamespace_MyModule_Adminhtml</mynamespace_mymodule> </modules> </args> </adminhtml> </routers> </admin> 

Обратите внимание, что путь контроллера изменен на MyNamespace_MyModule_Adminhtml но он не содержит controllers .

Magento автоматически посмотрит на контроллеры с одинаковым относительным путем и именем контроллера.