Добавление блока для входа в систему на одной странице оформления заказа

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_button. Вместо того , чтобы найти один из checkout.onepage.login, он находит один из последних создано: checkout.onepage.billing. Блок прикреплен к этому последнему, а не лог в одном. Затем я нахожу кнопку входа в систему в окне адреса выставления счета вместо окна входа в систему !!!
  3. Если я прокомментирую файл макета captcha.xml, часть о checkout.onepage.billingмоем первом решении работает.

Это все еще не хорошо, но я начинаю находить причины.

Сильвен Райе
источник

Ответы:

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">И <depends>раствор выше гораздо чище и легче поддерживать.
MyBluevan
@mybluevan Я не понимаю, понижающий голос (если вы это сделали). В этих случаях заслуживает отрицательного ответа stackoverflow.com/privileges/vote-down Мой ответ приведен здесь, чтобы показать альтернативное решение. Это не лучшее, что я знаю, но оно позволяет использовать капчу и настраиваемый макет модуля. Мне было непонятно, говоря, что это предотвратит использование другими модулями. Я хотел иметь в виду, что если вы хотите добавить ребенка в этот блок, это все равно будет проблемой. Я все еще исследую более чистый путь. Тот, что у Фабиана, не работает вообще, я приглашаю вас проверить его самостоятельно в том же состоянии
Сильвен Райе
1

captcha.xml генерирует блок, поэтому его следует использовать. Вы добавили

<depends>
    <Mage_Captcha />
</depends>

быть уверенным, что ваш блок уже существует, когда вы пытаетесь добавить к нему ребенка?

Фабиан Блехшмидт
источник
Не работает. Кажется, мой модуль перезаписан или имеет приоритет над модулем Captcha. Как вы упомянули в твиттере, блок form.additional.info еще не существует. Таким образом, макет модуля создает его и не позволяет добавить другой. Второй модуль макета не ссылается на «form.additional.info», но пытается создать его. Вот почему это не работает. Я пытаюсь найти чистый способ разрешить и то, и другое. Решением может быть перезапись login.phtml шаблона для одной страницы, но это обеспечит дополнительную работу для других разработчиков в случае пользовательской темы
Sylvain Rayé
Фабиан пытается посоветовать использовать тот первый блок, который использует, <reference name="form.additional.info">а затем добавить <depends>. Если вы используете этот второй блок <reference name="checkout.onepage.login">с, <depends>он перезапишет блок капчи, как вы упоминали.
MyBluevan
@mybluevan спасибо, я не новичок. Если я написал, это не работает, это означает, что я проверил, как предложил Фабиан. Сначала загружаются основные модули Magento, затем сообщество, затем локальное. Тот же порядок для файлов макета по умолчанию. Мой модуль в сообществе, он наконец загружен. Тег dependsне нужен в этом случае. И мы все согласны с перезаписанным способом моего второго блока. Я нашел причину, почему это не работает, но я все еще не нашел чистого решения. Смотрите мои изменения в вопросе.
Сильвен Райе