Контроллер загрузки Magento Custom Router, но не более того - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь настроить пользовательскую маршрутизацию в Magento, используя следующий код (который я немного изменил здесь https://stackoverflow.com/a/4158571/1069232):

class Company_Modulename_Controller_Router extends Mage_Core_Controller_Varien_Router_Standard {

public function match(Zend_Controller_Request_Http $request){
    $path = explode('/', trim($request->getPathInfo(), '/'));
    // If path doesn't match your module requirements
    if ($path[1] == 'home.html' || (count($path) > 2 && $path[0] != 'portfolios')) {
        return false;
    }
    // Define initial values for controller initialization
    $module = $path[0];
    $realModule = 'Company_Modulename';
    $controller = 'index';
    $action = 'index';
    $controllerClassName = $this->_validateControllerClassName(
        $realModule, 
        $controller
    );
    // If controller was not found
    if (!$controllerClassName) {
        return false; 
    }            
    // Instantiate controller class
    $controllerInstance = Mage::getControllerInstance(
        $controllerClassName, 
        $request, 
        $this->getFront()->getResponse()
    );

    // If action is not found
    if (!$controllerInstance->hasAction($action)) { 
        return false;
    }
    // Set request data
    $request->setModuleName($module);
    $request->setControllerName($controller);
    $request->setActionName($action);
    $request->setControllerModule($realModule);
    // Set your custom request parameter
    $request->setParam('url_path', $path[1]);
    // dispatch action
    $request->setDispatched(true);
    $controllerInstance->dispatch($action);
    // Indicate that our route was dispatched
    return true;
}

}

Результатом является страница, на которой шаблон загружен, но без содержимого. Если я закомментирую $ this-> loadLayout () / $ this-> renderLayout () в моем контроллере, я могу вывести на экран. Но когда я пытаюсь загрузитьШаблон и / или блок он где-то ломается.

home.html также нормально загружается (так как метод возвращает false, если путь home.html).

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 07 марта 2012

Я реализовывал нечто похожее на это и столкнулся с той же проблемой (это имеет смысл, потому что я скопировал ваш код)

до $request->setDispatched(true); Я добавил $request->setRouteName('brands'); (бренды - это имя моего модуля). И это сработало. Не знаю, сработает ли это для вас, но определенно чего-то не хватало, чтобы magento не знал, какой макет применить, потому что я мог сказать, что достигается контроллер.

...