2014-10-22 23 views
5

La documentazione CakePHP dire:CakePHP: Includi js depositare nel colpo di testa da vista

Per impostazione predefinita, i tag di script sono aggiunti alla linea documento. Se si esegue l'override impostando $ options ['inline'] su false, i tag di script verranno invece aggiunti al blocco di script che è possibile stampare altrove nel documento.

Così nel mio file di visualizzazione (.ctp) ho:

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

E nel mio layout, nel tag head:

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

Ma il tag script stampa fuori linea e non nella testa. Se mi manca l'eco dalla riga nel mio file di visualizzazione, lo script non viene stampato affatto nel mio html.

Qualsiasi aiuto sarebbe stato accolto con gratitudine.

PAE

risposta

9

Hai false tra virgolette, in modo da PHP sta trattando come un string e non un boolean. Dovrebbe essere:

echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js', array('inline' => false)); 
+0

e fissavo per ore! Dovrei davvero, davvero avrei dovuto saperlo meglio, non dovrei? Grazie molto. – Peter

1

Perché stai andando su molti attributi ?? semplicemente utilizzare l'url

echo $this->Html->script('http://code.jquery.com/jquery.min.js'); 
+0

Usando questo nella vista lo stamperà in linea, la vista sarà al di fuori del tag head, OP non lo vuole. – HelloSpeakman

3

basta inserire questo nel file ctp di visualizzazione. :)

<?php echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'); ?> 
6

Vorrei approfondire e menzionare un paio di cose su questo.

Inline script

Questo stamperà il tag inline script che non è sempre desiderato.

<?php echo $this->Html->script('script.name'); ?> 

non in linea Script

Questo metterà lo script dove mai è stato posizionato $ this-> fetch ('script') nel file di layout, di solito nella testa della pagina. (Come sottolineato da ub3rst4r si passavano falsa come una stringa)

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

blocco di script

Questa potrebbe essere una versione molto più utile per molte persone, è possibile inserire un blocco di script in qualsiasi file di layout (quanti ne vuoi in realtà). Ti mostrerò un esempio e chiamerò scriptBottom prima della fine del mio corpo.

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

Poi si può passare il blocco al metodo script come tale

<?php $this->Html->script('script.name', array('block' => 'scriptBottom')); ?> 

Spero che questo aiuti

+0

Sì, aiuta. Grazie. Trovo il libro di CakePHP un po 'debole in quest'area. – Peter

+0

Non hai nemmeno bisogno di "echo" lo script, dal momento che viene memorizzato nel buffer ed echeggiato più tardi dove va lo "scriptBottom". – Petruza

+0

Appena testato questo e ha funzionato, aggiornato la risposta di conseguenza, saluti. – HelloSpeakman

1

In cakephp 3 invece di array ('inline' => false) si dovrebbe usare array ('block' => true) se qualcuno sta cercando quella risposta come lo ero io. E non è necessario per riprendere lo script nella parte superiore del file CTP si può semplicemente inserire all'interno di PHP sintassi cioè

<?php $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js', ['block' => true]); ?>

Problemi correlati