Додавання блоку для входу на одну сторінку


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>

Я знайшов інший спосіб, як це робиться модулем 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>

У цьому випадку вона працює, Але капч не відображатиметься. Як я можу вставити кілька блоків у form.additional.infoблок?

Спасибі за вашу допомогу

Редагувати :

Я знайшов деякі причини, чому кнопка не відображається під полями входу під час використання довідкового form.additional.infoметоду. Він замість цього відображається у вікні виставлення рахунків.

  1. Блок form.additional.infoстворюється модулем captcha для блоку, checkout.onepage.loginтоді він також створюється для блокуcheckout.onepage.billing
  2. Під час генерації блоку в Mage_Core_Model_Layout :: _ generatorBlock () він здійснює пошук батьківського об'єкта блоку 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 Я не розумію суті (якщо ви це зробили). Downvote заслужено для цих випадків stackoverflow.com/privileges/vote-down Моя відповідь ставиться тут , щоб показати альтернативне рішення. Це не найкраще, що я знаю, але це дозволяє мати captcha та налаштований макет модуля. Мені було не зрозуміло, сказавши, що це заважатиме використовувати інші модулі. Я хотів сказати, що якщо ви хочете додати дитину до цього блоку, це все ще буде проблемою. Я досі розслідую більш чистий спосіб. Фабіан взагалі не працює, я пропоную вам протестувати його в тому самому стані
Sylvain Rayé

1

captcha.xml генерує блок, тому він повинен бути корисним. Ви додали

<depends>
    <Mage_Captcha />
</depends>

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


Не працюють. Здається, мій модуль замінює або має пріоритет над модулем Captcha. Як ви вже згадували про це у Twitter, блок 'form.additional.info' ще не існує. Отже, макет модуля створює його і не дозволяє додавати інший. Другий модульний макет не посилається на "form.additional.info", але спробуйте створити його. Ось чому це не працює. Я намагаюся знайти чистий спосіб, щоб дозволити обом. Рішенням може бути перезапис login.phtml шаблону однієї сторінки, але це забезпечить додаткову роботу для інших розробників у разі користувацької теми
Sylvain Rayé,

Те, що Фабіан намагається порадити, - це використовувати перший блок, який використовує, <reference name="form.additional.info">а потім додати його <depends>. Якщо ви використовуєте цей другий блок <reference name="checkout.onepage.login">із ним, <depends>він замінить блок captcha, як ви згадали.
mybluevan

@mybluevan дякую, що я не новачок. Якщо я написав, це не працює, це означає, що я перевірив, як запропонував Фабіан. Спочатку завантажуються основні модулі Magento, потім спільнота, а потім локальні. Той самий порядок для файлів xml-макета за замовчуванням. Мій модуль знаходиться у спільноті, він завантажується нарешті. Тег dependsу цьому випадку не потрібен. І ми всі згодні з приводу перезаписаного способу мого другого блоку. Я знайшов причину, чому це не працює, але я все ще не знаходжу чистого рішення. Дивіться мою редакцію у питанні.
Sylvain Rayé
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.