2014-05-22 4 views
1

cakephp. 내 사이트의 메뉴 시스템을 만들고 싶었습니다. 컨트롤러 출력보기를 전체 사이트에 표시 할 여지가 있습니까? 이 같은 내 컨트롤러 :cakephp의 모든 페이지에 컨트롤러의 출력을 표시합니다.

<?php 
App::uses('AppController', 'Controller'); 

class MenusController extends AppController { 

// I want to show all avilable controller in my application 
public $components = array('ControllerList'); 

public function index() {  
     $this->set('menus', $this->ControllerList->getList()); 
    }  
} 

그리고 내보기 : 당신이 가지고있는 옵션의

foreach ($dataForView['menus'] as $key => $val) { 

     if ($val['name'] == 'Menus') { 
      unset($val['name']); 
      unset($val['actions']); 
      } 
     else { 
      echo '<li class="dropdown">'; 
      echo "<a href='#' class='dropdown-toggle' data-toggle='dropdown'>".$val['name'].'<b class="caret"></b></a>' ; 

      echo '<ul class="dropdown-menu">'; 

     foreach ($val['actions'] as $key => $value) { 
      echo '<li><a href="#">'. $value .'</a></li>'; 
      if ($value == 'add') { 
      break; 
      } 
     } 
    echo "</li></ul>"; 
    } 

    } 

답변

2

하나는 ControllerListAppControllerbeforeFilter 방법에 menus 속성을 설정 AppController 및 의 구성 요소를 확인하는 것입니다.

예 :

CakePHP Controller Callbacks docs here

class AppController extends Controller { 

    var $components = array(
     'ControllerList'  
    ); 

    public function beforeFilter() { 
     $this->set('menus', $this->ControllerList->getList()); 
    } 
} 
당신이 요소로 메뉴를 만들고 레이아웃에서 한 번을 포함해야 뷰에 관해서.

예 :

app/View/Element/main_menu.ctp: 

foreach ($dataForView['menus'] as $key => $val) { 
... // your code here 
} 

그리고 당신은 당신의 레이아웃이 포함됩니다 (예를 들어, 응용 프로그램 /보기/레이아웃/default.ctp) 답장을 보내

<?php echo $this->element('main_menu'); ?> 

CakePHP Element docs here

+0

감사합니다 .. 나는 그것을 시도하고 알릴 것이다. 또 하나의 제안 .. 내 모델 이름이나 컨트롤러 이름으로 $ dataForView를 어떻게 바꿀 수 있습니까? – jibon57

+0

정말 고마워요. 100 % 일하고 있어요 :). 하지만 $ dataForView에서 데이터가 전송되는 이유를 설명해 주시겠습니까? – jibon57

+0

죄송합니다. 정확히 알고 싶은 것을 이해하지 못합니다. –

관련 문제