Menambahkan blok untuk masuk ke checkout di tempat

9

Saya mencoba menambahkan opsi login tambahan selama proses checkout. Saat ini, Anda memiliki cara nama pengguna / kata sandi. Saya ingin menambahkan gambar tombol untuk login melalui proses OAuth (dalam kasus saya Github).

Saya menemukan cara tetapi itu bukan cara terbaik. Ada dalam file template checkout / onepage / login.phtml, panggilan untuk mendapatkan nama anak blok form.additional.info.

Saya mencoba memasukkan blok saya sendiri di dalamnya dengan cara ini tetapi tidak berhasil.

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

Saya menemukan cara yang berbeda seperti yang dilakukan oleh modul 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>

Dalam hal ini, ini berfungsi TETAPI captcha tidak akan ditampilkan. Bagaimana saya bisa memasukkan beberapa blok ke dalam form.additional.infoblok?

Terima kasih atas bantuan Anda

EDIT :

Saya menemukan beberapa alasan mengapa tombol tidak ditampilkan di bawah bidang masuk saat menggunakan form.additional.infometode referensi . Ini ditampilkan dalam tampilan penagihan checkout.

  1. Blok form.additional.infodibuat oleh modul captcha untuk blok checkout.onepage.loginkemudian juga dibuat untuk blokcheckout.onepage.billing
  2. Saat membuat blok di Mage_Core_Model_Layout :: _ generateBlock () ia mencari objek induk blok dari blok login_github_button. Alih-alih menemukan salah satu checkout.onepage.login, ia menemukan salah satu yang terbaru diciptakan: checkout.onepage.billing. Blok dilampirkan ke yang terakhir ini, bukan yang masuk. Kemudian saya menemukan tombol login saya pada tampilan alamat penagihan alih-alih tampilan login !!!
  3. Jika saya berkomentar ke file layout captcha.xml, bagian tentang checkout.onepage.billingsolusi pertama saya berfungsi.

Ini masih tidak baik tetapi saya mulai menemukan alasannya.

Sylvain Rayé
sumber

Jawaban:

3

Nah, satu-satunya solusi yang saya lihat adalah membuat modul tata letak blok, menambahkan kode captcha dan menambahkan sebagai referensi kode kustom saya. Dalam hal ini diterima.

Sayangnya, masih akan sulit untuk memasukkan blok ke dalam form.additional.infoblok.

Inilah solusi yang saya terapkan:

<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é
sumber
Saat Anda menyatakan, ini akan mencegah modul lain dari menggunakan blok ini juga, dan juga akan menyebabkan masalah dengan peningkatan. The <reference name="form.additional.info">dan <depends>solusi di atas jauh lebih bersih dan lebih dipertahankan.
mybluevan
@ mybluevan Saya tidak mengerti downvote (jika Anda melakukannya). Downvote layak untuk kasus ini stackoverflow.com/privileges/vote-down Jawaban saya ada di sini untuk menunjukkan solusi alternatif. Ini bukan yang terbaik yang saya tahu tetapi memungkinkan untuk memiliki captcha dan tata letak modul yang disesuaikan. Saya tidak jelas dengan mengatakan bahwa itu akan mencegah penggunaan oleh modul lain. Saya ingin mengatakan bahwa jika Anda ingin menambahkan anak ke blok ini, itu masih akan terus menjadi masalah. Saya masih menyelidiki cara yang lebih bersih. Yang Fabian tidak bekerja sama sekali, saya mengundang Anda untuk mengujinya sendiri dalam kondisi yang sama
Sylvain Rayé
1

captcha.xml menghasilkan blok, jadi itu bisa digunakan. Apakah Anda menambahkan

<depends>
    <Mage_Captcha />
</depends>

untuk memastikan, bahwa blok Anda sudah ada, ketika Anda mencoba menambahkan anak ke dalamnya?

Fabian Blechschmidt
sumber
Tidak bekerja. Modul saya tampaknya menimpa atau memiliki prioritas di atas modul Captcha. Seperti yang Anda sebutkan di twitter, blok 'form.additional.info' belum ada. Jadi tata letak modul membuatnya dan tidak memungkinkan untuk menambahkan yang lain. Modul tata letak kedua tidak merujuk ke 'form.additional.info' tetapi cobalah untuk membuatnya. Itu alasannya tidak bekerja. Saya mencoba mencari cara yang bersih untuk memungkinkan keduanya. Sebuah solusi bisa dengan menimpa login.phtml dari templat onepage tetapi akan memberikan pekerjaan tambahan untuk pengembang lain jika ada tema khusus
Sylvain Rayé
Apa yang Fabian coba sarankan adalah menggunakan blok pertama yang menggunakan <reference name="form.additional.info">dan kemudian menambahkan <depends>. Jika Anda menggunakan blok kedua <reference name="checkout.onepage.login">dengan <depends>itu akan menimpa blok captcha seperti yang Anda sebutkan.
mybluevan
@ mybluevan terima kasih, saya bukan pemula. Jika saya telah menulis, itu tidak berhasil, itu berarti saya diuji seperti yang disarankan Fabian. Pertama modul inti Magento dimuat lalu komunitas kemudian lokal. Urutan yang sama untuk file xml tata letak default. Modul saya ada di komunitas, akhirnya dimuat. Tag dependstidak perlu dalam hal ini. Dan kita semua sepakat tentang cara menimpa blok kedua saya. Saya menemukan alasan mengapa itu tidak berhasil tetapi saya masih belum menemukan solusi yang bersih. Lihat hasil edit saya di pertanyaan.
Sylvain Rayé