Agregar un bloque para iniciar sesión en la página de pago

9

Intento agregar una opción de inicio de sesión adicional durante el proceso de pago. Por el momento, tiene la forma de nombre de usuario / contraseña. Quiero agregar una imagen de botón para iniciar sesión a través de un proceso de OAuth (en mi caso, Github).

Encontré un camino, pero no es el mejor. En el archivo de plantilla checkout / onepage / login.phtml, hay una llamada para obtener un bloque llamado niño form.additional.info.

Traté de insertar mi propio bloque de esta manera, pero no funcionó.

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

Encontré una forma diferente, como lo hace el módulo 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>

En este caso, funciona PERO el captcha no se mostrará. ¿Cómo puedo insertar varios bloques en form.additional.infobloque?

Gracias por tu ayuda

EDITAR :

Encontré algunas razones por las cuales el botón no se muestra debajo de los campos de inicio de sesión cuando se usa el form.additional.infométodo de referencia . En su lugar, se muestra en la vista de facturación de pago.

  1. El bloque form.additional.infoes creado por el módulo captcha para el bloque, checkout.onepage.loginluego también se crea para el bloquecheckout.onepage.billing
  2. Al generar el bloque en Mage_Core_Model_Layout :: _ generateBlock (), busca el objeto del bloque primario del bloque login_github_button. En lugar de encontrar el de checkout.onepage.login, se encuentra uno de los de más reciente creación: checkout.onepage.billing. El bloque se adjunta a este último, en lugar del registro en uno. Luego encuentro mi botón de inicio de sesión en la vista de la dirección de facturación en lugar de la vista de inicio de sesión.
  3. Si comento en el archivo de diseño captcha.xml, la parte sobre checkout.onepage.billingmi primera solución funciona.

Todavía no está bien, pero empiezo a encontrar los motivos.

Sylvain Rayé
fuente

Respuestas:

3

Bueno, la única solución que veo es crear en el módulo de diseño el bloque, agregar el código del captcha y agregar como referencia mi código personalizado. En este caso se acepta.

Desafortunadamente, aún será difícil insertar un bloque en el form.additional.infobloque.

Aquí está la solución que implementé:

<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é
fuente
Como usted dice, esto evitará que otros módulos también usen este bloque y también causará problemas con las actualizaciones. El <reference name="form.additional.info">y <depends>solución anterior es mucho más limpio y más fácil de mantener.
mybluevan
@mybluevan No entiendo el voto negativo (si lo hiciste). Se merece un voto negativo para estos casos stackoverflow.com/privileges/vote-down Mi respuesta se encuentra aquí para mostrar una solución alternativa. No es lo mejor que sé, pero permite tener captcha y el diseño del módulo personalizado. No estaba claro al decir que evitará el uso por otros módulos. Quería decir que si desea agregar un hijo a este bloque, seguirá siendo un problema. Todavía estoy investigando una forma más limpia. El Fabian no funciona en absoluto, lo invito a que lo pruebe usted mismo en las mismas condiciones
Sylvain Rayé
1

captcha.xml genera el bloque, por lo que debería ser utilizable. ¿Agregaste un

<depends>
    <Mage_Captcha />
</depends>

para estar seguro de que su bloqueo ya existe cuando intenta agregarle un hijo?

Fabian Blechschmidt
fuente
No funcionan. Mi módulo parece sobrescribir o tener prioridad sobre el módulo Captcha. Como lo mencionó en Twitter, el bloque 'form.additional.info' aún no existe. Entonces, un diseño de módulo lo crea y no permite agregar otro. El segundo módulo de diseño no hace referencia a 'form.additional.info' pero intenta crear uno. Esa es la razón por la que no está funcionando. Trato de encontrar una forma limpia de permitir ambos. Una solución podría ser sobrescribir login.phtml de la plantilla de una página, pero proporcionará trabajo adicional para otros desarrolladores en caso de tema personalizado
Sylvain Rayé
Lo que Fabian está tratando de aconsejar es usar ese primer bloque que usa <reference name="form.additional.info">y luego agregar el <depends>. Si usa ese segundo bloque <reference name="checkout.onepage.login">con el <depends>, sobrescribirá el bloque captcha como mencionó.
mybluevan
@mybluevan gracias, no soy un novato. Si he escrito, no funciona, significa que probé como Fabian sugirió. Primero se cargan los módulos principales de Magento, luego la comunidad y luego el local. El mismo orden para los archivos xml de diseño predeterminados. Mi módulo está en la comunidad, por fin está cargado. La etiqueta dependsno es necesaria en este caso. Y todos estamos de acuerdo sobre la forma sobrescrita de mi segundo bloque. Encontré la razón por la que no funciona, pero todavía no encuentro la solución limpia. Vea mi edición en la pregunta.
Sylvain Rayé