2012-01-18 1 views
17

Tôi muốn biết sự khác biệt giữa hai hàm này. Tôi hiểu hành vi của getChildHtml(). Nó trả về html của khối hoặc tất cả các khối nếu bạn không chuyển bất kỳ tham số nào. Và tôi có thể thấysự khác biệt giữa getChildHtml() và getChildChildHtml() trong Magento

getChildHtml($name, $useCache, $sorted) 
getChildChildHtml($name, $childName,$useCache, $sorted) 

ngay từ cái nhìn đầu tiên I a $ useCache param mà tôi cho là sử dụng bộ nhớ cache.

Trả lời

41

Hãy nói rằng bạn đang ở phtml file template khối rễ, và bạn có một cấu trúc khối đơn giản mà trông như thế này

root 
    left 
     promo_top 
     navigation 
     promo_bottom 
    center 
    right 

Từ mẫu tập tin khối rễ, để in các khối còn lại bạn muốn sử dụng getChildHtml.

echo $this->getChildHtml('left'); 

Tuy nhiên, nếu vì một lý do bạn muốn in khối promo_top trong mẫu gốc, bạn sẽ phải làm một cái gì đó giống như

$left = $this->getChildBlock('left') 
echo $left->getChildHtml('promo_top') 

Phương pháp getChildChildHtml này cho phép bạn làm loại điều này trong một cuộc gọi phương thức đơn giản. Một lần nữa, từ mẫu gốc

echo $this->getChildChildHtml('left','promo_top'); 

Vì vậy, ngữ nghĩa là

  1. Nhận Khối Child của tôi với tên X
  2. Sau đó, có được khối đứa trẻ với Y
  3. Render HTML

Nếu bạn nhìn vào mã nguồn bạn có thể thấy, u ltimately, phương pháp này chỉ kết thúc cuộc gọi đến getChildHtml

#File: app/code/core/Mage/Core/Block/Abstract.php 
public function getChildChildHtml($name, $childName = '', $useCache = true, $sorted = false) 
{ 
    if (empty($name)) { 
     return ''; 
    } 
    $child = $this->getChild($name); 
    if (!$child) { 
     return ''; 
    } 
    return $child->getChildHtml($childName, $useCache, $sorted); 
} 
+2

rất hữu ích cho tôi, cảm ơn Alan – davidselo

+1

Giải thích tuyệt vời. Cảm ơn Alan. – RIK