Di chuyển khối Breadcrumb hoàn toàn thông qua local.xml


7

Tôi muốn di chuyển khối bánh mì hoàn toàn bằng cách sử dụng local.xml.

Nó cần được chuyển từ vị trí mặc định của nó sang khối nội dung ở đâu đó để tôi xuất ra.

Thông thường khi di chuyển các khối tôi sẽ unsetChildvà sau đó insert, tuy nhiên, điều này làm cho khối bánh mì xuất hiện hai lần và cũng không thực sự di chuyển nó đi bất cứ đâu.

<reference name="root">
    <action method="unsetChild"><name>breadcrumbs</name></action>
    <reference name="content">
        <action method="insert"><child>breadcrumbs</child></action>
    </reference>
</reference>

Câu trả lời:


8

Đây là một bài tập tốt - một cơ hội tốt để học hỏi. Vì di chuyển XML bố cục trong Magento 1 thực sự là một hoạt động tổng hợp (hủy bỏ từ cha mẹ ban đầu, thêm vào cha mẹ mới), việc gỡ lỗi yêu cầu kiểm tra cả hai điều kiện.

Các insertrõ ràng làm việc, như bạn đang nhìn thấy breadcrumbs chặn hai lần. Điều đó có nghĩa là unsetChildcuộc gọi không hoạt động. Điều này gần như luôn luôn là kết quả của một trong hai điều: bí danh con không chính xác hoặc tham chiếu cha mẹ không chính xác. Trong trường hợp của bạn, nó là cái sau. Đây là kết quả của một chủ đề tùy chỉnh (không phải CE); ví dụ: chủ đề doanh nghiệp / mặc định khai báo khối Breadcrumbs trong một core/text_listkhối có tên Breadcrumbs.container .

Ngoài ra, các thẻ tham chiếu không nên được lồng nhau. Chúng sẽ hoạt động khi được lồng, nhưng cho rằng chúng hoạt động theo danh sách khối toàn cầu theo tên, điều đó là không cần thiết.


1
Tôi không chắc chắn nó đơn giản như thế này. Tôi đang sử dụng magento CE và đã tạo ra một chủ đề. Chủ đề này chỉ kế thừa từ chủ đề CE cơ sở. Tôi đã lấy thư mục bố cục cơ sở cho Breadcrumb và trường hợp duy nhất là nơi nó được khai báo trong page.xml là name = "Breadcrumbs" as = "Breadcrumbs". Vì vậy, tôi đang tham khảo các khối chính xác. Ngoài ra, unset đang hoạt động bởi vì, nếu tôi không chèn thì các mẩu bánh mì biến mất. Nhưng sử dụng chèn chèn nó hai lần. Hơn nữa, nó không thực sự đưa nó vào trong khối nội dung, mà vẫn ở bên trong root
Marty Wallace

Điều đáng chú ý là vấn đề chỉ xảy ra nếu tôi chèn khối vào khối 'nội dung'. Tôi đang làm điều này trên một trang danh mục và nếu tôi chèn vào sản phẩm_list chẳng hạn, thì nó hoạt động tốt. Chỉ có một vấn đề với khối nội dung.
Marty Wallace

1

Trên thực tế, mẩu bánh mì không thể được di chuyển qua XML vì nó có chú thích trong các mẫu gốc. Ví dụ:

        <div class="main-container col1-layout">
        <div class="main">
            <?php echo $this->getChildHtml('breadcrumbs') ?>
            <div class="col-main">
                <?php echo $this->getChildHtml('global_messages') ?>
                <?php echo $this->getChildHtml('content') ?>
            </div>
        </div>
    </div>

1
Đó không phải là một vấn đề, nếu đứa trẻ không tồn tại, $this->getChildHtml()sẽ trả về một chuỗi trống.
Fabian Schmengler

0

Hãy thử chỉ thêm nó mà không cần tham chiếu lồng nhau:

<default>
    <reference name="root">
        <action method="unsetChild"><name>breadcrumbs</name></action>
    </reference>
    <reference name="content">
        <action method="insert"><child>breadcrumbs</child></action>
    </reference>
</default>

hoặc là:

<default>
    <reference name="root">
        <action method="unsetChild"><name>breadcrumbs</name></action>
    </reference>
    <reference name="content">
        <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs" template="page/html/breadcrumbs.phtml" />
    </reference>
</default>

Sau đó gọi khối "Breadcrumbs" trong tệp mẫu của bạn.


Không, điều đó không tạo ra sự khác biệt đối với hành vi
Marty Wallace

0

Có thể blcok bánh mì có thể đã được đặt thành tên khác hoặc trình xử lý khác vì vậy ngay cả khi bạn chèn nó theo mặc định, nó không di chuyển. bạn cần xác định nó trong trình xử lý cụ thể

<handler>
    <reference name="root">
        <action method="unsetChild"><name>breadcrumbs</name></action>
    </reference>
    <reference name="content">
        <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs" template="page/html/breadcrumbs.phtml" />
    </reference>
</handler>
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.