왜 젠토 1.9.2"loadLayout"시작을 로드 제품입니까?
-
13-12-2019 - |
문제
누군가가 왜 젠토를 좋아하는 제품을 로드되는 경우 요청을 로드 레이아웃?
나는 그냥 산책을 통해 어떤 젠토 코드에서 1.9.2.나는 서 면으로 컨트롤러 그냥:loadLayout en renderLayout.그래서 나는 것을 문질러서 나는 바꿀 수 있 블록 사이의 두 가지 기능이 있지만,그것을 밝혀지 않는 경우는 대부분의'코어'블록입니다.예를 들어 이 블록에서 채우는 HTML 헤더를 수행하는 경우를 말한다:"loadLayout".
누군가에 경험이 있는 블록을 제거하는 이미'변화'글로벌 젠토 world?
예를 들어:Mage_Catalog_Block_Product_View
/**
* Retrieve current product model
*
* @return Mage_Catalog_Model_Product
*/
public function getProduct()
{
if (!Mage::registry('product') && $this->getProductId()) {
$product = Mage::getModel('catalog/product')->load($this->getProductId());
Mage::register('product', $product);
}
return Mage::registry('product');
}
/**
* Add meta information from product to head block
*
* @return Mage_Catalog_Block_Product_View
*/
protected function _prepareLayout()
{
$this->getLayout()->createBlock('catalog/breadcrumbs');
$headBlock = $this->getLayout()->getBlock('head');
if ($headBlock) {
$product = $this->getProduct();
$title = $product->getMetaTitle();
if ($title) {
$headBlock->setTitle($title);
}
$keyword = $product->getMetaKeyword();
$currentCategory = Mage::registry('current_category');
if ($keyword) {
$headBlock->setKeywords($keyword);
} elseif ($currentCategory) {
$headBlock->setKeywords($product->getName());
}
$description = $product->getMetaDescription();
if ($description) {
$headBlock->setDescription( ($description) );
} else {
$headBlock->setDescription(Mage::helper('core/string')->substr($product->getDescription(), 0, 255));
}
if ($this->helper('catalog/product')->canUseCanonicalTag()) {
$params = array('_ignore_category' => true);
$headBlock->addLinkRel('canonical', $product->getUrlModel()->getUrl($product, $params));
}
}
return parent::_prepareLayout();
}
이것은 나의 테스트:
<?php
include_once('../initMage.php');
initMage();
$controller = initController('Gn_Test_IndexController');
$product = Mage::getModel('catalog/product')->load(1);
Mage::register('product', $product);
$controller->loadLayout();
해결책
설명에서 이득을 넘어서는 싱글 스택 교환 답변,레이아웃 시스템을 채울 수 있는 작은 책이(고 썼는 예약).
에서 짧은 경우에는 전화 loadLayout
당신이 말하고 젠토
- 모든 병 레이아웃 XML 파일을 업데이트(
app/design/area/theme/layout
)하나로 나무 - 을 찾아의 특정 부분에 있는 나무를 사용하여 이를 요청
- 사람의 특정 부분에 트리를 결정을 막는 객체를 인스턴스화,그리고 다음 차단 인스턴스화체
그것은 마지막 부분 3 위는 던지고-당신 때 젠토 인스턴스화하는 블록을 통해 레이아웃은 전화 _construct
고 _prepareLayout
에 차단합니다.이러한 방법을 자주 할 것을 로드하는 제품 컬렉션입니다.
를 완료하는,위의를 호출할 때 renderLayout
당신이 말하고 Magento"call 뿌리 블록 toHtml
방법을 렌더링하는 뿌리 블록 phtml
템플릿으로 계곡을 다른 블록 phtml
템플릿을 통해 getChildHtml
(이것은 또한 때로는 트리거에 직접 인스턴스화 및 렌더링 기타 블록 개체)
누군가에 경험이 있는 블록을 제거하는 이미'변화'글로벌 젠토 world?
일반적으로,당신 아 하고 싶지 않다.다른 블록 코드에 의존 할 수 있는 상태를 찾을 변경하고 제거하는 원인이 될 수 있습 치명적인 오류가 있습니다.
는 경우 말 필요하다면 나는 모습으로 다음과 같은 이벤트
controller_action_layout_load_before
controller_action_layout_generate_xml_before
controller_action_layout_generate_blocks_before
다음은 직접 수정의 레이아웃 및/또는 레이아웃 업데이트 객체(에서 전달에서 관찰자)의 제거하는 XML 에 대한 책임을 만들고 싶은 블록을 제거합니다.