2013-10-24 3 views
0

내가 여기이 질문을 호출 할 작업에 대한 확신했지만 내 문제입니다. 이 목적을 위해 나는 정적 메뉴 라인에 바인딩 된 다른 카테고리가 많이 있습니다.CakePHP의 정적 데이터 수집

이제 웹샵의 위치에 관계없이 categories을 볼 수 있습니다.

모두 database에 저장되고 기본 레이아웃으로 반복됩니다 (즉, 새 카테고리를 추가하면 자동으로 메뉴 라인에 추가됩니다).

내 질문은 내 응용 프로그램에 관계없이 이러한 범주를 모두 가져와야하기 때문에 어떻게 수집합니까?

내가 생각할 수있는 유일한 방법은 각각 controller에 수집하여 $_SESSION 변수로 설정 한 다음 변수가 설정되어 있는지 확인하는 것입니다.

다른 방법이 있어야한다는 것을 알고 있지만 어떻게해야합니까?

임 또한 내 응용 프로그램의 메뉴가 "care"은 당신이있는 컨트롤러 나 액션입니다. 범주가 actions 전에로드되어야한다는 것을 의미하지 않는 것을 의미한다 Layouts->default.ctp

에 들렸다되어 CakePHP 2.4

를 사용하여

+0

항상 정확한 CakePHP의 버전을 언급 해주십시오 설정! 또한 왜/적절한 세션으로 데이터를 저장하는 것이 좋습니다 것이라고 생각하십니까? 이 질문에 답하기 위해 사람들이 알아야 할 응용 프로그램 구조에 특별한 것이 있습니까? 레이아웃, 뷰 및/또는 요소에서 데이터에 액세스 할 수 있어야합니다. 그렇습니까? – ndm

+0

@ndm 업데이트 내 질문 –

답변

1

마치 beforeFilter() 콜백을 찾고있는 것처럼 들리 네요. 기본 컨트롤러 (대부분 AppController)에 정의하고 범주를보기 변수로 설정하면 기본 컨트롤러를 확장하는 컨트롤러의 모든 레이아웃에서 데이터를 사용할 수 있습니다. 레이아웃은 단순히 $categories의 존재를 확인하고 당신이해야 할 무엇이든 할 수에서

... 

class AppController extends Controller 
{ 
    ... 

    public $uses = array 
    (
     'Category' 
    ); 

    public function beforeFilter() 
    { 
     parent::beforeFilter(); 

     $this->set('categories', $this->Category->find('all')); 
    } 

    ... 
} 

:

는 여기 모습 수 있는지의 추상적 인 예입니다.

if(isset($categories)) 
{ 
    // show the category menu 
} 
+0

정확히 내가 생각했던 방식이지만 그것을 할 수 있다고 확신하지 못했습니다 고마워요! –

0

나는이 방법으로 $ 범주를해야합니다이 구성 요소를 사용하는 모든 컨트롤러를이

class CategoryLoaderComponent extends Component { 

    public function beforeRender($controller) 
    { 
     parent::beforeRender($controller); 
     $controller->loadModel('Category'); 
     $categories = $controller->Category->find('list'); 
     $controller->set('categories', $categories); 
    } 

} 

같은 적절한 구성 요소를 만들 것이다 변수 자동으로