Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/08/2010, 08:38
supratux
 
Fecha de Ingreso: diciembre-2006
Mensajes: 19
Antigüedad: 17 años, 4 meses
Puntos: 1
Respuesta: Ayuda con Elements en CakePHP

Eso te ocurre porque al variar las rutas estás llamando a un controlador u otro, y por lo tanto a un modelo u otro.

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.

Te 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.
Código PHP:
<?php 
<h2>&#218;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.
Código PHP:
<?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 te ayude en algo.

Ah y una cosa muy importante los elementos tienen la posibilidad de usar el sistema de caché, puedes poner esto para que esté cacheado al menos una hora y tu sitio web vaya mucho más rápido:
Código PHP:
echo $this->element('latest_posts',array('cache'=>'+1 hour')); 
Venga un saludo.

Última edición por supratux; 21/08/2010 a las 08:45