Как загрузить скрипт в нижний колонтитул шаблона - CodeIgniter

Я пробую более удобный для сопровождения способ структурировать свой код, как я узнал из некоторых руководств на nettuts+.

Мне удалось отделить файлы верхнего и нижнего колонтитула от основного содержимого каждой страницы, чтобы они загружались вместе с каждой отдельной страницей, что упрощает управление изменениями в этих двух файлах.

В настоящее время я хочу добавить код jQuery в нижний колонтитул только для одной страницы. Здесь я ударился о стену в размышлениях. Как я могу позволить этому коду jQuery присутствовать в моем нижнем колонтитуле только для одной страницы, а не для всех страниц? Может кто-нибудь объяснить?

Я думал сделать что-то вроде:

<?php if($title = "The jQuery Page"){?>
    <script>
       jquery code here....
    </script>
<?php } ?>

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

Изменить: вот запрошенный код:

В моем контроллере я вызываю представления:

 $data['title'] = "The jQuery Page";
    $this->load->view('header', $data);
    $this->load->view('cool_page');
    $this->load->view('footer');

Затем в моем нижнем колонтитуле я хочу загрузить определенный скрипт только в этом нижнем колонтитуле одной страницы:

<script src="<?php echo base_url();?>js/jquery-1.10.2.min.js"></script>
        <script>
            $(document).ready(function() {

                /*cool jquery stuff*/

            });
        </script>

person a7omiton    schedule 01.10.2013    source источник
comment
Можете ли вы добавить код для контроллера (ов), шаблона (ов) и т. д.?   -  person quantme    schedule 02.10.2013
comment
@quantme Конечно, только что сделал.   -  person a7omiton    schedule 02.10.2013


Ответы (3)


Попробуйте загрузить view в основной view

/приложение/контроллеры/test.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Test extends CI_Controller {
  public function index() {
    $data = array(
      'title' => "The jQuery Page", 
      'script' => TRUE // if you omit or comment this variable the 'views/script.php' is not loaded
    );
    $this->load->view('test', $data);
  }
}

/приложение/представления/test.php

<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
  <?php if (isset($script)) { $this->load->view('script'); } ?>
</body>
</html>

/приложение/представления/script.php

<script>
  jquery code here....
</script>
person quantme    schedule 01.10.2013
comment
Вау, это действительно хорошее решение. Мне бы даже не понадобилось условие if в представлении test.php, потому что я могу просто вызвать представление сценария всякий раз, когда мне это нужно из контроллера! Это как иметь нижний колонтитул внутри нижнего колонтитула. Отличное решение, спасибо! - person a7omiton; 02.10.2013

Вы можете указать JS для включения как часть данных, передаваемых в представление:

КОНТРОЛЛЕР1

$this->data['js'][] = 'alert(\'Hi\');';
$this->data['js'][] = 'alert(\'Hey\');';

$this->load->view('footer', $this->data);

КОНТРОЛЛЕР2

$this->data['js'][] = 'alert(\'Yo\');';
$this->data['js'][] = 'alert(\'Sup\');';

$this->load->view('footer', $this->data);

ВИД нижнего колонтитула

if(isset($js) && is_array($js) && count($js) > 0){
    echo '<script>';
    foreach($js as $key=>$value){
        $value;
    }
    echo '</script>';
}
person MonkeyZeus    schedule 01.10.2013
comment
Привет, Это то же самое, что и проверка в представлении, чтобы увидеть, должен ли выполняться какой-либо JavaScript? Если бы я проверил, был ли заголовок таким же, и сделал условное выражение в представлении нижнего колонтитула, чтобы увидеть, является ли заголовок правильной страницей, могло бы это также работать - person a7omiton; 02.10.2013
comment
@ a7omiton Да, это может сработать, но позже вы настраиваете себя на большую головную боль. Это также нарушило бы принципы хорошего дизайна MVC, которые должны по существу отделить логику от представления. Если ваш проект веб-сайта настолько мал, что вам удобно реализовать свою идею, то, честно говоря, вам, вероятно, не нужны накладные расходы на реализацию такого фреймворка, как CodeIgniter. - person MonkeyZeus; 02.10.2013
comment
Спасибо за совет, это небольшой проект, но я подумывал использовать CodeIgniter для повышения уровня безопасности (а кому не нужна безопасность?) и для создания хорошей основы на случай, если веб-сайту потребуется расширение. - person a7omiton; 02.10.2013

Я не думаю, что есть способ сделать условное выражение «если» вокруг сценария, поэтому я использовал предложенное решение в своем вопросе.

Проверьте заголовок, чтобы убедиться, что это нужная страница:

<?php if($title = "Photo Albums - Hands of Humanity"):?>

Затем добавьте скрипт в DOM, если это так:

<script>
$(document).ready(function() {

//jquery stuff

});
</script>
<?php endif;?>

Если есть другие способы, которые лучше для ремонтопригодности, я был бы рад их услышать.

person a7omiton    schedule 01.10.2013