2010-12-13 44 views
6

Có thể vô hiệu hóa một tuyên bố <remove name="left"> được định nghĩa trong tệp .xml bố cục mặc định, từ tệp local.xml không? Ví dụ, trong checkout.xml trong phần <checkout_cart_index>, câu lệnh <remove name="left"/> được định nghĩa ở đó, nhưng bạn có thể vô hiệu hóa dòng đó khỏi tệp local.xml, vì vậy bạn vẫn thấy menu bên trái trên trang thanh toán không?Làm thế nào để vô hiệu hóa một tuyên bố loại bỏ từ local.xml trong Magento

Trả lời

12

Theo mặc định, Magento không cung cấp thẻ <unremove /> cho tệp cục bộ. Tuy nhiên, hệ thống Bố cục chứa các sự kiện phù hợp, do đó bạn có thể tự thực hiện điều này. Và bởi "bản thân", tôi có nghĩa là tôi đã created an experimental extension thêm thẻ như vậy. Phản hồi được hoan nghênh.

+3

Cảm ơn bạn Alan. Tiện ích của bạn tuyệt vời và hoạt động mà không gặp bất kỳ sự cố nào ở đây. Chính xác những gì tôi đang tìm kiếm! –

1

câu trả lời của bạn không phải là để vô hiệu hóa việc loại bỏ nhưng để thêm một lần nữa trong local.xml bạn

+0

Bạn có thể cho tôi ví dụ về cách thêm lại khối đã xóa không? –

+0

tìm hiểu ứng dụng/thiết kế/lối vào/cơ sở/mặc định/bố cục/page.xml trên dòng 78 và xem cách thêm –

+0

Hmm, có vẻ như không hoạt động, tôi thêm khối 'trái' vào tham chiếu đến gốc, như trong trang.xml, và không có gì xuất hiện, ngay cả sau khi xác định rõ ràng một khối khác bên trong khối bên trái, giống như khối bản tin, tôi đang làm gì sai? –

-3

Thay vì cố gắng để tái tạo lại toàn bộ các khối, bình luận phương thức remove bên trong XML gốc. Đây sẽ là ít đau đầu bảo trì hơn là cố gắng để tái tạo lại các khối và lo lắng về việc ưu tiên của các tập tin XML vv

Rẽ này

<remove name="left" /> 

Into

<!-- disabling remove because X --> 
<!-- <remove name="left" /> --> 
+0

Bạn sẽ phải chỉnh sửa các tập tin Magento Core cho giải pháp này, đó không bao giờ là một ý tưởng hay. Bạn không thể cập nhật hệ thống của mình khi bạn đã thay đổi các tệp Core. – Handfeger

2

Khi một khối là loại bỏ nó không bị phá hủy, chỉ bị bỏ qua. Bạn có thể 'kích hoạt lại' nó với:

<checkout_cart_index> 
    <reference name="root"> 
     <action method="append"><block>left</block></action> 
    </reference> 
</checkout_cart_index> 

Tôi chưa bao giờ sử dụng bản thân mình và không muốn, nếu bạn đang tạo chủ đề tùy chỉnh rồi sao chép tệp bố cục cơ sở và chỉnh sửa chúng trực tiếp giống như các câu trả lời khác đề xuất.

+2

Thật không may điều này dường như không hoạt động. Nó sẽ là một giải pháp hoàn hảo nếu nó đã làm. –

+0

Thật không may. Nó không hoạt động. Bất kỳ giải pháp nào khác theo cách này kể từ thời điểm đó? – DarkCowboy

+0

Yup. Đây là một câu trả lời rất cũ và nếu nó đã từng làm việc nó chắc chắn không còn nữa. – clockworkgeek

5

Hai cách tôi làm điều này là;

  1. Sử dụng plugin tuyệt vời của Alan Storm ở trên.

  2. Hãy chèn lại khối đã xóa trong tệp local.xml với thuộc tính tên mới nhưng cùng một thuộc tính hoặc thuộc tính 'as'.

Tên thuộc tính cần phải được khác nhau vì Magento <remove name="foo" /> là toàn cầu - nó loại bỏ tất cả các trường của <block name="foo" /> ngay cả khi chúng được bổ sung sau khi hướng dẫn loại bỏ. Để thêm lại cột bên trái, ví dụ;

<reference name="root"> 
    <block name="left.2" as="left" type="core/text_list"> 
    <!-- New left column is empty, so you'll need to add your left-column blocks into it here. --> 
    </block> 
</reference> 

name = "left.2" có nghĩa là hành động loại bỏ sẽ không giết khối này, như = "left" có nghĩa là nó sẽ vẫn được chèn vào template của bạn thông qua <?php echo $this->getChildHtml('left') ?>.

Rất tiếc, cột trái vừa được chèn của bạn trống. Vì vậy, bạn sẽ phải chèn lại bất kỳ khối trong đó mà bạn muốn hiển thị là tốt. Làm cho plugin của Alan Storm trở nên hữu ích hơn, tôi nghĩ vậy.

+0

+ phương pháp 2 làm việc cho tôi. –

Các vấn đề liên quan