2011-08-10 2 views
1

동적으로 컨텐츠를 내 모달에로드하고 종종 내 사이트에서 이미 일반적으로 액세스 할 수있는 페이지입니다.CakePHP - 모달 레이아웃을 갖는 방법

컨트롤러/액션을 재사용하고 모달로로드 할 수 있기를 원하지만 분명히 컨트롤러가 이미 레이아웃을 사용하고 있습니다. 따라서 모달에 페이지를로드 할 때 내 사이트의 머리글과 바닥 글은 모달에 다시 있습니다. 나는 원하지 않습니다.


하나 개의 솔루션 나는 그것이 작동 할 수 있습니다 생각하지만, 더러운 해결 방법처럼 보인다, 나의의 AppController에이 페이지에 대한 모달 호출 (아닌 일반 전화 말한다 URL 매개 변수에 대한 검사를하는 것입니다). 그런 다음 특수 모달 글꼴로 레이아웃을 재정의합니다. 그래서 난 내 일반 레이아웃의 CSS 모두를 다시 정의 할 필요는 없습니다

// modal_layout.css 

@import url("normal_layout.css"); 

.header, .footer {display:none;} 

하지만 난 그냥 부분을 숨길 수 :

//app_controller.php 

public function beforeRender() { 
    if (isset($this->params['passed']['_modal'])) { 
     $this->layout = 'modal'; 
    } 
} 

// In my jQuery call to open the modal: 

myModal.load('users/view/5/_modal').dialog('open'); 

그런 다음 modal.ctp 레이아웃에 내가 좋아하는 뭔가를 보이는 스타일 시트를 포함 할 것 나는 보여주고 싶지 않아.

이 작업은 다소 어리석은 방법으로 보입니다. 작동하는지는 확실치 않지만, CakePHP를 사용하기 전에 반드시해야 할 일이 있습니다.

답변

0

그것은 그렇게 복잡한 것이 필요하지 않습니다.

<div id="modal"></div> 

그리고 내 레이아웃의 기존 CSS에서 내가 페이지가 모달에로드 할 때보고 싶지 않은 요소를 숨기기 위해 특정 규칙을 추가 :

를 단순히 내 레이아웃에 숨겨진 DIV를 생성
#header, #footer {display:none;} 

그런 식으로 페이지를 모달에로드 할 수 있지만 이미 레이아웃 CSS에 정의 된 모든 일반 스타일이 있습니다. 페이지는 정상 CakePHP의 URL을 사용하여 모달로로드됩니다 : 당신이 당신의 모달 대화 상자의 내용이 단순히 다음과 같은 추가해야 할 행동의보기 단순히 만족하려면

$('#modal').load('controller/action/param:whatever').dialog('open'); 
0

요소를 만들 수 있습니다.

$('#myModal').load("<?=url('users/view/5/_modal')?>", {type:'post'}, function(){ 
      $('#myModal').dialog({title:'open',autoOpen:false, modal:false, height:600, width:700}); 
      $('#myModal').dialog('open'); 
     }); 

function view($my_customer_id, action) { 
//do stuff here 
$this->render(DS.'elements'.DS.'users'.DS.'modal'); 
} 
0

아약스 요청을 감지하기위한 RequestHandler를 사용하십시오. 당신의 행동 끝에이 줄을 넣으십시오.

if ($this->RequestHandler->isAjax())$this->render('view_name','ajax'); 
+0

그런데보기가없는 Ajax 요청 일지라도 레이아웃,보기, CSS, JS 등을 요청하지 않겠습니까? – BadHorsie

0

을 상기 컨트롤러의 행동의 상단 :

$this->layout = null; 

이 뷰의 레이아웃과 모든 출력 내용 {html로} 비활성화됩니다 이제

+0

네,하지만 내 레이아웃에는 내보기의 내용이 멋지게 보이도록 스타일 시트가 포함되어 있습니다. 그 스타일 시트를 사용하면 그 페이지를 방문 할 때 평상시처럼 볼 수 있습니다. – BadHorsie

+0

충분히 좋습니다. 다른 레이아웃을 설정하는 트릭을 할 것입니다.단순히보기 자체에서 CSS를 참조 할 수도 있습니다. –

2
if ($this->request->is('ajax')) { 
    $this->layout = 'ajax';    
} 

당신은 당신의 레이아웃/ajax.ctp를 구성 할 수 있습니다 네가 원해.

관련 문제