Когда я копирую core/Mage/Adminhtml/Block/
файлы в local/Mage/Adminhtml/Block/
, все работает нормально, но если я копирую контроллер на local/Mage/Adminhtml/controllers
- основной контроллер все еще работает, а система не видит мой локальный/... контроллер.Контроллер копирования 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 получает настоящий пул модулей модуля. Вот почему простая копия не будет работать. Вы должны переписать контроллеры.
Если вы не знаете, как правильно переписать контроллер, дайте мне знать в комментариях. Я буду соответствующим образом обновлять этот ответ.
EDIT
Переписать контроллер вам необходимо создать новый модуль в локальном пуле коды (или использовать существующий). Если вы не знаете, как создать модуль, проверьте this. Предположим, что вы хотите переписать контрольный контролер 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> -->
Далее создайте контроллер в вашем модуле в приложение/код/местные/MyNamespace/MyModule/контроллеров. Назовите его так же, как и контроллер, который переписывается. Вы должны использовать ту же структуру папок, что и 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, e.g.
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 автоматически рассмотрит контроллеры с одинаковым относительным путем и именем контроллера.
- 1. Magento - локальный контроллер не работает
- 2. Скопируйте сайт Live Magento на локальный сервер для резервного копирования
- 3. Magento, переопределить локальный контроллер с другим локальным контроллером
- 4. Magento папку резервного копирования
- 5. Копирование Установки Magento на другой локальный компьютер
- 6. Перемещение Magento с удаленного на локальный сервер
- 7. Настройка live magento 1.7 на локальный сервер
- 8. Как перенести Magento Установка на локальный
- 9. Установить Magento 1.9 на локальный FAIL
- 10. Magento: создать пользовательский контроллер
- 11. Контроллер не найден - Magento
- 12. Magento: Попытка переопределить контроллер
- 13. Magento, SoapClient и локальный WSDL
- 14. Magento перегружает контроллер
- 15. Преобразование MultipartFile в java.io.File без копирования на локальный компьютер
- 16. Magento - Override контроллер порядка
- 17. Magento переопределяет перегруженный контроллер?
- 18. Magento url переписывает локальный ip
- 19. Magento Добавить сообщение об ошибке на контроллер
- 20. Magento автоматически перенаправлять на локальный на реальном сервере
- 21. Как написать cron для копирования и файла на локальный сервер?
- 22. оконный пакетный файл для копирования файла с сервера на локальный
- 23. Невозможно создать контроллер в Magento
- 24. Контроллер расширения Magento для перезаписи
- 25. Невозможно вызвать контроллер Magento админ
- 26. Контроллер ядра Magento расширяет запрос
- 27. Контроллер модели Magento не выполняет
- 28. Override контроллер Функция Magento 2
- 29. Контроллер переопределения заказов в magento
- 30. 301 Перенаправления после копирования установки Magento
Так как я могу переписать контроллер? –
Мне нужно добавить некоторые функции в 'Mage_Adminhtml_Promo_CatalogController' ->' saveAction() ' –
Использовать поиск, есть несколько руководств о том, как, например: http://goo.gl/apwb3 – Axel