Hinzufügen eines Blocks zum Anmelden einer Seite beim Auschecken

9

Ich versuche, während des Bestellvorgangs eine zusätzliche Anmeldeoption hinzuzufügen. Im Moment haben Sie den Benutzernamen / Passwort Weg. Ich möchte ein Schaltflächenbild hinzufügen, um mich über einen OAuth-Prozess anzumelden (in meinem Fall Github).

Ich habe einen Weg gefunden, aber es ist nicht der beste Weg. In der Vorlagendatei checkout / onepage / login.phtml befindet sich ein Aufruf, um ein Blockkind mit dem Namen abzurufen form.additional.info.

Ich habe versucht, meinen eigenen Block auf diese Weise einzufügen, aber es hat nicht funktioniert.

<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>

Ich habe einen anderen Weg gefunden, wie es das Captcha-Modul macht:

<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>

In diesem Fall funktioniert es, ABER das Captcha wird nicht angezeigt. Wie kann ich mehrere Blöcke in einen form.additional.infoBlock einfügen ?

Danke für Ihre Hilfe

EDIT :

Ich habe einige Gründe gefunden, warum die Schaltfläche bei Verwendung der Referenzmethode nicht unter den Anmeldefeldern angezeigt form.additional.infowird. Es wird stattdessen in der Abrechnungsansicht der Kasse angezeigt.

  1. Der Block form.additional.infowird vom Captcha-Modul für den Block erstellt, checkout.onepage.logindann wird er auch für den Block erstelltcheckout.onepage.billing
  2. Beim Generieren des Blocks in Mage_Core_Model_Layout :: _ generateBlock () wird das übergeordnete Blockobjekt des Blocks durchsucht login_github_button. Anstatt den einen zu finden checkout.onepage.login, findet er einen der zuletzt erstellten : checkout.onepage.billing. Der Block wird an diesen letzten angehängt, anstatt an den Anmeldeblock. Dann finde ich meine Login-Schaltfläche in der Rechnungsadressenansicht anstelle der Loginansicht !!!
  3. Wenn ich in die Layoutdatei captcha.xml einkommentiere, funktioniert der Teil über checkout.onepage.billingmeine erste Lösung.

Es ist immer noch nicht in Ordnung, aber ich fange an, die Gründe zu finden.

Sylvain Rayé
quelle

Antworten:

3

Nun, die einzige Lösung, die ich sehe, besteht darin, den Block in das Layoutmodul zu erstellen, den Code des Captchas hinzuzufügen und meinen benutzerdefinierten Code als Referenz hinzuzufügen. In diesem Fall wird es akzeptiert.

Leider wird es immer noch schwierig sein, einen Block in den form.additional.infoBlock einzufügen .

Hier ist die Lösung, die ich implementiert habe:

<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> 
Sylvain Rayé
quelle
Wie Sie angeben, verhindert dies, dass andere Module diesen Block ebenfalls verwenden, und verursacht auch Probleme bei Upgrades. Die obige <reference name="form.additional.info">und <depends>Lösung ist viel sauberer und wartbarer.
Mybluevan
@mybluevan Ich verstehe die Ablehnung nicht (wenn du es getan hast). Für diese Fälle ist eine Ablehnung verdient. Stackoverflow.com/privileges/vote-down Meine Antwort wird hier gestellt, um eine alternative Lösung aufzuzeigen . Es ist nicht das Beste, das ich kenne, aber es ermöglicht Captcha und das angepasste Modullayout. Mir war nicht klar, dass dies die Verwendung durch andere Module verhindern wird. Ich wollte damit meinen, dass wenn Sie diesem Block ein Kind hinzufügen möchten, dies weiterhin ein Problem darstellt. Ich untersuche immer noch einen saubereren Weg. Der Fabian funktioniert überhaupt nicht, ich lade Sie ein, ihn selbst unter den gleichen Bedingungen zu testen
Sylvain Rayé
1

Die Datei captcha.xml generiert den Block, daher sollte er verwendbar sein. Hast du a hinzugefügt?

<depends>
    <Mage_Captcha />
</depends>

um sicher zu sein, dass Ihr Block bereits existiert, wenn Sie versuchen, ein Kind hinzuzufügen?

Fabian Blechschmidt
quelle
Arbeite nicht. Mein Modul scheint das Captcha-Modul zu überschreiben oder Vorrang vor ihm zu haben. Wie Sie in Twitter erwähnt haben, existiert der Block 'form.additional.info' noch nicht. Ein Modullayout erstellt es also und erlaubt es nicht, ein anderes hinzuzufügen. Das zweite Layoutmodul bezieht sich nicht auf 'form.additional.info', sondern versucht, eines zu erstellen. Das ist der Grund, warum es nicht funktioniert. Ich versuche einen sauberen Weg zu finden, um beides zuzulassen. Eine Lösung könnte darin bestehen, login.phtml der Onepage-Vorlage zu überschreiben, aber es wird anderen Entwicklern zusätzliche Arbeit im Falle eines benutzerdefinierten Themas bieten
Sylvain Rayé
Was Fabian zu raten versucht, ist, den ersten Block zu verwenden, der das verwendet, <reference name="form.additional.info">und dann das hinzuzufügen <depends>. Wenn Sie diesen zweiten Block <reference name="checkout.onepage.login">mit dem verwenden <depends>, wird der Captcha-Block wie erwähnt überschrieben.
Mybluevan
@mybluevan danke ich bin kein Neuling. Wenn ich geschrieben habe, funktioniert es nicht, das heißt, ich habe getestet, wie Fabian vorgeschlagen hat. Zuerst werden die Magento-Kernmodule geladen, dann die Community und dann die lokalen. Gleiche Reihenfolge für die Standard-Layout-XML-Dateien. Mein Modul ist in der Community, es wird endlich geladen. Das Tag dependsist in diesem Fall nicht erforderlich. Und wir sind uns alle einig über den überschriebenen Weg meines zweiten Blocks. Ich habe den Grund gefunden, warum es nicht funktioniert, aber ich finde immer noch keine saubere Lösung. Siehe meine Bearbeitung in der Frage.
Sylvain Rayé