Pregunta

Tengo una aplicación CakePHP que en algún momento mostrará una vista con los medios del producto (imágenes o videos). Quiero saber si hay alguna forma de incluir otra vista que amenace el video o las imágenes, dependiendo de una bandera.Quiero usar esas "pequeñas vistas" para otros propósitos, por lo que debería ser "como" un componente de pastel, para su reutilización.

Lo que ustedes sugieren usar para estar en las convenciones de Cake (y no usar un raw include('') dominio)

¿Fue útil?

Solución

Mira esto enlace y más específicamente el Elementos-parte de esa página del manual, debería decirle todo lo que necesita saber

Otros consejos

Con el fin de tener la información aquí en caso de que alguien se tope con esto, es importante tener en cuenta que la solución varía según la versión de CakePHP.

Para CakePHP 1.1

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

en su opinión, y luego en /app/views/elements/ puedes crear un archivo llamado display.thtml, dónde $flag tendrá el valor de lo que le pases.

Para CakePHP 1.2

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

en su opinión, y luego en /app/views/elements/ puedes crear un archivo llamado display.ctp, dónde $flag tendrá el valor de lo que le pases.


En ambas versiones, el elemento tendrá acceso a todos los datos a los que tiene acceso la vista + cualquier valor que le pase.Además, como alguien señaló, requestAction() También es una opción, pero puede afectar mucho el rendimiento si se hace sin utilizar el caché, ya que tiene que seguir todos los pasos que seguiría una acción normal.

En su controlador (en este ejemplo, el controlador de publicaciones).

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

En su directorio de elementos (app/views/element), cree un archivo llamado posts.ctp.

En publicaciones.ctp:

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

Entonces en tu opinión:

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

Esto está tomado principalmente del libro de CakePHP aquí:Creando elementos reutilizables con requestAction

Creo que usar requestAction es bastante costoso, por lo que querrás considerar el almacenamiento en caché.

Simplemente use:

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

en el .ctp termina tu acción.

Por ejemplo, cree una función archivada.

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
}

Posiblemente ajuste su acción de índice:

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

Su archivo.ctp será:

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

Reutilización ideal del código de acciones y vistas del controlador.

Para CakePHP 2.x

Lo nuevo de Cake 2.x es la capacidad de ampliar una vista determinada.Entonces, si bien los elementos son excelentes para tener pequeños fragmentos de código reutilizable, ampliar una vista le permite reutilizar vistas completas.

Consulte el manual para obtener más/mejor información.

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

Los elementos funcionan si desea que tengan acceso a los mismos datos a los que tiene acceso la vista de llamada.

Si desea que su vista incrustada tenga acceso a su propio conjunto de datos, es posible que desee utilizar algo como requestAction().Esto le permite incorporar una vista completa que de otro modo sería independiente.

Quiero usar esas "vistas pequeñas" para varios otros fines, por lo que debería ser "como" un componente de pastel, para la reutilización.

Esto se hace con "Ayudantes", como descrito aquí.Pero no estoy seguro de que eso sea realmente lo que quieres.El "Elementos"La sugerencia también parece correcta.Depende en gran medida de lo que estés tratando de lograr.Mis dos centavos...

En CakePHP 3.x puedes usar simplemente:

$this->render('view')

Esto generará la vista desde el mismo directorio que la vista principal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top