0

Magento ショッピング カートは、PHP の Zend Framework 上に構築されています。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 のすべてのドキュメント/wiki/フォーラム スレッドを上から下まで調べました。

4

5 に答える 5

2

なんとかうまくいったと思うので、新しい答えに移ろうと思いました。

これが私がしたことです

次のファイルを作成しました。

アプリ/コード/ローカル/会社/SpecialCheckout/コントローラー/チェックアウト/CartController.php

アプリ/コード/ローカル/会社/SpecialCheckout/etc/config.xml

app/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 に移動すると、「test」が表示されます。これは、ここで見つけた詳細に基づいています。

Magento 管理画面で設定ファイルのキャッシュが無効になっていることを確認してください。

于 2008-11-03T13:06:09.870 に答える
1

このオプションは、フロントエンドからファイルをアップロードするために、magento 1.3.1 の新しいバージョンで提供されています。

于 2009-05-19T06:08:31.097 に答える
0

私は Magento の運用経験がないことを前もって認めなければなりませんが、Magento のコードを調べるのに時間を費やしました。

ブロック構造は XML で定義されているため、カート コントローラーを実際に拡張する必要はありません。

レイアウト XML ファイルは、(デフォルトのインストールで) app/design/frontend/default/default/layout にあります。ここには、チェックアウト ページのブロック構造を設定する checkout.xml があります。

于 2008-10-31T10:05:37.447 に答える
0

これに固執した人のために、コントローラーを過負荷にせずにこの問題を解決する最も簡単な方法を書きました。onepage チェックアウトに基づく私のバリアントは、magento wiki を参照してください

于 2010-10-27T11:32:00.670 に答える
-3

それは私にとって悪夢だったので、ブログにチュートリアルを作成しました。

コントローラー / オーバーライド / フロントエンド [...] #^/customer/account/# /mycustomer/account/ [...]

これをチェックしてください!Magento でコントローラーを宣言およびオーバーライドする方法

于 2010-06-23T16:21:52.640 に答える