Magentoカスタムモジュール。別のモジュールにリダイレクトしてチェックアウトに戻る
-
05-07-2019 - |
質問
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 /フォーラムスレッドを上から下まで学習しました。
解決
ちょっとこのオプションは、フロントエンドからファイルをアップロードするためにmagento 1.3.1の新しいバージョンで提供されます 楽しむ
他のヒント
なんとか動作するようになったと思うので、新しい答えに移ろうと思った。
これが私がしたことです
次のファイルを作成しました;
app / code / local / Company / SpecialCheckout / controllers / Checkout / CartController.php
app / code / local / Company / 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に移動すると、「テスト」が表示されます。これは、ここで見つけた詳細に基づいています。
Magento管理者で設定ファイルのキャッシュが無効になっていることを確認してください。
Magentoのプロダクションの経験がないことを前もって認めなければなりませんが、彼らのコードをいじくり回しました。
ブロック構造はXMLで定義されているため、実際にCart Controllerを拡張する必要はありません。
レイアウトXMLファイルは(デフォルトのインストールで)app / design / frontend / default / default / layoutにあります。ここには、チェックアウトページのブロック構造を設定するcheckout.xmlがあります。
これにこだわる人のために、コントローラーをオーバーロードせずにこの問題を解決する最も簡単な方法を書きました。ワンページチェックアウトに基づく私の亜種 magento wiki
それは私にとって悪夢でした。ブログでチュートリアルを作成しました:
コントローラー/オーバーライド/フロントエンド [...] #^ / customer / account /# / mycustomer / account / [...]
これをチェックしてください! コントローラーを宣言およびオーバーライドする方法