2010-12-06 7 views
2

에 바닥 글, 헤더와 사이드 메뉴를 포함하는 현재 내 심포니 응용 프로그램에서 나는 모듈 헤더 다음 바닥 글 같은 템플릿 내 헤더 섹션을 처리 할 수있는 헤더 구성 요소, 가장 좋은 방법은 심포니

이는 IS를 생성 갈 가장 좋은 방법은?

또한 일부 섹션에 포함되어있는 사이드 메뉴를 어떻게 처리해야할지 모르겠다. 내 범주 모듈의 구성 요소 사이드 메뉴를 만들고이를 사용하려면 슬롯을 사용해야합니까?

답변

2

아마도 부분적인 것이 아마도 가장 좋은 방법 일 것입니다.

레이아웃에 드롭하려는 항목이 일부 작업에만 표시되고 모두는 표시되지 않는 경우 슬롯이 정말 유용합니다.

머리글과 바닥 글 모두에 대해 모듈을 만들었다 고하셨습니다. 나는 각각의 애플리케이션 템플릿 폴더에 부분적으로 생성하는 것을 선호한다.

/apps 
    /yourapp 
    /templates 
     _header.php 
     _footer.php 
     layout.php 

범주 사이드 바는 구성 요소처럼 들리 겠지만 그것은 당신이 모든 페이지에 표시된 동일한 구성 요소를 원하거나 다른 페이지에 (모든 경우) 표시되는 내용 사이드 바 제어 할 수 있는지 여부 따라 어떻게 구현한다.

모든 페이지에서 동일한 구성 요소를 원할 경우 layout.php 파일 내에 구성 요소 (include_component 포함) 만 포함하면됩니다. 보다 세부적인 제어를 원할 경우 구성 요 소에서 표시해야하는 각 동작의 템플리트를 포함하십시오.

사이드 바에 대한보다 복잡한 해결책은 특정 속성이 설정된 경우 레이아웃에서 포함시키는 것입니다. 그렇게 당신은 actions.class.php :

public function preExecute() 
{ 
    $this->getRequest()->setAttribute('show_categories_sidebar', true); 
} 

을 그럼 당신은 layout.php에서 :

호기심에서
<?php if ($sf_request->hasAttribute('show_categories_sidebar')): ?> 
    <div id="sidebar"> 
    <?php include_component('category', 'sidebar') ?> 
    </div> 
<?php endif; ?> 
+0

심포니 (symfony) 문서에서 읽은 내용 중 일부를 캐시 할 수없는 이유는 무엇입니까? –

1

저는 일반적으로 머리말과 꼬리말 부분 또는 구성 요소를 기본 모듈에 넣습니다. 그런 다음 슬롯을 통해 레이아웃에 포함시켜 다른 작업에 무시하거나 비활성화 할 수 있습니다. 그래서 간단한 레이아웃은 다음과 같습니다

<body> 
    <?php if (has_slot('header')): ?> 
    <?php include_slot('header') ?> 
    <?php else: ?> 
    <?php include_component('default', 'header') ?> 
    <?php endif ?> 
    <?php echo $sf_content ?> 
    <?php if (has_slot('footer')): ?> 
    <?php include_slot('footer') ?> 
    <?php else: ?> 
    <?php include_partial('default/footer') ?> 
    <?php endif ?> 
</body> 

이제 액션/템플릿으로 당에 머리글/바닥 글을 무시할뿐만 아니라, false로 슬롯을 설정하여이를 완전히 비활성화 할 수있는 능력을 가지고있다. 사이드 메뉴에는 비슷한 원리가 사용될 수 있습니다.

+0

, 왜 머리글과 바닥 글에 대한 다른 블록 (구성 요소 VS에 대해 서로 다른 코드가 있습니까 부분)? –

+0

두 가지 다른 방법을 보여 주기만하면됩니다. 컨트롤러 레이어에 속한 작업을 수행해야하는 경우에만 구성 요소를 사용합니다. –