Foros del Web » Programando para Internet » PHP »

Ayuda con Elements en CakePHP

Estas en el tema de Ayuda con Elements en CakePHP en el foro de PHP en Foros del Web. Hola a todos, ya no se si estoy haciendo algo mal, o lo que pretendo hacer no es posible, pero me está dando muchos dolores ...
  #1 (permalink)  
Antiguo 10/08/2010, 17:59
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4
Antigüedad: 17 años, 5 meses
Puntos: 0
Ayuda con Elements en CakePHP

Hola a todos, ya no se si estoy haciendo algo mal, o lo que pretendo hacer no es posible, pero me está dando muchos dolores de cabeza, si alguien me pudiera ayudar le estaría eternamente agradecido... Mi duda es la siguiente:

Yo tengo dos modelos(articulo.php,categoria.php), dos controladores(articulos_controller.php,categorias_ controller.php y una vista(default.ctp) en la cual muestro todo el codigo html con dos elements.

Lo que quiero hacer es cargar mediante la funcion $this->element() los elementos creados(categoria_elem.ctp,articulos_elem.ctp). Hasta aquí todo bien, me coge los datos de la base de datos correctamente, pero el problema viene a continuación:
cuando yo entro en "localhost/proyecto/categorias" me carga sólo las variables del "categoria_elem.ctp";
cuando entro en "localhost/proyecto/articulos" me carga sólo las variables del "articulo_elem.ctp";
y cuando entro en "localhost/proyecto/" no me carga ninguna variable;

¿Cómo puedo hacer para que se carguen los dos elementos en las 3 páginas?

Si no me he explicado bien no tengo ningún problema en explicarlo más detalladamente.

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 21/08/2010, 08:38
 
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

Etiquetas: cakephp, elementos, elements
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:37.