수색…


비고

테마로 핵심 기능 커스터마이징하기

테마에는 레이아웃 파일이 있는데, 다른 것들 중에서도 페이지에 나타나는 블록을 변경하는 데 사용할 수 있습니다. 블록 템플릿을 변경하고 다른 메소드를 호출 할 수도 있습니다.

상점 수준 디자인

Magento의 계층 적 구조화 테마는 저장소 테마에서 기본 테마를 확장하고 할당 할 수 있음을 의미합니다.

사용자 정의 테마 등록

테마는 세 가지 방법으로 구성 할 수 있습니다.

  1. Store> System> Configuration> Design 아래에 있습니다.
  2. 제한 시간에 따른 설계 변경 시스템> 설계.
  3. 테마 예외는 범주 및 제품 수준에서 설정할 수도 있습니다.

패키지 대 테마

패키지에는 여러 테마가 있습니다. 패키지의 각 테마는 패키지 내의 기본 테마를 상속합니다.

디자인 폴백

템플릿 파일 찾기를위한 테마 대체 절차는 다음과 같습니다.

  1. {패키지} / {테마}
  2. {패키지} / 기본값
  3. 기본 / 기본값

테마 대체 메커니즘에 디렉토리를 추가하려면 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()
);
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow