2010-02-25 4 views
2

컨트롤러 내에서 레이아웃의 $ scripts_for_layout을 설정하고 싶습니다. 가능합니까? 그렇다면 어떻게됩니까?

+1

왜이 작업을 원하십니까? 모든 액션에 포함 된 스크립트라면 레이아웃에 넣을 것입니다. 그것이 특정 행동에만있는 것이라면 나는 그것을 견해에 넣을 것입니다. –

+0

당신 말이 맞아요, 이해합니다 (아래의 설명에서 더 긴 mea culpa) – kaklon

답변

3

짧은 대답 : 아마도 잘못하고있는 것일 수 있습니다.

긴 대답 : 스크립트는 컨트롤러에 의존해서는 안됩니다. '이론적으로'잘못 됐어. 케이크는 mvc 패턴을 따르지 않는 사람들을 좋아하지 않는다.

해결 방법 (가끔은 그냥해야하기 때문에) : 당신은 VAR beforeRender에서 설정할 수 있습니다

function beforeRender() { 
    parent::beforeRender(); 
    $this->set('scripts', array('script1', 'script2' ...)); 
} 

그리고 레이아웃 검사에서

$를위한 스크립트를 추가 할 수 있습니다.

+0

당신이 그것을 말하는 것이므로, 나는 그것이 잘못하고있는 것을 이해합니다. 모든보기에서 스크립트가 필요 없으며 컨트롤러 파일을 사용하는 것이 더 명확 할 것이라고 생각했습니다. 따라서 편집 할 파일이 하나뿐입니다. – kaklon

+0

다른 레이아웃을 사용해도 좋을지도 모릅니다. 수년 동안 나는 그 케이크를 해보려 고 노력하는 모든 것이 나를 잘못되게 만들었거나 MVC를 따르지 않는다는 것을 알게되었습니다. 케이크도 훌륭하고 깨끗하고 구조화 된 코드를 작성해야하기 때문에 멋지다. –

1

케이크 1.2에서는 $this->set('script_for_layout', 'script here...)을 할 때이 변수를 $ scriptForLayout으로 변환하여 작동하지 않도록합니다.

Cake 1.3에서는이 문제가 해결되었지만 작동하는지 여부는 확인하지 않았지만 컨트롤러 수준에서 설정되지 않은보기 용 스크립트이기 때문에 MVC를 위반하는 것입니다. 동적 스크립트의 경우 이전 포스터에서 제안한 것처럼 뷰에 변수를 할당 할 수 있습니다.

1

저는 이것이 오래된 질문이라는 것을 압니다 만, 오늘도 똑같은 문제가있었습니다. 해결책은 여기에 언급 된 답변보다 쉽습니다. CakePHP 1.2 요리 책 :

인라인 : 블록을 인라인으로 인쇄할지 아니면 나중 출력 (예 : $ scripts_for_layout)을 위해 캐싱할지 지정합니다.

그래서보기에 당신은 다음과 같이 인라인가 거짓으로 설정 스크립트를 포함해야합니다

$javascript->link('script1', false) 

당신은 CSS에 대해 동일한 작업을 수행 할 수 있습니다

$html->css('stylesheet1', null, array(), false) 

주의 : 나는 이것을 CakePHP 1.2에서만 테스트했다. 그러나 1.3을위한 요리 책에 따르면, 그것은 같은 것이다.

관련 문제