Cập nhật bố cục: không thể thêm khối con trong bố cục XML bằng cách tham chiếu


8

Tôi đang gặp vấn đề trong đó dường như tôi không thể thêm một khối con vào tệp XML bố cục. Tôi đang làm gì sai trong mylayout.xmlđó tôi không thể tải abc? Tôi có các tập tin sau.

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>

kiểm tra.

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

Câu trả lời:


8

Nếu đó là sự cố tải mô-đun, tôi nghĩ bạn nên thêm một thẻ vào tệp khai báo mô-đun. như dưới đây

<depends> <companyname_modulename/> </depends>

Điều này sẽ đảm bảo rằng mô-đun của bạn sẽ được tải sau tên công ty_modulename


4

Tôi đã tìm ra lý do tại sao. Tiện ích mở rộng của tôi tải trước và tiện ích mở rộng tải onestepcheckout_index_index được tải sau khi mở rộng. Do đó, cập nhật bố cục của tôi đã đề cập đến một tay cầm chưa tồn tại ..


4

Chỉ cần làm rõ điều này. Một số bước là cần thiết. Đầu tiên, khai báo khối là một khối con.

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

Sau đó thêm phụ thuộc vào tệp khai báo mô-đun của bạn. Trong trường hợp của tôi, nó làIdev_OneStepCheckout

<depends>
    <Idev_OneStepCheckout />
</depends>

Cuối cùng, trong mẫu nó sẽ chỉ hoạt động nếu bạn sử dụng bí danh.

echo $this->getChildHtml('my_name')

2

Không chắc tại sao điều đó cũng không hoạt động. Bạn đã thử tuyên bố rõ ràng khối là một đứa trẻ?

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

Tôi đã thử nó, nhưng nó vẫn không hoạt động. Điều kỳ lạ là tôi có các cập nhật khác trong my layout.xmlđó sử dụng cùng một phương thức, và tất cả chúng đều hoạt động.
nhạcliftsme

1
Tôi đã tìm ra lý do tại sao. Phần mở rộng của tôi tải trước và phần mở rộng tải onestepcheckout_index_indexđược tải sau phần mở rộng của tôi. Do đó, bản cập nhật bố cục của tôi đã đề cập đến một tay cầm chưa tồn tại ..
musicliftsme

@laketuna điều đó rất thú vị, gần đây tôi có một vấn đề tương tự và chỉ sử dụng một người quan sát, nhưng câu hỏi này đã khơi dậy sự tò mò của tôi một lần nữa, cảm ơn
pzirkind

1

Nếu bạn muốn thêm khối mới, bạn nên tham khảo các khối cấu trúc, không phải khối nội dung. Thay vào đó hãy thử một cái gì đó như thế này:

<onestepcheckout_index_index>
    <reference name="content">
        <block type="block/class" template="path/to/template/template.phtml" name="abc" as="abc" />
    </reference>
</onestepcheckout_index_index>

1
Đề cập đến contenttải khối của tôi, nhưng tôi không thể kiểm soát nơi khối được đặt nếu tôi tham khảo `nội dung.
nhạcliftsme

Nó được đặt bởi<?php echo $this->getChildHtml('abc') ?>
Pronto

Tôi cần đặt khối này ở một vị trí cụ thể. Theo tôi biết, việc tham chiếu contentđặt khối tự động và echo $this->getChildHtml('abc')không có hiệu lực. Sửa tôi nếu tôi sai.
nhạcliftsme
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.