2012-07-31 44 views
11

Sau khi dò dẫm về lớp sau khi nhìn vào mã nguồn Magento: Mage_Core_Block_Template_Facade, tôi hoàn toàn không biết lớp này làm gì.Mục đích của Mage_Core_Block_Template_Facade

Rõ ràng là tôi đã xem xét nó và điều tra một chút nhưng điều đó không rõ ràng đối với tôi.

bất cứ ai có thể giải thích mục đích của nó trong cuộc sống và khi nó có thể là hữu ích để sử dụng

+0

Tôi đã cố gắng phân tích tất cả những điều đó một vài lần và tôi chưa bao giờ có thể hiểu được những gì nó có ở đó. Điều đó nói rằng, có một số bình luận về nó trong chủ đề bình luận này http://www.pulsestorm.net/nofrills-layout-chapter-five mà có thể có ý nghĩa với bạn (tôi không thể thực hiện theo những gì ông Masy đã về, nhưng nó có thể có ý nghĩa với bạn) –

+0

Im không chắc chắn những gì mà nhận xét đã nhận được tại :) - Tôi đã trả lời với những suy nghĩ của tôi trên khối mặt tiền. Có thể có lẽ đã giải thích nó tốt hơn một chút nhưng hy vọng nó được điểm qua –

+0

@DrewHunter Chỉ cần hướng Stephen về một nơi để bắt đầu nghiên cứu mọi thứ - nó không đáng để trả lời thực tế. –

Trả lời

42

Mage_Core_Block_Template_Facade, thực sự là khá đơn giản để hiểu. Nó ..

  • Cho phép một giá trị được đặt trên khối
  • Cho phép bố trí để xác định một thuộc tính/giá trị từ một đối tượng đăng ký để được đặt trên khối
  • Cho phép sự bình đẳng giữa hai giá trị trên được đánh giá

Về cơ bản, đây là điều làm cho Khối mặt tiền khác với các khối khác - tương tác với sổ đăng ký và so sánh khóa/giá trị đăng ký với khóa/giá trị khóa - tất cả từ bố cục xml.

Chỉ có một ví dụ về khối được sử dụng trong mã lõi ...

Nhìn trong catalog.xmlproduct/view.phtml bạn sẽ thấy container1container2 khối - họ đều giống hệt nhau, nhưng chỉ là một bao giờ được hiển thị trong kết quả cuối cùng.

Vậy tại sao cả hai đều ở đó? Điều này sẽ giải thích cách Mage_Core_Block_Template_Facade hoạt động.

Core đang sử dụng khối mặt tiền làm phương pháp cho phép vị trí chặn tùy chọn sản phẩm trong phạm vi product/view.phtml (không nằm trong bố cục, nhưng bên trong chính mẫu) có thể định cấu hình từ trong khu vực quản trị. Nếu bạn nhìn vào tab thiết kế trong khi chỉnh sửa sản phẩm, bạn sẽ thấy tùy chọn cuối cùng: "Hiển thị tùy chọn sản phẩm trong" - hai giá trị thả xuống tương quan từng khối container1 và container2 mà bạn có thể thấy trong catalog.xml và view.phtml . Cụ thể, tìm kiếm trong product/view.phtml bạn sẽ thấy vùng chứa1 và vùng chứa2 được định vị trong các div khác nhau.

Bố cục quyết định khối nào trong số các khối này sẽ hiển thị dựa trên giá trị được đặt trong "Hiển thị tùy chọn sản phẩm trong" bằng cách sử dụng khối mặt tiền.

Sau đây là cách nó hoạt động ...


Kiểm tra catalog.xml và bạn sẽ thấy:

<block type="core/template_facade" name="product.info.container1" as="container1"> 
    <action method="setDataByKey"><key>alias_in_layout</key><value>container1</value></action> 
    <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action> 
    <action method="append"><block>product.info.options.wrapper</block></action> 
    <action method="append"><block>product.info.options.wrapper.bottom</block></action> 
</block> 
<block type="core/template_facade" name="product.info.container2" as="container2"> 
    <action method="setDataByKey"><key>alias_in_layout</key><value>container2</value></action> 
    <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action> 
    <action method="append"><block>product.info.options.wrapper</block></action> 
    <action method="append"><block>product.info.options.wrapper.bottom</block></action> 
</block> 
<action method="unsetCallChild"><child>container1</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action> 
<action method="unsetCallChild"><child>container2</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action> 

setDataByKey

<action method="setDataByKey"><key>alias_in_layout</key><value>container1</value></action> 

này thiết lập một định danh cho khối này sẽ được đánh giá dựa vào đối tượng đăng ký. Trong ngữ cảnh của các thùng chứa tùy chọn, giá trị này sẽ phải khớp với một trong các giá trị thả xuống trong khu vực quản trị được đề cập trước đó.

setDataByKeyFromRegistry

<action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action> 

Cho khối "hey, khi chúng ta cần phải nhìn vào đối tượng sản phẩm trong registry và lấy giá trị của khóa options_container/thuộc tính". Akin tới: Mage::registry('product')->getData('options_container');

Chúng tôi hy vọng giá trị này là vùng chứa 1 hoặc vùng chứa 2 trong ví dụ cụ thể này.

ifEquals

Cuối cùng, ifEquals được gọi là kết hợp với unsetCallChild để loại bỏ các thùng chứa không được chọn ở khu vực admin.

sử dụng container1 là một ví dụ ...

<action method="unsetCallChild"><child>container1</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action> 

này gọi phương thức ifEquals vào đó dụ block, nếu giá trị trả về là 0 thì container1 sẽ unset và không trả lại.