• Aucun résultat trouvé

Utiliser des Blocks pour les Fichiers de Script et les CSS

Nouveau dans la version 2.1.

Les Blocks remplacent la variable de layout $scripts_for_layout qui est dépréciée. A la place, vous devrez utiliser les blocks.HtmlHelperlie dans les blocks de vues avec les méthodesscript(),css(), etmeta()qui chacune met à jour un block avec le même nom quand l’option inline = false est utilisée :

<?php

// dans votre fichier de vue

$this->Html->script('carousel', array('inline' => false));

$this->Html->css('carousel', array('inline' => false));

?>

// dans votre fichier de layout. <!DOCTYPE html>

<html lang="en"> <head>

<title><?php echo $this->fetch('title'); ?></title>

<?php echo $this->fetch('script'); ?> <?php echo $this->fetch('css'); ?>

</head>

// rest du layout suit

LeHtmlHelpervous permet aussi de contrôler vers quels blocks vont les scripts :

// dans votre vue

$this->Html->script('carousel', array('block' => 'scriptBottom')); // dans votre layout

echo $this->fetch('scriptBottom');

Layouts

Un layout contient le code de présentation qui entoure une vue. Tout ce que vous voulez voir dans toutes vos vues devra être placé dans un layout.

Le fichier de layout par défaut de CakePHP est placé dans /app/View/Layouts. Si vous voulez changer entière- ment le look de votre application, alors c’est le bon endroit pour commencer, parce que le code de vue de rendu du controller est placé à l’intérieur du layout par défaut quand la page est rendue.

Les autres fichiers de layout devront être placés dans /app/View/Layouts. Quand vous créez un layout, vous devez dire à CakePHP où placer la sortie pour vos vues. Pour ce faire, assurez-vous que votre layout contienne $this->fetch('content'). Voici un exemple de ce à quoi un layout pourrait ressembler :

<!DOCTYPE html> <html lang="en"> <head>

<title><?php echo $this->fetch('title'); ?></title>

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">

<!-- Include external files and scripts here (See HTML helper for more info.) --> echo $this->fetch('meta'); echo $this->fetch('css'); echo $this->fetch('script'); ?> </head> Layouts 79

<body>

<!-- Si vous voulez afficher une sorte de menu pour toutes vos vues, mettez le ici -->

<div id="header">

<div id="menu">...</div> </div>

<!-- Voilà l'endroit ou je souhaite que mes vues soient affichées -->

<?php echo $this->fetch('content'); ?>

<!-- Ajoute un footer sur chaque page affichée --> <div id="footer">...</div>

</body> </html>

Note : Avant la version 2.1, la méthode fetch() n’était pas disponible, fetch('content') remplace $content_for_layout et les lignes fetch('meta'), fetch('css') et fetch('script') étaient contenues dans la variable $scripts_for_layout dans la version 2.0.

Les blocks script, css et meta contiennent tout contenu défini dans les vues en utilisant le helper HTML intégré. Il est utile pour inclure les fichiers JavaScript et les CSS à partir des vues.

Note : Quand vous utilisez HtmlHelper::css() ou HtmlHelper::script() dans les fichiers de vues, spécifiez “false” dans l’option “inline” option pour placer la source html dans un block avec le même nom. (Regardez l’API pour plus de détails sur leur utilisation).

Le block content contient les contenus de la vue rendue.

$title_for_layoutcontient le titre de la page. Cette variable est générée automatiquement, mais vous pouvez la surcharger en la configurant dans votre controller/view.

Note : $title_for_layout est déprécié depuis 2.5, utilisez $this->fetch('title') dans votre layout et $this->assign('title', 'page title')à la place.

Vous pouvez créer autant de layouts que vous souhaitez : placez les juste dans le répertoire app/View/Layouts, et passez de l’un à l’autre depuis les actions de votre controller en utilisant la propriété$layoutde votre controller ou de votre vue :

// A partir d'un controller public function admin_view() {

// stuff

$this->layout = 'admin'; }

// A partir d'un fichier de vue

$this->layout = 'loggedin';

Par exemple, si une section de mon site incorpore un plus petit espace pour une bannière publicitaire, je peux créer un nouveau layout avec le plus petit espace de publicité et le spécifier comme un layout pour toutes les actions du controller en utilisant quelque chose comme :

class UsersController extends AppController { public function view_active() {

$this->set('title_for_layout', 'Voir les Utilisateurs actifs');

$this->layout = 'default_small_ad'; }

public function view_image() {

$this->layout = 'image';

//sort une image de l\'utilisateur }

}

CakePHP dispose de deux fonctionnalités de layout dans le coeur (en plus du layout default de CakePHP) que vous pouvez utiliser dans votre propre application : “ajax” et “flash”. Le layout AJAX est pratique pour élaborer des réponses AJAX - c’est un layout vide (la plupart des appels ajax ne nécessitent qu’un peu de balise en retour, et pas une interface de rendu complète). Le layout flash est utilisé pour les messages montrés par la méthodeController::flash(). Trois autres layouts, xml, js, et rss, existent dans le coeur permettant de servir rapidement et facilement du contenu qui n’est pas du text/html.