Переадресация на страницу просмотра товара со страницы категории не работает

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

Сценарий: я сейчас играюсь с роутером Magento. В рамках этого я пытаюсь перенаправить каждую страницу категории в моем экземпляре Magento на страницу продукта. Страница продукта, которая будет загружена для категории, является страницей первого продукта в этой категории.

Что я пробовал : Я наблюдал за событием controller_action_predispatch_catalog_category_view и добавил ниже код для моего метода наблюдателя.

public function forwardSingleProCategory(Varien_Event_Observer $observer)
{
//get event data
$action = $observer->getControllerAction();
$request = $action->getRequest();

//get category id
$categoryId = (int)$request->getParam('id', false);

//grab category collection
$layer = Mage::getModel('catalog/layer')->setCurrentCategory($categoryId);
$collection = $layer->getProductCollection();

//check whether category count is 1. If YES, then do magic
if ($collection->getSize() > 0) {

//prepare parameters that needs for the action `catalog/product/view`
$product = $collection->getFirstItem();
$actionName = 'view';
$controllerName = 'product';
$moduleName = 'catalog';
$params = array(
'category' => $categoryId,
'id'       => $product->getId()
);

//tells no to category page router processing further
$request->setDispatched(false);

//throw exception with a clear message we need a product page.
$e = new Mage_Core_Controller_Varien_Exception();
$e->prepareForward($actionName, $controllerName, $moduleName, $params);
throw $e;

}

return $this;
}

Смотрите комментарии, которые я вставил в код. Если что-то не понятно в моем коде, пожалуйста, дайте мне знать. я могу обьяснить

Но я получаю 404 Page для каждого запроса страницы категории. Упс !!!

Сколько я отлаживаю : Страница 404 запускается с Mage_Catalog_ProductController сам (что означает, что наблюдатель работает нормально). Проблема лежит здесь в этом разделе:

 public function viewAction()
{
// Get initial data from request
$categoryId = (int) $this->getRequest()->getParam('category', false);
$productId  = (int) $this->getRequest()->getParam('id');
$specifyOptions = $this->getRequest()->getParam('options');
...
try {
$viewHelper->prepareAndRender($productId, $this, $params);
} catch (Exception $e) {
if ($e->getCode() == $viewHelper->ERR_NO_PRODUCT_LOADED) {
if (isset($_GET['store'])  && !$this->getResponse()->isRedirect()) {
$this->_redirect('');
} elseif (!$this->getResponse()->isRedirect()) {
$this->_forward('noRoute');
}
} else {
Mage::logException($e);
$this->_forward('noRoute');
}
}

Проблема в $productId а также $categoryId одинаковы (кажется, что оба содержат значение идентификатора категории) и, следовательно, строка $viewHelper->prepareAndRender($productId, $this, $params); терпит неудачу, и, таким образом, я получаю 404 страницы.

Но в моем наблюдателе, вы можете видеть, что я устанавливаю оба category а также id параметры через этот раздел

$e = new Mage_Core_Controller_Varien_Exception();
$e->prepareForward($actionName, $controllerName, $moduleName, $params);

Я дважды проверил и подтвердил, что $params (содержит правильный идентификатор продукта для id и правильный идентификатор категории для category) верны в моем наблюдателе.

Итак, мой вопрос, как это переписать по категории Id в процессе маршрутизатора в этом сценарии?

Как я могу заставить это работать?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]