Codeigniter – загрузка определенной библиотеки JS на определенном виде

Я пытаюсь загрузить API карт Google, т.е.:

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

в моей голове. Но поскольку у меня есть только одна страница с картой google (я бы предпочел не иметь загрузку API для всех файлов), как мне отправить сообщение с контроллера на представление, которое я хочу загрузить для этого JS-файл?

Спасибо за вашу помощь.

CodeIgniter имеет класс сегментов. Вы могли бы запустить некоторый код, например:

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

Когда на странице http://yoursite.com/map/ будет загружен скрипт.

Одним из решений является либо использование библиотеки шаблонов с javascript / css-инъекцией – см.

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

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

Чтобы получить больше информации.

Если вы не хотите использовать библиотеку шаблонов, выполните следующие действия:

* Предположим, что на контроллере «Карта» и вам нужен файл JS на странице по умолчанию.

 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); } } - 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); } } 

на ваш взгляд:

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

по существу вы создаете массив файлов сценариев / css-файлов (независимо от них), затем проверяете его наличие и выгружаете его в разделе заголовка вашего представления.

Я бы лично пошел на вариант шаблона.

Также обратите внимание, что в CI2.0 новый драйвер javascript может быть прочитан

 <?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"; } } } ?> 

Добавьте этот файл в свой helper_directory под именем head_helper. В вашем контроллере внутри действия используйте этот код

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

И в вашем файле просмотра эта функция используется

 headscripts($headscripts); 

Для таблицы стилей используйте это

 headlinks($headlinks); 

И да, не забудьте загрузить помощника, используя файл autoload.php в папке config, как это

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

Спасибо за ответы, ребята, я закончил тем, что делал смесь предложений Росса и листьев, прежде чем нашел здесь ваши ответы, поэтому, я думаю, я был на правильном пути.

Мой контроллер имеет:

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

и мое мнение:

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

и мое «конкретное» представление имеет то, что требуется.

Таким образом, я могу загрузить столько пользовательских сценариев, сколько хочу, и иметь код в представлении, а не контроллер.

Еще раз спасибо, но примите дальнейшие предложения!

напишите для этого помощника. Передавайте имена скриптов в массиве и внутри вспомогательной функции итерации по ним и распечатывайте сценарии