1ページのチェックアウトにログインするためのブロックの追加


9

チェックアウトプロセス中に追加のログインオプションを追加しようとしました。現時点では、ユーザー名/パスワードの方法があります。OAuthプロセス(私の場合はGithub)を介してログインするボタン画像を追加したいと思います。

私は方法を見つけましたが、それは最善の方法ではありません。checkout / onepage / login.phtmlテンプレートファイルには、という名前のブロックの子を取得するための呼び出しがありますform.additional.info

この方法で自分のブロックを挿入しようとしましたが、機能しませんでした。

<checkout_onepage_index>
        <reference name="form.additional.info">
            <block type="core/template" name="login_github_button" as="login.github.button">
                <action method="setTemplate" ifconfig="github/config/enabled">
                    <template>github/customer/login.phtml</template>
                </action>
            </block>
        </reference>
</checkout_onepage_index>

captchaモジュールによって行われるような別の方法を見つけました:

<checkout_onepage_index>
    <reference name="checkout.onepage.login">
        <block type="core/text_list" name="form.additional.info">
            <block type="core/template" name="login_github_button" as="login.github.button">
                <action method="setTemplate" ifconfig="github/config/enabled">
                    <template>github/customer/login.phtml</template>
                </action>
            </block>
        </block>
    </reference>
</checkout_onepage_index>

この場合は機能しますが、キャプチャは表示されません。複数のブロックをform.additional.infoブロックに挿入するにはどうすればよいですか?

ご協力いただきありがとうございます

編集

参照form.additional.infoメソッドを使用すると、ログインフィールドの下にボタンが表示されない理由がいくつか見つかりました。代わりに、チェックアウト請求ビューに表示されます。

  1. ブロックform.additional.infoは、ブロックのcaptchaモジュールによって作成され、checkout.onepage.login次にブロックに対しても作成されますcheckout.onepage.billing
  2. Mage_Core_Model_Layout :: _ generateBlock()でブロックを生成している間、ブロックの親ブロックオブジェクトを検索しますlogin_github_button。の1つを見つける代わりに、checkout.onepage.login作成された最新の1つを見つけますcheckout.onepage.billing。ログは1つではなく、この最後のブロックに添付されます。次に、ログインビューではなく、請求先アドレスビューにログインボタンを見つけます!!!
  3. レイアウトcaptcha.xmlファイルにコメントするとcheckout.onepage.billing、最初のソリューションに関する部分が 機能します。

それはまだ大丈夫ではありませんが、理由を見つけ始めます。

回答:


3

まあ、私が見ている唯一の解決策は、レイアウトモジュールにブロックを作成し、キャプチャのコードを追加し、カスタマイズしたコードを参照として追加することです。この場合、それは受け入れられます。

残念ながら、ブロックをブロックに挿入することは依然として困難form.additional.infoです。

これが私が実装したソリューションです:

<checkout_onepage_index>
    <reference name="checkout.onepage.login">
        <block type="core/text_list" name="form.additional.info">
            <block type="captcha/captcha" name="captcha">
                <reference name="head">
                    <action method="addJs"><file>mage/captcha.js</file></action>
                </reference>
                <action method="setFormId"><formId>user_login</formId></action>
                <action method="setImgWidth"><width>230</width></action>
                <action method="setImgHeight"><width>50</width></action>
            </block>
        </block>

        <reference name="form.additional.info">
            <block type="core/template" name="login_github_button" as="login.github.button">
                <action method="setTemplate" ifconfig="github/config/enabled">
                    <template>github/customer/login.phtml</template>
                </action>
            </block>
        </reference>
    </reference>
</checkout_onepage_index> 

述べたように、これにより他のモジュールもこのブロックを使用できなくなり、アップグレードで問題が発生します。上記の<reference name="form.additional.info">および<depends>ソリューションは、はるかにクリーンでメンテナンスが容易です。
mybluevan 2013年

@mybluevan私は反対票を理解していません(もしそうなら)。これらの例は、のために値するされてdownvote stackoverflow.com/privileges/vote-down私の答えは、別の解決策を示すために、ここに置かれています。それは私が知っている最高のものではありませんが、キャプチャとカスタマイズされたモジュールレイアウトを持つことができます。他のモジュールでの使用が妨げられるとは言い切れませんでした。このブロックに子を追加したい場合でも、引き続き問題が発生することを意味します。私はまだよりクリーンな方法を調査しています。ファビアンのものはまったく機能しません。同じ条件で自分でテストすることをお勧めします
シルヴァンレイエ2013年

1

captcha.xmlはブロックを生成するので、使用可能にする必要があります。追加しましたか

<depends>
    <Mage_Captcha />
</depends>

子を追加しようとしたときに、ブロックが既に存在していることを確認するには?


動作しない。私のモジュールは、Captchaモジュールを上書きまたは優先しているようです。Twitterで言及したように、「form.additional.info」ブロックはまだ存在しません。したがって、モジュールレイアウトはそれを作成し、他のものを追加することを許可しません。2番目のレイアウトモジュールは「form.additional.info」を参照していませんが、作成しようとしています。それが機能しない理由です。私は両方を許可するクリーンな方法を見つけようとします。解決策は、1ページテンプレートのlogin.phtmlを上書きすることですが、カスタムテーマの場合、他の開発者に追加の作業を提供します
SylvainRayé2013年

Fabianがアドバイスしようとしているのは、を使用する最初のブロックを使用して<reference name="form.additional.info">から、を追加すること<depends>です。その2番目のブロックをで使用する<reference name="checkout.onepage.login">と、<depends>前述のようにキャプチャブロックが上書きされます。
mybluevan 2013年

@mybluevanありがとうございます私は初心者ではありません 私が書いた場合、それは機能しません、それは私がファビアンが提案したようにテストしたことを意味します。最初にMagentoコアモジュールが読み込まれ、次にコミュニティが読み込まれます。デフォルトのレイアウトxmlファイルと同じ順序。私のモジュールはコミュニティにあり、ついにロードされました。dependsこの場合、タグは必要ありません。そして、私たちは2番目のブロックの上書きされた方法に同意します。それが機能しない理由を見つけましたが、それでもまだクリーンな解決策が見つかりません。質問の編集内容をご覧ください。
SylvainRayé2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.