문제

나는 어느 순간 제품 미디어(사진 또는 비디오)가 포함된 뷰를 표시하는 CakePHP 애플리케이션을 가지고 있습니다. 플래그에 따라 비디오를 위협하거나 사진을 위협하는 다른 뷰를 포함할 수 있는지 알고 싶습니다.나는 이러한 "작은 보기"를 여러 가지 다른 목적으로 사용하고 싶으므로 재사용을 위해 케이크 구성 요소와 "같아야" 합니다.

Cake 컨벤션에 사용하기 위해 여러분이 제안한 것(그리고 raw를 사용하지 않음) include('') 명령)

도움이 되었습니까?

해결책

이것을 확인해보세요 링크 그리고 더 구체적으로 강요- 매뉴얼 페이지의 일부는 당신이 알아야 할 모든 것을 알려줄 것입니다.

다른 팁

누군가가 이 문제를 우연히 발견할 경우를 대비해 여기에 정보를 갖고 싶다면, CakePHP 버전에 따라 해결 방법이 다르다는 점을 기억하는 것이 중요합니다.

CakePHP 1.1의 경우

$this->renderElement('display', array('flag' => 'value'));

당신의 관점에서, 그리고 다음에는 /app/views/elements/ 당신은라는 파일을 만들 수 있습니다 display.thtml, 어디 $flag 전달하는 모든 값을 갖습니다.

CakePHP 1.2용

$this->element('display', array('flag' => 'value'));

당신의 관점에서, 그리고 다음에는 /app/views/elements/ 당신은라는 파일을 만들 수 있습니다 display.ctp, 어디 $flag 전달하는 모든 값을 갖습니다.


두 버전 모두에서 요소는 뷰가 액세스할 수 있는 모든 데이터와 전달된 모든 값에 액세스할 수 있습니다.게다가 누군가가 지적했듯이, requestAction() 옵션이기도 하지만 캐시를 사용하지 않고 수행할 경우 일반 작업이 수행하는 모든 단계를 거쳐야 하기 때문에 성능이 크게 저하될 수 있습니다.

컨트롤러(이 예에서는 포스트 컨트롤러)에서.

function something() {
    return $this->Post->find('all');
}

요소 디렉터리(app/views/element)에 post.ctp라는 파일을 만듭니다.

Posts.ctp에서:

$posts = $this->requestAction('posts/something'); 
foreach($posts as $post): 
    echo $post['Post']['title']; 
endforeach; 

그러면 당신의 견해로는:

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

이것은 대부분 CakePHP 책에서 따온 것입니다:requestAction을 사용하여 재사용 가능한 요소 만들기

나는 requestAction을 사용하는 것이 꽤 비용이 많이 든다고 생각하므로 캐싱을 조사하고 싶을 것입니다.

간단히 다음을 사용하세요:

<?php include('/<other_view>.ctp'); ?>

.ctp에서 귀하의 작업은 끝납니다.

예를 들어 보관된 함수를 빌드합니다.

function archived() {
  // do some stuff
  // you can even hook the index() function
  $myscope = array("archived = 1");
  $this->index($myscope);
  // coming back, so the archived view will be launched
  $this->set("is_archived", true); // e.g. use this in your index.ctp for customization
}

색인 작업을 조정할 수도 있습니다.

function index($scope = array()) {
  // ...
  $this->set(items, $this->paginate($scope));
}

귀하의 archive.ctp는 다음과 같습니다:

<?php include('/index.ctp'); ?>

컨트롤러 작업 및 뷰 코드의 이상적인 재사용.

CakePHP 2.x의 경우

Cake 2.x의 새로운 기능은 주어진 뷰를 확장하는 기능입니다.따라서 요소는 재사용 가능한 작은 코드를 갖는 데 적합하지만 뷰를 확장하면 전체 뷰를 재사용할 수 있습니다.

더 많은/더 나은 정보는 설명서를 참조하세요.

http://book.cakephp.org/2.0/en/views.html#extending-views

요소는 호출하는 뷰가 액세스할 수 있는 것과 동일한 데이터에 액세스할 수 있도록 하려는 경우 작동합니다.

내장된 뷰가 자체 데이터 세트에 액세스할 수 있도록 하려면 다음과 같은 것을 사용할 수 있습니다. requestAction().이를 통해 독립 실행형이었던 전체 보기를 포함할 수 있습니다.

나는 그 "작은 견해"를 다른 여러 목적으로 사용하고 싶기 때문에, 그것은 케이크 구성 요소와 같은 성서를 위해서야합니다.

이는 "도우미"를 사용하여 수행됩니다. 여기에 설명되어 있습니다.하지만 그것이 정말로 당신이 원하는 것인지는 잘 모르겠습니다."강요"라는 제안도 맞는 것 같습니다.이는 달성하려는 목표에 따라 크게 달라집니다.내 2센트...

CakePHP 3.x에서는 다음과 같이 간단하게 사용할 수 있습니다.

$this->render('view')

그러면 상위 뷰와 동일한 디렉터리에서 뷰가 렌더링됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top