添加块以登录一页结帐


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>

我发现了由验证码模块完成的另一种方式:

<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码模块为该区块checkout.onepage.login创建了该区块,然后还为该区块创建了该区块checkout.onepage.billing
  2. 在Mage_Core_Model_Layout :: _ generateBlock()中生成块时,它会搜索该块的父块对象login_github_buttoncheckout.onepage.login它没有找到其中之一,而是找到了最新创建的之一:checkout.onepage.billing。该块附加到最后一个,而不是登录一个。然后,我在帐单地址视图而不是登录视图中找到我的登录按钮!!!
  3. 如果我在布局captcha.xml文件中添加注释,则有关checkout.onepage.billing第一个解决方案的部分将 起作用。

仍然不行,但我开始寻找原因。

Answers:


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">and <depends>解决方案更加干净和易于维护。
mybluevan

@mybluevan我不了解downvote(如果您这样做的话)。对于这些情况一个downvote是实至名归stackoverflow.com/privileges/vote-down我的回答是把这里显示的替代解决方案。这不是我所知道的最好的,但它允许具有验证码和自定义的模块布局。我不清楚这是否会阻止其他模块的使用。我的意思是,如果您想在此块中添加一个孩子,它将仍然是一个问题。我仍在研究一种更清洁的方法。Fabian的
手机

1

captcha.xml会生成该块,因此它应该是可用的。您是否添加了

<depends>
    <Mage_Captcha />
</depends>

可以确定,当您尝试向其添加子项时,该块已存在?


不工作。我的模块似乎覆盖或优先于验证码模块。正如您在Twitter中提到的那样,“ form.additional.info”块尚不存在。因此,模块布局会创建它,并且不允许添加其他布局。第二个布局模块不引用“ form.additional.info”,而是尝试创建一个。这就是它不起作用的原因。我试图找到一种允许两者同时使用的干净方法。解决方案可能是覆盖一页模板的login.phtml,但是在自定义主题的情况下,它将为其他开发人员提供其他工作
SylvainRayé2013年

Fabian试图建议的是先使用<reference name="form.additional.info">,然后添加<depends>。如果您将第二个代码块<reference name="checkout.onepage.login">与一起使用,<depends>它将覆盖您所提到的验证码代码块。
mybluevan 2013年

@mybluevan谢谢你我不是新手。如果我写过,那是行不通的,这意味着我按照Fabian的建议进行了测试。首先加载Magento核心模块,然后加载社区,然后加载本地。默认布局xml文件的顺序相同。我的模块在社区中,最后已加载。depends在这种情况下,不需要标签。我们都同意我第二个步骤的重写方式。我找到了它不起作用的原因,但是我仍然找不到干净的解决方案。看到我在问题中的编辑。
SylvainRayé2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.