viernes, 16 de marzo de 2012

Pasar datos a un element en CakePHP

Los elementos son módulos independientes que ubicamos en nuestro layout y se usan para reutilizar una porción de nuestro sitio web que se muestra mucho.

Voy a poner un ejemplo de como un elemento llama a un controlador para obtener unos datos el truco está en usar la función requestAction:

En nuestro elemento "latest_posts.ctp" debemos hacer una llamada mediante la función requestAction a una acción del controlador que queramos.

<?php

<h2>Últimos posts</h2>

<?php $posts = $this->requestAction(array('controller'=>'posts','action'=>'latest')) ?>

<ol>

<?php foreach($posts as $post): ?>

<li>

<?php echo $html->link($post['Post']['title'],array('controller'=>'posts','action'=>'view',$post['Post']['id'])) ?>

</li>

<?php endforeach; ?>

</ol>


En nuestro controlador "posts_controller.php" analizamos si hubo una petición de este tipo "requestAction" y le retornamos los datos, OJO no se lo pasamos a la vista con $this->set() como estamos acostumbrados sino que se los retornamos.

<?php

class PostsController extends AppController

{
public $name = 'Posts';

// últimos posts (para el elemento latest_posts)

public function latest()

{
// Si la petición fue realizada por medio de requestAction

if(isset($this->params['requested'])) {

return $this->Post->find(

'all',

array(

'order' => 'Post.created DESC',

'limit' => 5
)

);

}
}


Espero que os ayude en algo.

Ah y una cosa muy importante los elementos tienen la posibilidad de usar el sistema de caché, podéis poner esto para que esté cacheado al menos una hora y vuestro sitio web vaya mucho más rápido:

echo $this->element('latest_posts',array('cache'=>'+1 hour'));


Venga un saludo.

No hay comentarios:

Publicar un comentario