0

Magento 购物车是基于 PHP 的 Zend 框架构建的。这是我第一次处理 Zend 框架,我遇到了以下困难......

我正在创建一个自定义模块,允许用户在购买产品时上传图片。

每当用户尝试将产品添加到购物车时,我都可以重载 addAction() 方法。我还可以创建一个自定义模块,将表单呈现给用户并接受文件。但是我不确定如何将代码插入到我的重载方法中运行我的模块:

<?php
require_once 'Mage/Checkout/controllers/CartController.php';
class Company_SpecialCheckout_Checkout_CartController extends Mage_Checkout_CartController
{
    # Overloaded addAction
    public function addAction()
    {
        # when user tries to add to cart, request images from them
        # *********
        # *** what do i do in here to display a custom block ???? ###
        # *** and allow addAction to continue only if successfully validated form input ###
        # *********

        parent::addAction();
    }
} 

我怀疑我的困难来自于我对 Zend MVC 做事方式缺乏了解。我从上到下研究了所有 Magento 文档/wikis/论坛主题。

4

5 回答 5

2

我想我会转向一个新的答案,因为我认为我已经设法让它工作了。

这就是我所做的

创建了以下文件;

应用程序/代码/本地/公司/SpecialCheckout/controllers/Checkout/CartController.php

应用程序/代码/本地/公司/SpecialCheckout/etc/config.xml

应用程序/etc/modules/Company_SpecialCheckout.xml

首先是控制器,与您的完全一样;

    <?PHP
require_once 'Mage/Checkout/controllers/CartController.php';
class Company_SpecialCheckout_Checkout_CartController extends Mage_Checkout_CartController {

    public function indexAction()
    {
        die('test');
    }
}

然后是模块配置

<?xml version="1.0"?>
<config>
    <modules>
        <Company_SpecialCheckout>
            <version>0.1.0</version>
        </Company_SpecialCheckout>
    </modules>
    <global>
        <rewrite>
            <Company_SpecialCheckout_Checkout_Cart>
                <from><![CDATA[#^/checkout/cart#]]></from>
                <to>/SpecialCheckout/checkout_cart</to>
            </Company_SpecialCheckout_Checkout_Cart>
        </rewrite>
    </global>
    <frontend>
        <routers>
            <Company_SpecialCheckout>
                <use>standard</use>
                <args>
                    <module>Company_SpecialCheckout</module>
                    <frontName>SpecialCheckout</frontName>
                </args>
            </Company_SpecialCheckout>
        </routers>
    </frontend>
</config>

最后是 app/etc/modules 中的配置文件,以确保模块被拾取。

<?xml version="1.0"?>
<config>
     <modules>
        <Company_SpecialCheckout>
            <active>true</active>
            <codePool>local</codePool>
        </Company_SpecialCheckout>
     </modules>
</config>

那么当你去 /checkout/cart 时,你应该会看到“测试”。这是基于我在这里找到的细节。

确保您在 Magento 管理员中禁用了配置文件的缓存。

于 2008-11-03T13:06:09.870 回答
1

嘿,此选项在新版本的 magento 1.3.1 中提供,用于从前端享受上传文件

于 2009-05-19T06:08:31.097 回答
0

我必须事先承认我没有 Magento 的生产经验,但我花了一些时间研究他们的代码。

块结构是在 XML 中定义的,因此您可能不需要实际扩展 Cart Controller。

布局 XML 文件可以在 app/design/frontend/default/default/layout 中找到(默认安装)。在这里,您将找到 checkout.xml,它设置了结帐页面的块结构。

于 2008-10-31T10:05:37.447 回答
0

对于那些坚持这一点的人,我写了最简单的方法来解决这个问题,而不会使控制器过载。我基于 onepage checkout的变体查看 magento wiki

于 2010-10-27T11:32:00.670 回答
-3

这对我来说简直是一场噩梦,我在博客中创建了一个教程:

控制器 / 覆盖 / 前端 [...] #^/customer/account/# /mycustomer/account/ [...]

看一下这个!如何 magento 声明和覆盖控制器

于 2010-06-23T16:21:52.640 回答