在Magento中覆盖 Mage _愿望清单_索引控制器::addAction()

jslywgbw  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(154)

我无法覆盖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文件.让我说,是的,我确实清除该高速缓存!

zpjtge22

zpjtge221#

如果你使用Magento EE,你应该替换:

<MyCompany_Coreextensions before="Mage_Wishlist">

字符串
使用:

<MyCompany_Coreextensions before="Enterprise_Wishlist">

70gysomp

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>

68de4m5k

68de4m5k3#

另外,你还没有“包含”或“需要”wishlist的原始(核心)IndexController,你必须在你的模块的索引控制器文件中这样做:

require_once Mage::getModuleDir('controllers', 'Mage_Wishlist') . DS . 'IndexController.php';

字符串
上述代码应放在模块的IndexController.php文件中的任何类声明之前。
你也有“<”和标签名称之间的空格,所以请删除它们或XML结构将打破,在Magento显示致命的错误。
一旦你这样做,刷新magento缓存,然后尝试添加产品到愿望清单,你将被重定向到以前的网址。

kuhbmx9i

kuhbmx9i4#

< codepool >local< /codepool >

字符串
如果你还不明白,你必须把codepool改为codePool

相关问题