Pergunta

Tenho uma aplicação CakePHP que em algum momento vai mostrar uma visão com a mídia do produto (fotos ou vídeos) Eu quero saber se existe alguma maneira de incluir uma outra visão que as ameaças do vídeo ou ameaças as imagens, dependendo de uma bandeira . Eu quero usar esses "pequenos pontos de vista" para vários outros fins, por isso deve ser "como" um componente de bolo, para reutilização.

O que vocês sugerem para usar para estar em convenções bolo (e não usando um comando de matéria-include(''))

Foi útil?

Solução

Confira este ligação e mais especificamente a elementos -parte de uma página do manual, deve dizer-lhe tudo o que você precisa saber

Outras dicas

No interesse de ter a informação aqui no caso de alguém se depara com isso, é importante notar que a solução varia dependendo da versão do CakePHP.

Para CakePHP 1.1

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

Na sua opinião, em seguida, em /app/views/elements/ você pode fazer um arquivo chamado display.thtml, onde $flag terá o valor de tudo o que passar para ele.

Para CakePHP 1.2

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

Na sua opinião, em seguida, em /app/views/elements/ você pode fazer um arquivo chamado display.ctp, onde $flag terá o valor de tudo o que passar para ele.


Em ambas as versões o elemento terá acesso a todos os dados da vista tem acesso a + quaisquer valores que você passa para ele. Além disso, como alguém salientou, requestAction() também é uma opção, mas pode ter um forte impacto no desempenho se for feito sem o uso de cache, uma vez que tem que passar por todas as etapas de uma ação normal faria.

Em seu controlador (neste exemplo, o controlador de mensagens).

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

No seu diretório elementos (app / views / elemento) criar um arquivo chamado posts.ctp.

Em posts.ctp:

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

Então, na sua opinião:

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

Isto é principalmente tomada do livro CakePHP aqui: Criando reutilizável Elements com requestAction

Eu acredito que o uso de requestAction é muito caro, então você vai querer olhar para o cache.

Basta usar:

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

no .ctp suas extremidades ação acima dentro.

Por exemplo, construir uma função arquivado

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
}

Possivelmente ajustar a sua ação de índice:

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

Seu archive.ctp será:

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

Ideal reutilização de código de ações do controlador e pontos de vista.

Para CakePHP 2.x

Novo para bolo 2.x é a capacidade de se estender um determinado ponto de vista. Assim, enquanto elementos são grandes para ter pequenos pedaços de código reutilizável, estendendo-se uma visão permite reutilizar vistas inteiras.

Consulte o manual para mais melhor informação /

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

Elementos trabalho, se você quer que eles tenham acesso aos mesmos dados que a visão chamada tem acesso a.

Se você quiser que o seu visão incorporada para ter acesso ao seu próprio conjunto de dados, você pode querer usar algo como requestAction() . Isso permite que você incorporar uma visão de pleno direito que de outra forma seria stand-alone.

Eu quero usar esses "pequenos pontos de vista" para vários outros fins, por isso deve ser "como" um componente de bolo, para reutilização.

Isto é feito com "ajudantes", como descrito aqui . Mas eu não tenho certeza se isso é realmente o que você quer. O " Elements " sugestão parece correto também. Ele depende muito do que você está tentando realizar. Meus dois centavos ...

Em CakePHP 3.x você pode usar simples:

$this->render('view')

Este irá processar a visão do mesmo diretório como vista principal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top