Ajout d'un bloc pour se connecter lors du paiement à la page

9

J'essaie d'ajouter une option de connexion supplémentaire pendant le processus de paiement. Pour le moment, vous disposez de la méthode nom d'utilisateur / mot de passe. Je veux ajouter une image de bouton pour me connecter via un processus OAuth (dans mon cas Github).

J'ai trouvé un moyen mais ce n'est pas le meilleur. Il y a dans le fichier de modèle checkout / onepage / login.phtml, un appel pour obtenir un enfant de bloc nommé form.additional.info.

J'ai essayé d'y insérer mon propre bloc de cette façon mais cela n'a pas fonctionné.

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

J'ai trouvé une manière différente comme cela se fait par le module 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>

Dans ce cas, cela fonctionne MAIS le captcha ne sera pas affiché. Comment puis-je insérer plusieurs blocs dans le form.additional.infobloc?

Merci de votre aide

MODIFIER :

J'ai trouvé quelques raisons pour lesquelles le bouton ne s'affiche pas sous les champs de connexion lors de l'utilisation de la form.additional.infométhode de référence . Il s'affiche à la place dans la vue de facturation de paiement.

  1. Le bloc form.additional.infoest créé par le module captcha pour le bloc checkout.onepage.loginpuis il est également créé pour le bloccheckout.onepage.billing
  2. Lors de la génération du bloc dans Mage_Core_Model_Layout :: _ generateBlock (), il recherche l'objet bloc parent du bloc login_github_button. Au lieu de trouver l'un des checkout.onepage.login, il trouve l' un des derniers créé: checkout.onepage.billing. Le bloc est attaché à ce dernier, au lieu du journal de connexion. Ensuite, je trouve mon bouton de connexion dans la vue de l'adresse de facturation au lieu de la vue de connexion !!!
  3. Si je commente dans le fichier de mise en page captcha.xml, la partie sur checkout.onepage.billingma première solution fonctionne.

Ce n'est toujours pas ok mais je commence à trouver les raisons.

Sylvain Rayé
la source

Réponses:

3

Eh bien, la seule solution que je vois est de créer dans le module de mise en page le bloc, d'ajouter le code du captcha et d'ajouter comme référence mon code personnalisé. Dans ce cas, il est accepté.

Malheureusement, il sera toujours difficile d'insérer un bloc dans le form.additional.infobloc.

Voici la solution que j'ai implémentée:

<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é
la source
Comme vous le dites, cela empêchera également tout autre module d'utiliser ce bloc et entraînera également des problèmes de mise à niveau. La <reference name="form.additional.info">et <depends>solution ci - dessus est beaucoup plus propre et plus maintenable.
mybluevan
@mybluevan Je ne comprends pas le downvote (si vous l'avez fait). Un downvote est mérité pour ces cas stackoverflow.com/privileges/vote-down Ma réponse est mise ici pour montrer une solution alternative. Ce n'est pas le meilleur que je connaisse mais cela permet d'avoir du captcha et la disposition du module personnalisé. Je n'ai pas été clair en disant que cela empêcherait l'utilisation par d'autres modules. Je voulais dire que si vous voulez ajouter un enfant à ce bloc, cela continuera à être un problème. J'étudie toujours une manière plus propre. Celui de Fabian ne fonctionne pas du tout, je vous invite à le tester par vous-même dans le même état
Sylvain Rayé
1

le captcha.xml génère le bloc, il doit donc être utilisable. Avez-vous ajouté un

<depends>
    <Mage_Captcha />
</depends>

pour être sûr que votre bloc existe déjà, quand vous essayez d'y ajouter un enfant?

Fabian Blechschmidt
la source
Ne fonctionnent pas. Mon module semble écraser ou avoir la priorité sur le module Captcha. Comme vous l'avez mentionné sur Twitter, le bloc 'form.additional.info' n'existe pas encore. Ainsi, une disposition de module le crée et ne permet pas d'en ajouter un autre. Le deuxième module de mise en page ne fait pas référence au 'form.additional.info' mais essayez d'en créer un. C'est la raison pour laquelle cela ne fonctionne pas. J'essaie de trouver un moyen propre de permettre les deux. Une solution pourrait être d'écraser login.phtml du modèle onepage mais cela fournira du travail supplémentaire aux autres développeurs en cas de thème personnalisé
Sylvain Rayé
Ce que Fabian essaie de conseiller, c'est d'utiliser le premier bloc qui utilise <reference name="form.additional.info">puis d'ajouter le <depends>. Si vous utilisez ce deuxième bloc <reference name="checkout.onepage.login">avec le, <depends>il écrasera le bloc captcha comme vous l'avez mentionné.
mybluevan
@mybluevan merci je ne suis pas un débutant. Si j'ai écrit, cela ne fonctionne pas, cela signifie que j'ai testé comme Fabian l'a suggéré. Les modules de base Magento sont d'abord chargés, puis communautaires puis locaux. Même ordre pour les fichiers xml de mise en page par défaut. Mon module est dans la communauté, il est enfin chargé. La balise dependsn'est pas nécessaire dans ce cas. Et nous sommes tous d'accord sur la manière écrasée de mon deuxième bloc. J'ai trouvé la raison pour laquelle cela ne fonctionne pas mais je ne trouve toujours pas encore la solution propre. Voir mon montage dans la question.
Sylvain Rayé