Frage

Ich habe eine CakePHP-Anwendung, die einen Blick in irgendeinem Moment mit Produkt Medien (Bilder oder Videos) wird zeigen, was ich wissen will, ob es irgendwie ist eine andere Ansicht zu schließen, dass das Video oder Bedrohungen Bedrohungen die Bilder, auf eine Flagge abhängig . Ich will diese „kleine Ansichten“ auf mehrere andere Zwecke verwenden, so sollte es „wie“ ein Kuchen Komponente, für die Wiederverwendung sein.

Was euch vorschlagen, in Kuchen Konventionen zu bedienen (und nicht einen rohen include('')-Befehl)

War es hilfreich?

Lösung

Sehen Sie sich diese Link und insbesondere die Elemente -Teil dieser Handbuchseite, sollte Ihnen sagen, alles, was Sie wissen müssen,

Andere Tipps

Im Interesse der mit den Informationen hier, falls jemand auf dies stolpert, ist es wichtig zu beachten, dass die Lösung in Abhängigkeit von der CakePHP Version ändert.

Für CakePHP 1.1

$this->renderElement('display', array('flag' => 'value'));

in der Ansicht und dann in /app/views/elements/ können Sie eine Datei mit dem Namen display.thtml machen, wo $flag den Wert hat, was auch immer Sie es passieren.

Für CakePHP 1.2

$this->element('display', array('flag' => 'value'));

in der Ansicht und dann in /app/views/elements/ können Sie eine Datei mit dem Namen display.ctp machen, wo $flag den Wert haben von was auch immer Sie es passieren.


In beiden Versionen wird das Element hat Zugriff auf alle Daten die Ansicht, hat Zugriff auf + beliebigen Werte Sie es passieren. Ferner kann, wie jemand darauf hingewiesen, ist requestAction() auch eine Option, aber es kann einen hohen Tribut in der Leistung nehmen, wenn ohne Cache getan, da es sich durch alle Schritte, eine normale Aktion würde gehen.

In Ihrem Controller (in diesem Beispiel der Beiträge Controller).

function something() {
    return $this->Post->find('all');
}

Ihre Elemente Verzeichnis (app / views / Element) erstellen eine Datei namens posts.ctp.

In posts.ctp:

$posts = $this->requestAction('posts/something'); 
foreach($posts as $post): 
    echo $post['Post']['title']; 
endforeach; 

Dann in Ihrer Ansicht:

<?php echo $this->element('posts'); ?>

Dies ist vor allem aus dem CakePHP Buch hier genommen: Erstellung wiederverwendbarer Elemente mit request

Ich glaube, dass mit request recht teuer, so dass Sie in Caching aussehen sollen.

Verwenden Sie einfach:

<?php include('/<other_view>.ctp'); ?>

in der .ctp Ihre Aktion endet in.

Zum Beispiel baut eine archivierte Funktion

function archived() {
  // do some stuff
  // you can even hook the index() function
  $myscope = array("archived = 1");
  $this->index($myscope);
  // coming back, so the archived view will be launched
  $this->set("is_archived", true); // e.g. use this in your index.ctp for customization
}

Möglicherweise Zeige Aktion einstellen:

function index($scope = array()) {
  // ...
  $this->set(items, $this->paginate($scope));
}

Ihre archive.ctp werden sein:

<?php include('/index.ctp'); ?>

Ideal Wiederverwendung von Code von Controller-Aktionen und Ansichten.

Für CakePHP 2.x

Neu für Kuchen 2.x ist die Grund-Fähigkeit eine bestimmte Ansicht zu erweitern. Während also die Elemente sind für kleine Stücke von wieder verwendbaren Code, einer Ansicht erstrecken können Sie ganze Ansichten wiederzuverwenden.

Sehen Sie das Handbuch für mehr / bessere Informationen

http://book.cakephp.org/2.0/en/ views.html # verlauf-Ansichten

Elemente funktionieren, wenn Sie sie Zugriff auf die gleichen Daten haben wollen, dass die anrufende Ansicht Zugriff hat.

Wenn Sie Ihre eingebettete Ansicht wollen Zugriff auf seinen eigenen Satz von Daten haben, könnte man so etwas wie requestAction() . Dies ermöglicht Ihnen eine vollwertige Ansicht einzubetten, die sonst stand-alone wäre.

  

Ich will diese „kleine Ansichten“ verwenden, um   mehrere andere Zwecke, so sollte es   sein „wie“ ein Kuchen Komponente,   Wiedernutzbarmachung.

Dies wird mit "Helfer" getan, wie beschrieben hier . Aber ich bin nicht sicher, ob das wirklich das, was Sie wollen. Der " Element " Vorschlag scheint zu korrigieren. Es hängt stark von dem, was Sie erreichen wollen. Meine zwei Cents ...

In CakePHP 3.x können Sie einfach verwenden:

$this->render('view')

Dies wird die Ansicht aus dem gleichen Verzeichnis wie Elternansicht machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top