Cách / cách tiếp cận chính xác để sửa đổi mẫu Magento là gì?


15

Vui lòng gợi ý cho tôi cách tiếp cận phù hợp, tôi muốn tùy chỉnh trang "EMAIL to Friend" thành cửa sổ bật lên, khi người dùng nhấp vào nút (gửi email sản phẩm này). Bằng cách kích hoạt gợi ý mẫu, tôi phát hiện ra rằng nút được hiển thị với

frontend / rwd / default / template / catalog / sản phẩm / view / Sharing.phtml

Và tệp bố cục tương ứng là catalog.xml(ở frontend / rwd / default / layout)

Vì vậy, tôi đã tạo một local.xmlthư mục trong cùng một thư mục catalog.xmltồn tại với đoạn mã sau (chỉ là tôi đã đưa ra test.phtmlthay vì sharing.phtml, chỉ để 'Gỡ lỗi')

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

Nhưng không có gì xảy ra, ý tôi là làm thế nào tôi có thể thay đổi (ghi đè) thiết kế mặc định của chủ đề, mà không sửa đổi các tệp xmlphtmltệp hiện có ?

Câu trả lời:


10

Đây là những gì bạn nên đặt trong local.xmltập tin của bạn .

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

Những sai lầm mà bạn đã làm

  • Bạn đã sử dụng hai tay cầm cập nhật bố trí : defaultcatalog-product-view. Điều đó là sai. Bạn chỉ cần một xử lý cập nhật bố trí. Cái đúng mà bạn nên sử dụng ở đây làcatalog_product_view

  • Vì vậy, catalog-product-viewkhông biết cho magento. Tên thích hợp làcatalog_product_view

  • Vì khối chia sẻ đã được xác định thông qua catalog.xml, bây giờ bạn cần tham chiếu khối đó và sau đó thay đổi mẫu bằng cách thêm hành động setTemplate. Đó là những gì các kịch bản trên làm.

Hy vọng bạn có được ý tưởng


Tôi đã sử dụng tệp local.xml của bạn, nó vẫn hiển thị tệp hiện có (tôi đã tạo một test.phtml) trong thư mục được chỉ định
Dimag Kharab

bạn đã xóa bộ nhớ cache của bạn? điều này được cho là hoạt động, nếu bạn đã làm mọi thứ chính xác.
Rajeev K Tomy

bộ nhớ đệm yup bị vô hiệu hóa trong trường hợp của tôi và tôi cũng đã giới thiệu lại (tôi đoán nó không cần thiết)
Dimag Kharab

thêm điều này <reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>trực tiếp dưới nút <catalog_product_view>. và xem liệu nội dung tệp test.phtml có sẵn ở phần dưới cùng của trang xem sản phẩm hay không
Rajeev K Tomy

Không có may mắn bro vẫn còn
Dimag Kharab

10

Tôi sẽ cố gắng đưa ra một câu trả lời chung chung.

Cách thay đổi mẫu

Trong chủ đề của bạn, bạn có thể ghi đè bất kỳ phtmltệp nào từ chủ đề mặc định hoặc chủ đề gốc. Sao chép tệp gốc vào app/design/frontend/[package]/[theme]/template/[path/to/phtml]và thực hiện các thay đổi của bạn.

Nếu bạn chưa có chủ đề tùy chỉnh cụ thể cho dự án, ví dụ vì bạn vừa mua một chủ đề, hãy đảm bảo tạo một chủ đề tại

app/design/frontend/[original-package]/[project-name]

Nó sẽ kế thừa từ [original-package]/[default], bạn không cần phải sao chép mọi thứ từ mặc định, chỉ là các tệp mà bạn cần thực hiện thay đổi.

Thay đổi cụ thể mô-đun

Một cách khác để ghi đè phtmltệp, là thay đổi đường dẫn mẫu. Điều này thường có thể được thực hiện trong bố cục XML như thế này:

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

Nhưng điều này được dự định sẽ được sử dụng bởi các mô-đun, những người cần chuyển đổi một mẫu, không phải cho các thay đổi cụ thể của chủ đề. Các mẫu mới nên được trong base/defaultđó.

Cách sử dụng local.xml / theme.xml

Các local.xmltập tin phải nằm trong danh mục các chủ đề thực tế mà bạn đang sử dụng, ví dụ:

app/design/frontend/[package]/[theme]/layout

Nhiều local.xmltệp trong hệ thống phân cấp dự phòng không được tính đến. Cái đầu tiên có thể được tìm thấy, được sử dụng:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(giả sử phân cấp mặc định và không có phân cấp được xác định tùy chỉnh)

Cách thay đổi

Bạn chỉ nên có các sửa đổi trong local.xml, không lặp lại các định nghĩa đã có trong các tệp XML gốc. Điều đó cũng có nghĩa là, tránh sao chép các tệp XML từ chủ đề mặc định để thay đổi trực tiếp trong các tệp. Giữ thư mục của chủ đề của bạn layoutsạch sẽ!

Các yếu tố điển hình local.xml<remove>loại bỏ hoàn toàn các khối hiện có <action method="unsetChild"><action method="append">để di chuyển một khối từ cha mẹ này sang cha mẹ khác hoặc gọi bất kỳ phương thức nào khác trên các khối hiện có để sửa đổi hành vi của chúng.

Magento 1.9

Bắt đầu với Magento 1.9, thực tế tốt nhất là không sử dụng layout/local.xmlcho những thay đổi này, nhưngetc/theme.xml

Nói tóm lại, bạn có thể thêm một bản cập nhật bố cục trong app / design / frontend / yourpackage / etc / theme.xml. Ưu điểm là bạn có quyền kiểm soát thứ tự tải của các cập nhật bố cục của bạn. Trước khi Magento 1.9 local.xml luôn được tải lần cuối và không thể thực hiện các chỉ thị bố cục sau nó.

Tôi không sử dụng local.xml nữa để sửa đổi chủ đề dành riêng cho dự án. Tôi nghĩ local.xml chỉ được sử dụng vì lý do tương thích ngược (trong 1.9 trở lên) vì không còn sử dụng nó nữa. Local.xml cũng bị loại bỏ trong Magento 2 ( https://github.com/magento/magento2/issues/1037 ).

Nguồn: https://erfanimani.com/dont-use-local-xml/

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.