Codeigniter – Charger une bibliothèque JS spécifique sur une vue spécifique

J'essaie de charger l'API Google Maps, c'est-à-dire:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"> 

Dans mon modèle de tête. Mais parce que je n'ai qu'une page avec une carte Google (je préfère ne pas avoir la charge API pour tous les fichiers), comment envoyer le message du contrôleur à l'affichage que je souhaite charger ce particulier Le fichier JS?

Merci de votre aide.

CodeIgniter a une classe de segments. Vous pourrez exécuter un code comme:

 <?php if($this->uri->segment(1) == 'map') { ?> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"> <?php } ?> 

Lors de la page http://yoursite.com/map/, il va charger le script.

Une solution consiste soit à utiliser une bibliothèque de modèles qui a javascript / css "injection" – voir:

http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html#utilities

 $this->template->add_js('js/jquery.js'); $this->template->add_js('alert("Hello!");', 'embed'); 

pour plus d'informations.

Si vous ne souhaitez pas utiliser une bibliothèque de modèles, procédez comme suit:

* En supposant sur le contrôleur "Map", et que vous avez besoin du fichier JS sur la page par défaut.

 class Map extends CI_Controller { function __construct() { parent::__construct(); } function index() { $scripts = array( '<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true">' . "\n", '<script>something</script>'); /* this method lets you add multiple...*/ $data['scripts'] = $scripts; $this->load->view('my_map/index', $data); } } 

À votre avis:

 if(isset($scripts)) { foreach($scripts as $script) { echo $script; } } 

Essentiellement, vous créez une série de fichiers de script / fichiers css (quoi que ce soit), puis vérifiez la présence et lâchez-le dans la partie de head de votre vue.

J'aimerais personnellement choisir l'option modèle.

Notez également que CI2.0 a un nouveau pilote javascript pourrait valoir une lecture

 <?php /** * Head files loader * @author azhar **/ function headscripts($path) { if(is_string($path)) { echo "<script type='text/javascript' src='". base_url($path) ."'></script>\n"; }elseif(is_array ($path)){ foreach ($path as $p) { echo "<script type='text/javascript' src='". base_url($p) ."'></script>\n"; } } } function headlinks($path) { if(is_string($path)) { echo "<link rel='stylesheet' href='". base_url($path) ."'/>\n"; }elseif(is_array ($path)){ foreach ($path as $p) { echo "<link rel='stylesheet' href='". base_url($p) ."'/>\n"; } } } ?> 

Ajoutez ce fichier dans votre répertoire helper sous le nom head_helper. Dans votre contrôleur à l'intérieur d'une action, utilisez ce code

 $data['headscripts'] = array('js/main.js'); 

Et dans votre fichier, utilisez cette fonction

 headscripts($headscripts); 

Pour la feuille de style, utilisez ceci

 headlinks($headlinks); 

Et oui, n'oubliez pas de charger l'assistant en utilisant le fichier autoload.php dans le dossier config comme celui-ci

 $autoload['helper'] = array('url', 'file','head'); 

Merci pour vos réponses les gars, j'ai fini par faire un mélange de suggestions de Ross et de folle avant de trouver vos réponses ici, alors je suppose que j'étais sur la bonne voie.

Mon contrôleur a:

 $data['head'] = array('specificjs'); $this->load->view('view',$data);` 

Et mon point de vue a:

 if(isset($head)){ foreach($head as $item){ $this->load->view('js/'.$item); } } 

Et ma vue 'specificjs' a ce qu'il faut.

De cette façon, je peux charger autant de scripts personnalisés que je veux et avoir le code dans une vue, pas un contrôleur.

Merci encore, mais continuez d'autres suggestions!

Écrivez un assistant pour cela. Passez les noms des scripts dans un tableau et à l'intérieur de la fonction helper iterate sur eux et imprimez les scripts