Adicionando um bloco ao logon na saída de uma página

9

Tento adicionar uma opção de login adicional durante o processo de checkout. No momento, você tem o nome de usuário / senha. Quero adicionar uma imagem de botão para fazer login por meio de um processo OAuth (no meu caso, Github).

Eu encontrei um caminho, mas não é o melhor. Há no arquivo de modelo checkout / onepage / login.phtml, uma chamada para obter o nome de um filho do bloco form.additional.info.

Tentei inserir meu próprio bloco dessa maneira, mas não funcionou.

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

Eu encontrei uma maneira diferente, como é feita pelo 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>

Nesse caso, ele funciona, mas o captcha não será exibido. Como posso inserir vários blocos no form.additional.infobloco?

Obrigado pela ajuda

EDIT :

Encontrei alguns motivos pelos quais o botão não é exibido nos campos de login ao usar o form.additional.infométodo de referência . Ele é exibido na visualização de faturamento da finalização da compra.

  1. O bloco form.additional.infoé criado pelo módulo captcha para o bloco checkout.onepage.logine também é criado para o blococheckout.onepage.billing
  2. Ao gerar o bloco em Mage_Core_Model_Layout :: _ generateBlock (), ele pesquisa o objeto do bloco pai do bloco login_github_button. Em vez de encontrar o caminho de checkout.onepage.login, ele encontra um dos mais recentes criado: checkout.onepage.billing. O bloco está anexado a este último, em vez do logon. Então eu encontro meu botão de login na visualização do endereço de cobrança em vez da visualização de login !!!
  3. Se eu comentar no arquivo captcha.xml de layout, a parte sobre checkout.onepage.billingminha primeira solução funcionará.

Ainda não está ok, mas começo a descobrir os motivos.

Sylvain Rayé
fonte

Respostas:

3

Bem, a única solução que vejo é criar no módulo de layout o bloco, adicionar o código do captcha e adicionar como referência meu código personalizado. Neste caso, é aceito.

Infelizmente, ainda será difícil inserir um bloco no form.additional.infobloco.

Aqui está a solução que eu implementei:

<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é
fonte
Como você afirma, isso impedirá que outros módulos usem esse bloco também e também causará problemas nas atualizações. A solução <reference name="form.additional.info">e <depends>acima é muito mais limpa e mais sustentável.
mybluevan
@mybluevan Eu não entendo o voto negativo (se você fez isso). Um voto negativo é merecido para esses casos stackoverflow.com/privileges/vote-down Minha resposta é colocada aqui para mostrar uma solução alternativa. Não é o melhor que conheço, mas permite captcha e o layout do módulo personalizado. Não fiquei claro ao dizer que isso impedirá o uso por outros módulos. Eu queria dizer que se você quiser adicionar um filho a esse bloco, ele continuará sendo um problema. Ainda estou investigando uma maneira mais limpa. Um do Fabian não funciona de todo, eu convido você para testá-lo por si mesmo na mesma condição
Sylvain Rayé
1

o captcha.xml gera o bloco, portanto deve ser utilizável. Você adicionou um

<depends>
    <Mage_Captcha />
</depends>

para ter certeza de que seu bloco já existe, quando você tenta adicionar um filho a ele?

Fabian Blechschmidt
fonte
Não funciona. Meu módulo parece substituir ou ter prioridade sobre o módulo Captcha. Como você mencionou no twitter, o bloco 'form.additional.info' ainda não existe. Portanto, um layout de módulo o cria e não permite adicionar outro. O segundo módulo de layout não se refere ao 'form.additional.info', mas tenta criar um. É por isso que não está funcionando. Eu tento encontrar uma maneira limpa de permitir ambos. Uma solução poderia ser sobrescrever login.phtml do modelo de uma página, mas fornecerá trabalho adicional para outros desenvolvedores em caso de tema personalizado
Sylvain Rayé
O que Fabian está tentando aconselhar é usar o primeiro bloco que usa <reference name="form.additional.info">e depois adicionar o <depends>. Se você usar esse segundo bloco <reference name="checkout.onepage.login">com o <depends>mesmo, ele substituirá o bloco captcha como você mencionou.
mybluevan
@mybluevan obrigado Eu não sou um novato. Se eu escrevi, não funciona, significa que testei como Fabian sugeriu. Primeiro, os módulos principais do Magento são carregados, depois a comunidade e o local. Mesma ordem para os arquivos xml de layout padrão. Meu módulo está na comunidade, está finalmente carregado. A tag dependsnão é necessária neste caso. E todos estamos de acordo sobre a maneira substituída do meu segundo bloco. Encontrei o motivo pelo qual ele não funciona, mas ainda não encontro a solução limpa. Veja minha edição na pergunta.
Sylvain Rayé 30/01