Codeigniter: Как включить файлы JavaScript - PullRequest
18 голосов
/ 01 октября 2010

Здравствуйте, я только начал работать с платформой CodeIgniter.Моя текущая структура каталогов

Demo(Project name)
 +System
 +Application
   -Controllers
      demo.php
   +Model
   -Views
      view_demo.php
 -Js
    ajax.js
    jquery.js  

Скажите, пожалуйста, как включить файлы .js в view_demo.php.

Спасибо, Радж

Ответы [ 6 ]

25 голосов
/ 01 октября 2010

Вам нужно использовать base_url(), чтобы включить файл javascript в свой VIEW.

Итак, в файле view_demo.php:

<script type="text/javascript" src="<?php echo base_url();?>js/jquery.js" ></script>
<script type="text/javascript" src="<?php echo base_url();?>js/ajax.js" ></script>

Вам понадобится помощник по URLзагружен.Чтобы загрузить помощника, вам нужно установить на свой контроллер demo.php:

$this->load->helper('url');

Вы также можете автоматически загрузить \ config \ autoload.php в массиве helpers.

Подробнее о base_url(): http://www.codeigniter.com/user_guide/helpers/url_helper.html#base_url

20 голосов
/ 01 октября 2010

Вы не включите JS-файлы в PHP, они будут выводиться как теги скрипта в HTML-коде, который вы можете создавать как выход из скрипта PHP.

Насколько я знаю, нет встроенной функции CodeIginiter для включения этого вывода, как это делается для CSS с использованием функции link_tag(), предоставляемой CI. Я добавил функцию с именем script_tag() в файл system/helpers/html_helper.php из CI. Функция:

if ( ! function_exists('script_tag')) {
    function script_tag($src = '', $language = 'javascript', $type = 'text/javascript', $index_page = FALSE)
    {
        $CI =& get_instance();
        $script = '<scr'.'ipt';
        if (is_array($src)) {
            foreach ($src as $k=>$v) {
                if ($k == 'src' AND strpos($v, '://') === FALSE) {
                    if ($index_page === TRUE) {
                        $script .= ' src="'.$CI->config->site_url($v).'"';
                    }
                    else {
                        $script .= ' src="'.$CI->config->slash_item('base_url').$v.'"';
                    }
                }
                else {
                    $script .= "$k=\"$v\"";
                }
            }

            $script .= "></scr"."ipt>\n";
        }
        else {
            if ( strpos($src, '://') !== FALSE) {
                $script .= ' src="'.$src.'" ';
            }
            elseif ($index_page === TRUE) {
                $script .= ' src="'.$CI->config->site_url($src).'" ';
            }
            else {
                $script .= ' src="'.$CI->config->slash_item('base_url').$src.'" ';
            }

            $script .= 'language="'.$language.'" type="'.$type.'"';
            $script .= ' /></scr'.'ipt>'."\n";
        }
        return $script;
    }
}

Тогда в вашем PHP-коде вы можете сделать:

echo script_tag('content/js/jquery-1.4.2.js');
9 голосов
/ 01 октября 2010

Я храню свой javascript в подкаталоге моей папки вида, поэтому путь к файлу относительно вызываемого представления, и я опускаю base_url ().

Другой метод, который я принял, заключался в определении массива скриптов для включения в мой контроллер, а затем в цикле просмотра массива, чтобы включить их. Это позволяет мне включать специальные функции js только при необходимости.

$data['scripts to load'] = array('edit.js','menu.js', 'contact.js');
$this->load->view('myview');

Тогда в поле зрения

 <?php  foreach($scripts_to_load as $script):?>
           <script type='text/javascript' src = 'my_js/<?php echo $script;?>'>
 <?php endforeach;?>

Если у вас есть файлы сценариев, которые загружаются на каждой странице, вы можете жестко их кодировать в виде нижнего колонтитула, как описано в других ответах.

1 голос
/ 07 ноября 2018

Переменная $ data иногда может быть потеряна, если у вас есть вложенные представления, и вы не передаете ее в качестве аргумента дочерним / вложенным представлениям.

Я нашел простое решение, которое работает очень плавно, чтобыme:

В вашем текущем файле просмотра вы настраиваете свой скрипт следующим образом:

$ this-> scripts [] = '/js/myscript.js';

вВ свой нижний колонтитул или файл {what.php} вы вставляете этот код:

    <?php
        if(isset($this->scripts))
        foreach($this->scripts as $script) :
     ?>
            <script src="my_asset_path/js/<?=$script;?>"></script>
    <?endforeach;?>

Если вам нужен только кусочек кода JavaScript, вы всегда можете использовать анонимные функции, такие как:

<?php
$this->RenderScript[] = function() {
?>
      <script>
        console.log('myjavascript code snippet');
      </script>
<?}?>

и внизу:

<?php
        if(isset($this->RenderScript))
            foreach($this->RenderScript as $script) {
                $script();
            }
    ?>
1 голос
/ 02 октября 2010

Ознакомьтесь с библиотекой шаблонов CodeIgniter Фила Стерджена. Мы используем его модифицированную версию на работе. http://philsturgeon.co.uk/code/codeigniter-template

0 голосов
/ 01 октября 2010

Просто используйте стандарт:

<script src="/path/to/file.js" type="text/javascript" charset="utf-8"></script>

внутри вашего взгляда! (Конечно, не внутри тегов PHP.) Я не думаю, что у помощника CodeIgniter HTML есть какие-либо функции, которые вы можете использовать в качестве альтернативы написанию HTML самостоятельно.

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