Я пытаюсь загрузить 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); } }
и мое «конкретное» представление имеет то, что требуется.
Таким образом, я могу загрузить столько пользовательских сценариев, сколько хочу, и иметь код в представлении, а не контроллер.
Еще раз спасибо, но примите дальнейшие предложения!
напишите для этого помощника. Передавайте имена скриптов в массиве и внутри вспомогательной функции итерации по ним и распечатывайте сценарии