Question

J'ai une application CakePHP qui, à un moment donné, affiche une vue avec le support du produit (photos ou vidéos). Je veux savoir s'il existe une autre manière d'inclure une autre vue qui menace la vidéo ou les images, en fonction du drapeau . Je souhaite utiliser ces " petites vues " à plusieurs autres fins, il devrait donc être "comme" & un composant de gâteau, pour la réutilisation.

Ce que vous suggérez d'utiliser comme convention de gâteau (sans utiliser une commande include brute ('') )

Était-ce utile?

La solution

Découvrez ce lien . et plus particulièrement la élément de cette page de manuel, devrait vous indiquer tout ce que vous devez savoir

.

Autres conseils

Dans l'intérêt de disposer des informations ici au cas où quelqu'un tomberait dessus, il est important de noter que la solution varie en fonction de la version de CakePHP.

Pour CakePHP 1.1

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

dans votre vue, puis dans / app / views / elements / , vous pouvez créer un fichier nommé display.thtml , où $ flag aura la valeur de tout ce que vous lui passerez.

Pour CakePHP 1.2

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

dans votre vue, puis dans / app / views / elements / , vous pouvez créer un fichier nommé display.ctp , où $ flag aura la valeur de tout ce que vous lui transmettez.


Dans les deux versions, l'élément aura accès à toutes les données auxquelles la vue a accès + à toutes les valeurs que vous lui transmettez. En outre, comme quelqu'un l'a fait remarquer, requestAction () est également une option, mais ses performances peuvent être lourdes de conséquences si elle est exécutée sans utiliser de cache, car elle doit suivre toutes les étapes qu'une action normale .

Dans votre contrôleur (dans cet exemple, le contrôleur posts).

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

Dans votre répertoire elements (app / views / element), créez un fichier nommé posts.ctp.

Dans posts.ctp:

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

Ensuite, dans votre vue:

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

Ceci est principalement tiré du livre de CakePHP ici: Création d'éléments réutilisables avec requestAction

Je pense que l’utilisation de requestAction est assez coûteuse, vous voudrez donc vous pencher sur la mise en cache.

Utilisez simplement:

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

dans le .ctp votre action se termine dans.

Par exemple, créez une fonction archivée

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
}

Ajustez éventuellement votre action d'indexation:

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

Votre archive.ctp sera:

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

Réutilisation idéale du code des actions et des vues du contrôleur.

Pour CakePHP 2.x

Nouveau pour Cake 2.x est l’aptitude à étendre une vue donnée. Ainsi, alors que les éléments sont parfaits pour avoir un peu de code réutilisable, l’extension d’une vue vous permet de réutiliser des vues entières.

Voir le manuel pour plus / meilleures informations

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

Les éléments fonctionnent si vous souhaitez qu’ils aient accès aux mêmes données que la vue appelante.

Si vous souhaitez que votre vue intégrée ait accès à son propre ensemble de données, vous pouvez utiliser quelque chose comme requestAction () . Cela vous permet d'intégrer une vue complète qui serait autrement autonome.

  

Je souhaite utiliser ces "petites vues". à   plusieurs autres fins, il devrait donc   être " like " une composante de gâteau, pour   réutilisation.

C’est fait avec "Helpers", comme décrit ici . Mais je ne suis pas sûr que ce soit vraiment ce que tu veux. Le " Eléments " la suggestion semble correcte aussi. Cela dépend fortement de ce que vous essayez d'accomplir. Mes deux cents ...

Dans CakePHP 3.x, vous pouvez utiliser simplement:

$this->render('view')

Ceci rendra la vue à partir du même répertoire que la vue parent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top