Pembaruan tata letak: tidak dapat menambahkan blok anak dalam tata letak XML dengan referensi

8

Saya mengalami masalah di mana saya sepertinya tidak bisa menambahkan blok anak dalam file XML layout. Apa yang saya lakukan salah mylayout.xmlkarena saya tidak dapat memuat abc? Saya memiliki file-file berikut.

onestepcheckout.xml

<onestepcheckout_index_index>
    ...
    <reference name="content">
        <block type="onestepcheckout/checkout" name="onestepcheckout.checkout" template="onestepcheckout/checkout.phtml">
            ...
            <!-- this child block can be loaded -->
             <block type="block/class" template="path/to/template/template.phtml" name="qwe" as="qwe" />
            ...
        </block>
    </reference>
    ...
</onestepcheckout_index_index>

mylayout.xml

<onestepcheckout_index_index>
    <reference name="onestepcheckout.checkout">
        <!-- this child block can not be loaded -->
        <block type="block/class" template="path/to/template/template.phtml" name="abc" as="abc" />
    </reference>
</onestepcheckout_index_index>

checkout.phtml

...
<?php echo $this->getChildHtml('abc') // doesn't work ?>
<?php echo $this->getChildHtml('qwer') // works ?>
...
musicliftsme
sumber

Jawaban:

8

Jika ini masalah pemuatan modul, saya pikir Anda harus menambahkan tag di file deklarasi modul Anda. seperti di bawah ini

<depends> <companyname_modulename/> </depends>

Ini akan memastikan bahwa modul Anda akan dimuat setelah nama perusahaan_modulename

Saran Dhanpat
sumber
4

Saya menemukan alasannya. Ekstensi saya dimuat terlebih dahulu, dan ekstensi yang memuat onestepcheckout_index_index dimuat setelah milik saya. Oleh karena itu, pembaruan tata letak saya merujuk ke pegangan yang belum ada ..

musicliftsme
sumber
4

Hanya untuk memperjelas ini. Beberapa langkah diperlukan. Pertama, nyatakan blok sebagai blok anak.

<action method="setChild"><alias>my_name</alias><child>my.name</child></action>

Kemudian tambahkan dependensi ke file deklarasi modul Anda. Dalam kasus saya ituIdev_OneStepCheckout

<depends>
    <Idev_OneStepCheckout />
</depends>

Akhirnya, dalam templat itu hanya akan berfungsi jika Anda menggunakan alias.

echo $this->getChildHtml('my_name')
Michael Thessel
sumber
2

Tidak yakin mengapa itu tidak berhasil juga. Sudahkah Anda mencoba mendeklarasikan blok secara eksplisit sebagai seorang anak?

<onestepcheckout_index_index>
    <reference name="onestepcheckout.checkout">
        <!-- this child block can not be loaded -->
        <block type="block/class" template="path/to/template/template.phtml" name="abc" as="abc" />
        <action method="setChild"><child>abc</child><alias>abc</alias></action>
    </reference>
</onestepcheckout_index_index>
Mengenakan
sumber
Saya mencobanya, tetapi masih tidak berhasil. Yang aneh adalah bahwa saya memiliki pembaruan lain my layout.xmlyang menggunakan metode yang sama, dan semuanya bekerja.
musicliftsme
1
Saya menemukan alasannya. Ekstensi saya dimuat lebih dulu, dan ekstensi yang onestepcheckout_index_indexdimuat setelah saya. Oleh karena itu, pembaruan tata letak saya merujuk ke pegangan yang belum ada ..
musicliftsme
@laketuna itu sangat menarik, saya punya masalah yang sama baru-baru ini dan hanya menggunakan pengamat, tapi pertanyaan ini memicu keingintahuan saya lagi, terima kasih
pzirkind
1

Jika Anda ingin menambahkan blok baru, Anda harus mereferensikan blok struktural, bukan blok konten. Cobalah sesuatu seperti ini sebagai gantinya:

<onestepcheckout_index_index>
    <reference name="content">
        <block type="block/class" template="path/to/template/template.phtml" name="abc" as="abc" />
    </reference>
</onestepcheckout_index_index>
Segera
sumber
1
Mengacu pada contentmemuat blok saya, tetapi saya tidak bisa mengontrol di mana blok ditempatkan jika saya merujuk ke `konten.
musicliftsme
Itu ditempatkan oleh<?php echo $this->getChildHtml('abc') ?>
Pronto
Saya perlu menempatkan blok ini di lokasi tertentu. Sejauh yang saya tahu, referensi contentmenempatkan blok secara otomatis dan echo $this->getChildHtml('abc')tidak berpengaruh. Koreksi saya jika saya salah.
musicliftsme