Codeigniter - загрузка определенной библиотеки JS в определенном представлении - PullRequest
1 голос
/ 04 февраля 2011

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

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

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

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

Ответы [ 5 ]

4 голосов
/ 04 февраля 2011

Одним из решений является использование библиотеки шаблонов, которая имеет 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);
    }
}

по вашему мнению:

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

по сути, вы создаете массив файлов сценариев / CSS-файлов (что угодно), затем проверяете его прецессионность и выводите его в раздел head вашего представления.

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

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

4 голосов
/ 04 февраля 2011

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/ будет загружен скрипт.

1 голос
/ 17 ноября 2014
<?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 в папке конфигурации, как это

$autoload['helper'] = array('url', 'file','head');
0 голосов
/ 16 ноября 2014

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

0 голосов
/ 06 февраля 2011

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

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

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

и мой взгляд имеет:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...