Bonjour, J'essaie de placer le script javascript d'une page après celui du layout car ce dernier est en fait le lien de jquery (classique). Le problème est que mon propre script est toujours affiché avant celui du layout et du coup ne marche pas puisque c'est du jquery lancé avant la bibliothèque jquery. J'ai bien mis ce code au layout [code]<?php echo $this->Html->script('jquery', array('inline'=>false)) ; echo $this->Html->script('bootstrap', array('inline'=>false)); ?> <?php echo $this->fetch('script'); ?> /code] et celui-ci dans la vue : [code]<?php echo $this->start('script');?><?php $this->Html->script('validate') ; ?> <?php $this->end(); ?> [/code] j'ai tout esseyé la deuxième ligne dessus avec et sans echo, l'option 'block'=>'script, inline true et false j'ai toujours le meme resultat sur la page c'est à dire ce code là : [code]<script type="text/javascript" src="/js/validate.js"></script><script type="text/javascript" src="/js/jquery.js"></script>[/code] alors que moi je veux que jquery soit chargé en premier a partir du layout ET ENSUITE mon code dans validate.js (ou ecrit en code brut sur le view) a partir du view... Merci de m'aider sur ce petit souci qui m'empeche d'avancer (et le chemin est long)...

3 réponses


Un simple: <?php $this->start('script', array('inline' => false)); ?>

Bonjour.
Votre code est faux.
C'est :

<?php $this->Html->scriptStart('validate', array('inline' => false)); ?>
<!-- code JavaScript -->
<?php $this->Html->scriptEnd(); ?>

Sauf que si tu ne mets pas de code javascript supplémentaire à l'intérieur, il est inutile de faire un scriptStart , mais plutôt un simple :

<?php $this->Html->script('validate', array('inline' => false)); ?>

Une petite remarque, il est inutile de faire un inline false dans ton layout, si l'appel des script est déjà dans le bloc de script voulu.
Faire un inline false de script dans ton layout alors que l'appel est juste avant ton fetch script , c'est superflu.
Ou alors, si tu as bien ton fetch script en bas de ton layout, tu fais tes inline false de script dans le head , ce qui t'éviterait d'aller en bas du layout pour y ajouter des scripts supplémentaires.
Par contre évitez d'ajouter dans le layout des fichiers javascript qui se chargent en permanence, s'ils ne sont pas nécessaire, il vaut mieux les ajouter au cas par cas lorsqu'ils sont utilisé via le inline false depuis vos vues.

Perso je fais comme çà

Layouts/default.ctp

<!-- Javascripts -->
    <?php
    echo $this->Html->script(array(
        'http://code.jquery.com/jquery-git.js',
        'http://code.jquery.com/ui/1.10.3/jquery-ui.js',    
        )   
    );
    echo $this->fetch('script'); // ici viendront les scripts définis dans la vue
    echo $this->Html->script('dernier-script.js');
    ?>
</body>
</html>

Dans ta vue

<?php
        $this->Html->script(array('script1','script2'), array('inline'=>false));
    ?>