magento
표현
수색…
비고
테마로 핵심 기능 커스터마이징하기
테마에는 레이아웃 파일이 있는데, 다른 것들 중에서도 페이지에 나타나는 블록을 변경하는 데 사용할 수 있습니다. 블록 템플릿을 변경하고 다른 메소드를 호출 할 수도 있습니다.
상점 수준 디자인
Magento의 계층 적 구조화 테마는 저장소 테마에서 기본 테마를 확장하고 할당 할 수 있음을 의미합니다.
사용자 정의 테마 등록
테마는 세 가지 방법으로 구성 할 수 있습니다.
- Store> System> Configuration> Design 아래에 있습니다.
- 제한 시간에 따른 설계 변경 시스템> 설계.
- 테마 예외는 범주 및 제품 수준에서 설정할 수도 있습니다.
패키지 대 테마
패키지에는 여러 테마가 있습니다. 패키지의 각 테마는 패키지 내의 기본 테마를 상속합니다.
디자인 폴백
템플릿 파일 찾기를위한 테마 대체 절차는 다음과 같습니다.
- {패키지} / {테마}
- {패키지} / 기본값
- 기본 / 기본값
테마 대체 메커니즘에 디렉토리를 추가하려면 Mage_Core_Model_Design_Package :: getFilename 메소드를 다시 작성해야합니다.
관리 영역의 폴백은 기본값 / 기본값입니다.
템플릿 및 레이아웃 경로
블록
블록은 출력에 사용됩니다. 루트 블록은 모든 블록의 부모이며 Mage_Page_Block_Html 유형입니다.
Mage_Core_Block_Template 블록은 템플릿 파일을 사용하여 콘텐츠를 렌더링합니다. 템플릿 파일 이름은 상대 경로와 함께 setTemplate () 또는 addData ( 'template') 내에 설정됩니다.
템플릿은 Mage_Core_Block_Template에 포함 된 PHP 조각 일뿐입니다. 따라서 $ this는 템플릿을 참조합니다.
Mage_Core_Block_Template은 템플릿을 포함하기 전에 버퍼를 사용하여 조기 출력을 방지합니다.
Mage_Core_Model_Layout :: createBlock 메소드는 블록의 인스턴스를 생성합니다.
Mage_Core_Model_Layout_Update 클래스는 레이아웃 핸들을보고 각 페이지에 대해 생성해야하는 블록을 고려합니다.
모든 출력 블록은 예를 들어 toHtml ()을 호출하여 렌더링되며, 차례로 자녀를 렌더링하도록 선택할 수 있습니다.
Text 및 Text_List 블록은 자동으로 내용을 렌더링합니다.
HTML 렌더링 전후에 블록을 수정하는 데 사용할 수있는 블록 렌더링과 관련된 두 가지 이벤트가 있습니다.
core_block_abstract_to_html_before core_block_abstract_to_html_after 자식 블록이 클래스 Mage_Core_Block_Textlist 인 경우에만 자동으로 렌더링됩니다. 그렇지 않으면 getChildHtml 메소드를 호출해야합니다.
Mage :: app () -> getLayout ()과 $ controller-> getLayout ()과 같은 레이아웃을 통해 블록 인스턴스에 액세스 할 수 있습니다. 블록 출력은 _toHtml () 함수에 의해 제어됩니다.
템플릿은 템플릿 블록 내에서 renderView () / fetchView () 메서드로 렌더링됩니다. $ layout-> setDirectOutput을 사용하면 출력 버퍼링을 비활성화 할 수 있습니다.
현재 레이아웃에 블록을 추가 할 수는 있지만 renderLayout () 메서드가 호출되기 전에 블록을 완료해야합니다.
레이아웃 XML
<reference>
-edit a block
<block>
- define a block
<action>
- call method on a block
<update>
- include nodes from another handle.
레이아웃 파일은 config.xml에 등록 할 수 있습니다.
<config>
<{area}>
<layout>
<updates>
<{name}>
<file>{filepath}</file>
</{name}>
</updates>
</layout>
</{area}>
</config>
페이지 출력은 다음과 같은 방법으로 사용자 정의 할 수 있습니다.
- 템플릿 변경
- 레이아웃 변경
- 블록 무시
- 관찰자 블록의 변수는 다음과 같은 방법으로 설정할 수 있습니다.
- 레이아웃 - 동작 또는 속성을 통해
- 컨트롤러 - $ this-getLayout () -> getBlock ()
- 자식 블록 - $ this-> getChild ()
- 기타 -Mage :: app () -> getLayout ()
헤드 블록 자산
JavaScript 및 CSS 자산은 Mage_Page_Block_Html_head 블록에서 처리됩니다. 이 블록은 에셋을 단일 파일로 병합하여 HTTP 요청을 최소화합니다. 병합 된 파일은 원본 파일의 편집 시간을 기반으로합니다.
CSS를 병합 할 때 Mage_Core_Model_Design_Package의 콜백 함수가 호출되어 @import 또는 url () 지시문을 올바른 URL로 업데이트합니다
블록 출력을 비활성화하는 다른 메커니즘
- 응답이 이미 생성되어 일반 렌더링 프로세스 외부의 응답 객체 (예 : 관찰자)에 설정된 경우 'no-renderLayout'플래그는 다음을 사용하여 액션 컨트롤러에서 설정할 수 있습니다.
Mage::app()->getFrontController()->getAction()->setFlag('','no-renderLayout');
- 이렇게하면
renderLayout()
이 출력 블록을 처리하지 못하게됩니다. - 프론트 컨트롤러에서 setNoRender (true)를 호출하여 동일한 결과를 얻을 수 있습니다.
Mage::app()->getFrontController()->setNoRender(true);
- 응답 객체에
isDispatched()
플래그를 설정하면 비슷한 효과를 얻는 것이 더 효율적일 수 있습니다.
블록의 다른 유형
- Mage_Core_Block_Template
- Mage_Core_Block_Text_List
- Mage_Core_Block_Messages
- Mage_Core_Block_Text_Tag
- Mage_Core_Block_Text
- Mage_Page_Block_Template_Links 모든 블록은 구조 블록 이거나 모든 블록은 구조 블록 또는 내용 블록입니다. 예:
- core / text_list
구조 블록의 예.
템플릿을 사용하지 않습니다. 단순히 모든 하위 블록의 내용을 하나씩 차례로 출력하는 데 사용됩니다.
- 코어 / 템플릿
내용 블록의 예.
이 유형의 블록의 출력은 할당 된 템플릿에 따라 다릅니다. 자식 블록은 템플릿 내에서 getChildHtml ( 'block_name') 메소드를 통해 출력됩니다. 예 : core / text_list - 구조 블록의 예. 템플릿을 사용하지 않습니다. 단순히 모든 하위 블록의 내용을 하나씩 차례로 출력하는 데 사용됩니다. core / template - 내용 블록의 예. 이 유형의 블록의 출력은 할당 된 템플릿에 따라 다릅니다. 자식 블록은 템플릿 내에서 getChildHtml ( 'block_name') 메서드를 통해 출력됩니다.
블록 인스턴스는 컨트롤러에서 액세스 할 수 있습니다.
액션 컨트롤러에서 :
$this->getLayout()->getBlock('head')->getTemplate();
/**
* Get specified tab grid
*/
public function gridOnlyAction()
{
$this->_initProduct();
$this->getResponse()->setBody(
$this->getLayout()->createBlock('adminhtml/catalog_product_edit_tab_' .
$this->getRequest()->gerParam('gridOnlyBlock')
)
->toHtml()
);
}