2

Ivan Chepurnyiからのこのツイートを読んで、クライアントのサイトの OnePage チェックアウト (別名 OPC) にステップを追加する必要が生じた後、新しいことを学ぶ絶好の機会だと思いました. 私はイベント/オブザーバーの大ファンであり、それらを可能な限り使用しようとしていますが、これまで正確に OPC については、それらを使用するのはあまりエレガントではないことがわかりました。つまり、使用できる有用なイベントは (私が知る限り) ありません。

たとえば、頭のてっぺんから、変更する必要がある2つのことを考えています。イベント/オブザーバーでは複雑になりすぎますが、書き直すと非常に簡単です。

  1. steps : Mage_Checkout_Block_Onepage::getSteps()OPC を構成するさまざまなステップを定義します。どのイベントでそれを変更できるのか本当にわかりません
  2. goto : 1 つのステップが完了すると、Mage_Checkout_OnepageControllerの対応するアクションが次のステップの htmlgoto_sectionupdate_sectionデータを返します。繰り返しますが、興味深いイベントは見当たりません

これは、実装する必要があるすべての詳細を実際に調べていないだけです。もっと多くの落とし穴があると思います。
javascript 部分についても同じです。チェックアウト js クラスを拡張するために使用されます。

var MyModule = Class.create(Checkout, {
    //write some code here
});

しかし、もっと良い方法があるのだろうか。

Ivan のつぶやきは PSP 開発者向けであり、私は最終クライアントのために働いていることを認識していますが、何か新しいことを学びたいと思っています。

4

1 に答える 1

2

ツイートの主なアイデアは、カスタム支払い方法を開発するほとんどの開発者が、Web サイトにある他のモジュールやカスタマイズとの競合を気にしないというものでした。

Onepage チェックアウト手順

最初のステップに関しては、Magento コアの問題です。_getSteps()メソッドのすべてのチェックアウト ステップがハードコードされており、オーバーライドせずに変更することはできません。

コントローラーのオーバーライド

controller_action_predispatch2 つ目は、 ofとcontroller_action_postdispatchアクションを使用するだけでも非常に簡単に実装できます。

Magentoでは、 、 、 などのコントローラーpreDispatchフラグを使用して、コントローラー アクションのフローを自由に制御できます。FLAG_NO_DISPATCHFLAG_NO_PRE_DISPATCHFLAG_NO_POST_DISPATCH

応答postDispatchオブジェクトの本体を変更することで、既存の結果を変更できます。返された JSON の場合、このデータを簡単に変換して配列に戻し、変更して JSON として戻すことができます。

はい、このソリューションの実装はより複雑になる可能性がありますが、他のモジュールによる同じコントローラーのオーバーライドの可能性が安全であるため、モジュールの互換性が他のモジュールと大幅に向上します。

JavaScript のカスタマイズ

JavaScript に関しては、動的言語であり、言語レベルにクラス自体は存在しないことを常に考慮する必要があります。すべてがオブジェクトであり、変数の割り当てを使用して既存のオブジェクト プロトタイプを独自の実装に置き換えることで、常に既存の機能を拡張できます。

window.Checkout = Class.create(Checkout, {
      someMethod: ($super, param1, param2) {
          // Do you custom staff before
          $super(param1, param2);
          // Do you custom staff after
      }
});

次の Checkout のプロトタイプ「クラス」の例では、そのsomeMethod機能をカスタマイズするインスタンスに置き換えられます。$super変数にはFunction、上書きされる親「メソッド」のオブジェクトが含まれており、そのメソッド定義を含むプロパティのみを変更するだけなので、別のメソッド (または同じもの) の同じクラスに対する同じ種類のカスタマイズで機能します。

この JS 言語関数について詳しく知りたい場合は、次の Web サイトを参照してください: http://www.crockford.com/javascript/javascript.html

于 2013-01-30T21:01:32.833 に答える