Có thể thay đổi loại khối trong bố cục XML?


13

Có thể thay đổi một loại khối trong bố cục XML không?

Tôi biết cách thay đổi mẫu bằng setTemplatephương thức, nhưng tôi đang cố gắng thay đổi loại của khối. Điều này có thể không?


vui lòng giải thích chi tiết những gì bạn phải thay đổi
Keyul Shah

Câu trả lời:


7

Thay đổi loại khối có nghĩa là thay đổi lớp khối, vì vậy không, nhưng ...

... bạn chỉ có thể ghi đè lên khối:

  1. Tìm một điều khiển bố trí được gọi sau HOẶC chắc chắn rằng bạn layout.xmlđược xử lý sau khi khối được tạo, ví dụ như <depends>trongCompany_Module.xml
  2. Chỉ cần tạo một khối mới của loại khác có cùng tên

Vấn đề là, điều này sẽ ghi đè lên khối và không thay đổi loại. Điều này có nghĩa là mọi thứ được thực hiện trên khối này giữa sáng tạo và thay đổi của bạn sẽ bị mất.

Ví dụ để thay đổi catalog.navigation:

<layout version="0.1.0">
    <catalog_category_default translate="label">
        <reference name="left">
            <block type="myModule/navigation" name="catalog.leftnav" after="currency" template="myModule/catalog/navigation/left.phtml"/>
        </reference>
    </catalog_category_default>
</layout>

1
Bạn cũng có thể tạo một lớp khối mới "kế thừa" lớp khối mà bạn đang tìm kiếm để thay thế. Bạn sẽ cần thêm một mục trong tệp config.xml của tiện ích mở rộng tùy chỉnh của mình để trao đổi lớp khối với lớp của bạn. Điều này sẽ có ý nghĩa nếu bạn có kế hoạch mở rộng hoặc sửa đổi chức năng của khối.
Biagio Arobba

3

Bạn không thể thay đổi nó trong tập tin bố trí afaik. Tuy nhiên, bạn có thể mở rộng và ghi đè chúng trong tệp cấu hình của mình.

Thí dụ:

<config>
    <global>
        <blocks>
            <catalog>
                <rewrite><product_view>My_Custom_Block_Product_View</product_view></rewrite>
            </catalog>
        </blocks>
    </global>
</config>

Nhớ mở rộng khối ban đầu.


1

Tôi đã phải đối mặt với vấn đề tương tự rằng tôi cần cập nhật một khối cụ thể cho một bố cục cụ thể.

Những gì tôi kết thúc và nó dường như hoạt động (trong tệp bố cục)

<controller_x_y>
    <reference name="block_name_reference">
        <block type="mymodule/customblock" name="block_name_reference" />
    </reference>
</controller_x_y>

Hi vọng điêu nay co ich.

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.