5 votes

CakePHP 2 $this->Html->script commande

J'essaie d'insérer des fichiers JS dans la vue, mais ils sont insérés dans le mauvais ordre.

Dans mon default.ctp j'ai ceci

$this->Html->script(array(
    'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
    'global'
), array('inline'=>false));

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

A mon avis, j'ai ceci :

$this->Html->script('jquery.fancybox.pack', array('inline' => false));

Mais quand je regarde la source, ça donne ça :

<script type="text/javascript" src="/js/jquery.fancybox.pack.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="/js/global.js">

Ce qui est manifestement un mauvais ordre et le plugin jQuery ne fonctionne pas.

Qu'est-ce que je fais de mal ?

6voto

jeremyharris Points 5924

En général, je fais écho aux scripts nécessaires dans la mise en page (au lieu de les ajouter au tampon), puis bloc scripts (scripts tamponnés) après. Cela garantit que les scripts requis pour chaque vue sont répercutés en premier. Votre default.ctp ressemblerait plutôt à ceci :

// get echoed immediately
echo $this->Html->script(array(
    'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
    'global'
));
// everything else from the view, echoed after
echo $this->fetch('script');

Ou bien, vous pouvez spécifier un bloc spécial pour vos scripts précédents.

echo $this->Html->script(array(
    'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
    'global'
), array('block' => 'firstScripts');
echo $this->fetch('css');
echo $this->fetch('firstScripts');
echo $this->fetch('script');

2voto

gintas Points 1307

Je ne sais pas combien de temps vous avez investi dans la construction de votre système actuel, mais vous pouvez essayer d'utiliser une chargeur de ressources hiérarchiques au lieu de l'aide standard de cakePHP.

Le chargeur de ressources standard n'a malheureusement aucun moyen de gérer les dépendances entre les différents fichiers et se contente de les charger dans l'ordre où vous les fournissez (la vue est analysée avant la mise en page).

0voto

Utilisez ceci à la section de tête.

Html->script('jquery-1.11.1.js') ?>    fetch('script') ?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X