cakePHP: come combinare due o più viste di applicazioni in una pagina di layout cakePHP?

StackOverflow https://stackoverflow.com/questions/1749655

  •  20-09-2019
  •  | 
  •  

Domanda

utilizzando cakePHP il mio obiettivo è quello di coniugare la vista indice di due o più controller in un layout di pagina.

Esempio: Ho controllori per: news, eventi, link. Voglio mostrare gli ultimi cinque voci di ogni tabella in una pagina di layout. Inoltre, quando si seleziona uno dei link dalle viste dovrebbe portare l'utente alla rispettiva visualizzazione per quel record.

Ho letto attraverso la sezione libri sul ma non vedo come rendendo una vista in elemento sarebbe tale scopo.

La cosa che mi confonde è come combinare da tre Controller / viste separate in un unico layout?

Grazie

È stato utile?

Soluzione

Crea metodi nel tuo Notizie, eventi e modelli di collegamento per il recupero degli ultimi 5 dischi. Poi, nel vostro controller sia includere i modelli della controller :: utilizza proprietà o in uso ClassRegistry azione :: init () per ottenere l'accesso al modello, per es.

function my_action() {
  $news = ClassRegistry::init('News')->getRecent();
  $events = ClassRegistry::init('Event')->getRecent();
  $links = ClassRegistry::init('Link')->getRecent();
  $this->set(compact('news', 'events', 'links'));
}

È quindi possibile chiamare questi metodi modello da qualsiasi azione di controllo, mantenendo il vostro SECCO applicazione.

Secondo voi my_action.ctp, e in effetti molti altri punti di vista, solo rendono gli elementi per es.

// my_action.ctp
<?php
echo $this->element('recent_news');
echo $this->element('recent_events');
echo $this->element('recent_links');
?>

I tuoi elementi possono poi basta scorrere sopra il $ notizie (o altro) variabile che visualizza gli elementi con i link alle azioni 'vista' nei rispettivi controllori.

Solo perché un controller corrisponde a un modello, non significa che non è possibile utilizzare altri modelli in esso.

Altri suggerimenti

Per prima cosa vorrei dire che le opinioni ei controller non sono necessariamente legati tra loro - torta sarà implicitamente aggiungere la vista specificata dal file gerarchia / convenzione di denominazione, ma questo non deve necessariamente essere il caso. Quindi, cercare di pensare le viste come disaccoppiato dal controller (che è uno degli scopi principali per l'utilizzo l'architettura MVC).

Supponendo che i vostri tre punti di vista (A, B, C) sono esattamente come li volete copiare, li ha messi in un elemento (che è solo un file di vista si trova nella / views / elementi / directory speciale APP). Ora è possibile utilizzarli in entrambi i layout o altri punti di vista, semplicemente effettuando una chiamata a $ this-> elemento ( 'elementName', array ( 'opzioni')).

In sostanza, basta astratto il codice che si desidera visualizzare in elementi, quindi inserire quegli elementi nei layout desiderati.

È possibile impostare il controller per utilizzare il RequestHandler e poi fare gli elementi vista in grado di andare a prendere i propri dati dal controller separati nella vostra applicazione.

Questo legame lo spiega meglio di me http://bakery.cakephp.org/articles/view/ creando riutilizzabili-elementi-con-requestaction

Una cosa da tenere a mente è che le azioni di controllo che si sta chiamando dovrebbero rappresentare la memorizzazione nella cache i propri dati in modo da non fare le query di database non necessari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top