Welcome to the Cookbook

loading...

3.10.3.1 Passing Variables into an Element

El texto original ha cambiado despues que la traduccion. Por favor ayundanos a reslover este differencia. Puedes:

Mas info sobre traduciones

Puedes pasarle datos a un elemento usando el segundo argumento de element():

<?php echo
$this->element('helpbox', 
    array("helptext" => "Oh, this text is very helpful."));
?>
  1. <?php echo
  2. $this->element('helpbox',
  3. array("helptext" => "Oh, this text is very helpful."));
  4. ?>

Dentro del archivo del elemento, todas las variables pasadas estan disponibles como miembros del array de parámetros (de la misma manera que set() en el controlador funciona con los archivos de las vistas). En el ejemplo siguiente, el archivo /app/views/elements/helpbox.ctp puede usar la variable $helptext.

<?php
echo $helptext; //outputs "Oh, this text is very helpful."
?>
  1. <?php
  2. echo $helptext; //outputs "Oh, this text is very helpful."
  3. ?>

La función element() combina opciones para el elemento con los datos a pasar en element. Las dos opciones son 'cache' y 'plugin'. Un ejemplo:

<?php echo
$this->element('helpbox', 
    array(
        "helptext" => "Esto es pasado al elemento como $helptext"
        "foobar" => "Esto es pasado al elemento como $foobar"
        "cache" => "+2 days" //setea el 'cacheo' a +2 días.
        "plugin" => "" //para renderizar un elemento desde un plugin
    )
);
?>
  1. <?php echo
  2. $this->element('helpbox',
  3. array(
  4. "helptext" => "Esto es pasado al elemento como $helptext"
  5. "foobar" => "Esto es pasado al elemento como $foobar"
  6. "cache" => "+2 days" //setea el 'cacheo' a +2 días.
  7. "plugin" => "" //para renderizar un elemento desde un plugin
  8. )
  9. );
  10. ?>

Para tener en cache distintas versiones del mismo elemento en una aplicación, provee una clave única de cache usando el siguiente formato:

<?php
$this->element('helpbox',
    array(
        "cache" => array('time'=> "+7 days",'key'=>'unique value')
    )
);
?>
  1. <?php
  2. $this->element('helpbox',
  3. array(
  4. "cache" => array('time'=> "+7 days",'key'=>'unique value')
  5. )
  6. );
  7. ?>

Puedes aprovechar bien los elementos usando requestAction(). La función requestAction() trae las variables desde una acción de controlador y las retorna como un array. Esto permite que tus elementos cumplan con el diseño MVC. Crea una acción de controlador que prepare las variables de la vista para tus elementos, luego haz la llamada requestAction() dentro del segundo parámetro de element() para proveerle al elemento las variables de vista desde tu controlador.

Para hacer esto, en tu controlador añade algo como lo siguiente, para el ejemplo de Post.

<?php
class PostsController extends AppController {
    ...
    function index() {
        $posts = $this->paginate();
        if (isset($this->params['requested'])) {
            return $posts;
        } else {
            $this->set(compact('posts'));
        }
    }
}
?>
  1. <?php
  2. class PostsController extends AppController {
  3. ...
  4. function index() {
  5. $posts = $this->paginate();
  6. if (isset($this->params['requested'])) {
  7. return $posts;
  8. } else {
  9. $this->set(compact('posts'));
  10. }
  11. }
  12. }
  13. ?>

Ahora en el elemento podemos acceder el modelo de posts paginados. Para tener los últimos cinco posts en una lista ordenada deberíamos hacer lo siguiente:

<h2>Latest Posts</h2>
<?php $posts = $this->requestAction('posts/index/sort:created/order:asc/limit:5'); ?>
<?php foreach($posts as $post): ?>
<ol>
    <li><?php echo $post['Post']['title']; ?></li>
</ol>
<?php endforeach; ?>
  1. <h2>Latest Posts</h2>
  2. <?php $posts = $this->requestAction('posts/index/sort:created/order:asc/limit:5'); ?>
  3. <?php foreach($posts as $post): ?>
  4. <ol>
  5. <li><?php echo $post['Post']['title']; ?></li>
  6. </ol>
  7. <?php endforeach; ?>