2012-04-25 3 views
2

간단한 CMS 앱을 작성하여 CakePHP를 배우려고하는데 잘 진행되고 있지만 더 많이 추가하면서 MVC 구조에 다소 혼란스러워집니다.CakePHP : 재사용 가능한 콘텐츠 블록과 MVC

내 게시물 외에도 내 사이트의 다른 페이지에 요소로 표시하려는 '콘텐츠 블록'(기본적으로 관리자가 편집 가능한 제목 및 콘텐츠 필드)에 대한 간단한 모델을 만들었습니다.

설명하는 데 도움하려면

내 포스트 컨트롤러는 블로그의 모든 게시물을 나열하는 인덱스 작용을 가지고있다. 그 작업에 대한보기에서 나는 또한 데이터베이스에서 특정 '콘텐츠 블록'을 가져 와서 페이지 맨 위에 표시하려고합니다.

또 다른 예는 모든 페이지의 꼬리말에 표시되는 admin-editable 'about'광고 메시지입니다.

마지막으로는, 워드 프레스 텍스트 위젯 또는 젠토 정적 블록에 비슷한 방식으로, 내가 직접 액세스 할 수있는 '콘텐츠 블록'을 방지하고 싶습니다

(즉 domain.com/content_blocks/view/id)

무엇 CakePHP와 MVC 컨벤션에 그대로 머무르는 동안 이것을 달성하기위한 이상적인 방법입니까? 필자는 요소에 requestAction을 사용하는 것과 같이 여러 번 찌르다가 더 혼란 스러울뿐입니다.

답변

1

URL을 통해 직접 액세스 할 수 없으므로 요소 내부에서 요청 동작을 제안하면됩니다.

응용 프로그램 /보기/요소/block.ctp : 그래서 당신은 요소 폴더 안에 뷰 만들 것

<?php $sidebar = $this->requestAction(array(
    'controller' => 'ContentBlocks', 
    'action'=> 'viewBlock', 
    'yourtitle' 
)); 
// layout your block here 
?> 

응용 프로그램/컨트롤러/ContentBlocksController.php을

다음
public function viewBlock($title) { 
    return $this->ContentBlock->findByTitle($title); 
} 

당신은 볼 수 있습니다 요소 및 requestAction을 사용하여 캐싱을 수행하는 방법에 대한이 게시물 :

또한 체크 아웃을 원할 수도 있습니다. 여기에는 많은 기능이 포함되어 있습니다. 왕은 이미 내장되어 있습니다 : http://croogo.org/

+0

답장을 보내 주셔서 감사합니다. 마침내 작동했습니다! 링크 된 블로그 게시물은 requestAction 오버 헤드를 약간 명확하게 해줍니다. 그것은 특별히 캐싱을 언급하지 않습니다 - 나는 그것을'array ('cache'=> true)'요소 함수에 사용하고 있다고 가정합니까? – Viento

+0

예, 요소를 캐시하는 코드입니다. 이 기사에서는 캐시 된 요소로 전환하여 성능을 향상시키는 것에 대해 언급했습니다. 캐시 할 기간에 사용할 수있는 옵션은 다음과 같습니다. http://book.cakephp.org/2.0/ko/core-libraries/caching.html – jimiyash