我无法覆盖Magento的核心控制器之一,愿望清单索引控制器。当我在愿望清单中添加产品时,我需要Magento重定向回产品页面,而不是愿望清单。以下是我到目前为止所做的
1.在app/code/local中创建了一个名为MyCompany的文件夹,其中包含一个名为Coreextensions的子文件夹。
1.在Coreextensions文件夹中,我创建了etc/text.xml,包含以下内容:
否,此示例旨在用于生产环境之外或RDS免费使用层下
<?xml version="1.0"?>
<config>
<modules>
<MyCompany_Coreextensions>
<version>0.1.0</version>
</MyCompany_Coreextensions>
</modules>
<frontend>
<routers>
<wishlist>
<args>
<modules>
<MyCompany_Coreextensions before="Mage_Wishlist">
MyCompany_Coreextensions_Wishlist
</MyCompany_Coreextensions>
</modules>
</args>
</wishlist>
</routers>
</frontend>
</config>
字符串
1.在Coreextensions文件夹中,我创建了一个文件夹/Wishlist/IndexController. php,如下所示:
<?php
/* Stay on product page after adding to wishlist */
require_once(Mage::getModuleDir('controllers','Mage_Wishlist').DS.'IndexController.php');
class MyCompany_Coreextensions_Wishlist_IndexController extends Mage_Wishlist_IndexController
{
/**
* Add the item to wish list
*
* @return Mage_Core_Controller_Varien_Action|void
*/
protected function _addItemToWishList()
{
$wishlist = $this->_getWishlist();
if (!$wishlist) {
return $this->norouteAction();
}
$session = Mage::getSingleton('customer/session');
$productId = (int)$this->getRequest()->getParam('product');
if (!$productId) {
$this->_redirect('*/');
return;
}
$product = Mage::getModel('catalog/product')->load($productId);
if (!$product->getId() || !$product->isVisibleInCatalog()) {
$session->addError($this->__('Cannot specify product.'));
$this->_redirect('*/');
return;
}
try {
$requestParams = $this->getRequest()->getParams();
if ($session->getBeforeWishlistRequest()) {
$requestParams = $session->getBeforeWishlistRequest();
$session->unsBeforeWishlistRequest();
}
$buyRequest = new Varien_Object($requestParams);
$result = $wishlist->addNewItem($product, $buyRequest);
if (is_string($result)) {
Mage::throwException($result);
}
$wishlist->save();
Mage::dispatchEvent(
'wishlist_add_product',
array(
'wishlist' => $wishlist,
'product' => $product,
'item' => $result
)
);
$referer = $session->getBeforeWishlistUrl();
if ($referer) {
$session->setBeforeWishlistUrl(null);
} else {
$referer = $this->_getRefererUrl();
}
/**
* Set referer to avoid referring to the compare popup window
*/
$session->setAddActionReferer($referer);
Mage::helper('wishlist')->calculate();
$message = $this->__('%1$s has been added to your wishlist. Click <a href="%2$s">here</a> to continue shopping.',
$product->getName(), Mage::helper('core')->escapeUrl($referer));
$session->addSuccess($message);
} catch (Mage_Core_Exception $e) {
$session->addError($this->__('An error occurred while adding item to wishlist: %s', $e->getMessage()));
}
catch (Exception $e) {
$session->addError($this->__('An error occurred while adding item to wishlist.'));
}
//$this->_redirect('*', array('wishlist_id' => $wishlist->getId()));
$this->_redirectReferer();
}
}
型
1.在app/etc/modules中,我创建了MyCompany_Coreextensions.xml,如下所示:
<?xml version="1.0"?>
<!--we need to enable this module as any other if-->
<!--you wish to do it as standalone module extension-->
<config>
<modules>
<MyCompany_Coreextensions>
<active>true</active>
<codepool>local</codepool>
</MyCompany_Coreextensions>
</modules>
</config>
型
当然,这不起作用,这让我抓狂。如果我在Core文件中进行更改,它会按照我想要的方式工作,但我不想更改Core文件.让我说,是的,我确实清除该高速缓存!
4条答案
按热度按时间zpjtge221#
如果你使用Magento EE,你应该替换:
字符串
使用:
型
70gysomp2#
你的步骤是正确的,但只有两件事:
1.你必须在Controller类声明的第一行添加
require_once Mage::getModuleDir('controllers', 'Mage_Wishlist') . DS . 'IndexController.php';
;1.控制器类的名称必须不带'_Wishlist',因此
MyCompany_Coreextensions_IndexController
而不是MyCompany_Coreextensions_Wishlist_IndexController
(您必须将其更改为<MyCompany_Coreextensions before="Mage_Wishlist">MyCompany_Coreextensions</MyCompany_Coreextensions>
而不是<MyCompany_Coreextensions before="Mage_Wishlist">MyCompany_Coreextensions_Wishlist</MyCompany_Coreextensions>
)68de4m5k3#
另外,你还没有“包含”或“需要”wishlist的原始(核心)IndexController,你必须在你的模块的索引控制器文件中这样做:
字符串
上述代码应放在模块的IndexController.php文件中的任何类声明之前。
你也有“<”和标签名称之间的空格,所以请删除它们或XML结构将打破,在Magento显示致命的错误。
一旦你这样做,刷新magento缓存,然后尝试添加产品到愿望清单,你将被重定向到以前的网址。
kuhbmx9i4#
字符串
如果你还不明白,你必须把
codepool
改为codePool