Введите какой-нибудь JavaScript или CSS из контроллера

0

У меня есть некоторые страницы, которые я загружаю обычным способом, вызывая представление, как вы ожидали, $this->load->view('foo') но в файле, который я установил, весь мой javascript main.js дает ошибки на firebug, если он пропускает требуемый html.

Чтобы остановить ошибки, я хотел бы избежать загрузки main.js на всех страницах и вместо этого загружать только javascript, который используют определенные страницы.

Я пробовал это

public function index(){
echo <<<'EOT'
$(document).ready(function(){
$(".btn").click(function(){
$(this).hide();
});
}); 

EOT;
echo '<button class="btn btn-primary">'.$this->lang->line('lorem_ipsum').'</button>';
//$this->load->view('foo');
} 

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

Есть ли способ, который я могу вставить javascript или css в foo из index контроллера?.

  • 1
    Это не ответ на ваш вопрос, но может быть хорошей идеей отделить ваш PHP от вашего JS. Использование инструмента сборки, такого как gulp или grunt, для объединения файлов JavaScript является обычным способом, тогда вы можете просто иметь переменную, например, $page_js='home' и <script src="js/'.$page_js."'></script> загрузить его в свой шаблон.
Теги:
codeigniter

2 ответа

1
Лучший ответ

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

В вашем контроллере:

$this->load->view('foo', array('loadMainJS'=>true));

Тогда, на ваш взгляд:

<?php if (isset($loadMainJS) && $loadMainJS): ?>
    <script src="main.js"></script>
<?php endif; ?>

Вы даже можете сделать отдельный вид, который будет загружать только этот файл, а затем загружать это представление из контроллеров только там, где это необходимо. На самом деле много способов сделать это.

0

Добавив к тому, что Shomz, я смог создать переменную в контроллере

    public function index(){

$data['custom_js'] =  <<<EOT
<script>
$(document).ready(function(){
$( '.btn' ).click(function() {
alert( 'Handler for .click() called.' );
});
});
</script>
EOT;
$this->load->view('header',$data);
echo '<button class="btn btn-primary">'.$this->lang->line('lorem_ipsum').'</button>';
$this->load->view('body');
$this->load->view('footer');
}

и использовать его в представлении,

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="<?php echo base_url("assets/ico/favicon.ico"); ?>">

<title>Sticky Footer Navbar Template for Bootstrap</title>

<!-- Bootstrap core CSS -->
<link href="<?php echo base_url("assets/css/bootstrap.min.css"); ?>" rel="stylesheet">

<!-- Custom styles for this template -->
<link href="<?php echo base_url("assets/css/sticky-footer-navbar.css"); ?>" rel="stylesheet">
<link href="<?php echo base_url("assets/jui/jquery-ui.min.css"); ?>" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
  <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<script src="<?php echo base_url("assets/js/jquery.min.js"); ?>"></script>
<script src="<?php echo base_url("assets/jui/jquery-ui.min.js"); ?>"></script>
<script src="<?php echo base_url("assets/js/bootstrap.min.js"); ?>"></script>
<script src="<?php echo base_url("assets/js/isotopeSearchFilter.jquery.min.js"); ?>"></script>
<?php echo $custom_js; ?>
</head>
<body>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню