Magento 1.5.1:新的客户仪表板块

Posted

技术标签:

【中文标题】Magento 1.5.1:新的客户仪表板块【英文标题】:Magento 1.5.1: new customer dashboard block 【发布时间】:2011-09-09 08:07:31 【问题描述】:

我正在努力在我的客户仪表板上创建一个新的非常简单的部分。像 www.mymagentosite.com/customer/rid 之类的东西(rid 只包括静态链接)。但是,当我尝试访问 www.mymagentosite.com/customer/rid 时,我总是得到一个 404 Magento 页面(日志文件中没有异常或系统消息)

我错过了什么?

谢谢

到目前为止我所做的是:

-在/app/code/local/Mage/Customer/Block/Account/Dashboard/Rid.php下新建一个Block

class Mage_Customer_Block_Account_Dashboard_Rid extends Mage_Core_Block_Template
 
  public function getCustomer()
  
      return Mage::getSingleton('customer/session')->getCustomer();
   


-在/app/code/local/Mage/Customer/controllers/RidController.php下新建一个控制器

class Mage_Customer_RidController extends Mage_Core_Controller_Front_Action

  protected function _getSession()
  
    return Mage::getSingleton('customer/session');
  

  public function preDispatch()
  
    parent::preDispatch();

    if (!Mage::getSingleton('customer/session')->authenticate($this)) 
        $this->setFlag('', 'no-dispatch', true);
    
  

  public function indexAction()
  
    if (count($this->_getSession()->getCustomer()->getAddresses())) 
        $this->loadLayout();
        $this->_initLayoutMessages('customer/session');
        $this->_initLayoutMessages('catalog/session');

        $block = $this->getLayout()->getBlock('rid');
        if ($block) 
            $block->setRefererUrl($this->_getRefererUrl());
        
        $this->renderLayout();
     else 
        $this->getResponse()->setRedirect(Mage::getUrl('*/*/new'));
    
  

-在/app/code/local/Mage/Customer/Helper/Rid.php下新建一个helper

class Mage_Customer_Helper_Rid extends Mage_Core_Helper_Abstract


  public function getRenderer($renderer)
  
    if(is_string($renderer) && $className = Mage::getConfig()->getBlockClassName($renderer)) 
        return new $className();
     else 
        return $renderer;
    
  


-编辑文件/app/design/frontend/default/MYTHEME/layout/customer.xml

<customer_account_index translate="label">
    <label>Customer My Account Dashboard</label>
    <update handle="customer_account"/>
    <!-- EXISTING CODE -->
    <reference name="my.account.wrapper">
    <!-- EXISTING CODE -->
   <block type="customer/account_dashboard_rid" name="rid" as="rid" 
              template="customer/account/dashboard/rid.phtml"></block>
        </block>
    </reference>
</customer_account_index>

<customer_rid_index translate="label">
    <label>RID</label>
    <!-- Mage_Customer -->
    <update handle="customer_account"/>
    <reference name="my.account.wrapper">
        <block type="customer/rid" name="address_book" 
               template="customer/account/dashboard/rid.phtml"/>
    </reference>
</customer_rid_index>

-创建/app/design/frontend/default/MYTHEME/template/customer/account/dashboard/rid.phtml

【问题讨论】:

请粘贴您的 config.xml,这是解决您问题的真正有趣的文件 嗨@osdave,我没有接触config.xml。这是您可以在基本安装中找到的标准 config.xml。我应该改变哪一部分?感谢您的帮助! 哎呀,抱歉,没有看到您没有创建模块,而是破解了核心(您真的不应该这样做)。我已经复制了你的代码,它在这里工作正常。缓存可能吗? @OSdave,我在“本地”中创建了所有新代码,所以我并没有真正破解核心。只是走捷径(或者我就是这样)。那么,您是说您只编辑/创建了我列出的文件,如果您键入 /customer/rid,它会显示实际页面?你接触过其他 XML 吗?缓存(不幸的是)似乎不是我这边的问题/解决方案的一部分。还有其他想法吗? 【参考方案1】:

你需要告诉 Magento 使用你的控制器而不是核心:

“这里要注意的一个重要关键是,对于控制器,Magento 不会像处理块和模型那样自动加载它们。”

http://prattski.com/2010/06/24/magento-overriding-core-files-blocks-models-resources-controllers/

etc/config.xml

<config>
    <frontend>
        <routers>
            <checkout>
                <args>
                    <modules>
                         <My_Module before="Mage_Checkout">My_Module_Checkout</My_Module>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>
</config>

【讨论】:

以上是关于Magento 1.5.1:新的客户仪表板块的主要内容,如果未能解决你的问题,请参考以下文章

Magento 2.3.3 仪表板不断加载

无法使用 Magento 2 访问管理仪表板

为啥 Magento 管理操作重定向到管理仪表板?

在 Magento 后端添加自定义仪表板“框”而不编辑默认模板的正确方法是啥?

28.Odoo产品分析 – 工具板块 – 项目

Magento 与 Mailchimp -----以编程方式添加复选框