У меня есть некоторые страницы, которые я загружаю обычным способом, вызывая представление, как вы ожидали, $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
контроллера?.
Вы всегда можете установить переменную вида и использовать, если вы хотите загрузить этот JS файл (или любой другой файл, который будет использоваться только на определенных страницах). Попробуйте что-то вроде этого:
В вашем контроллере:
$this->load->view('foo', array('loadMainJS'=>true));
Тогда, на ваш взгляд:
<?php if (isset($loadMainJS) && $loadMainJS): ?>
<script src="main.js"></script>
<?php endif; ?>
Вы даже можете сделать отдельный вид, который будет загружать только этот файл, а затем загружать это представление из контроллеров только там, где это необходимо. На самом деле много способов сделать это.
Добавив к тому, что 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>
$page_js='home'
и<script src="js/'.$page_js."'></script>
загрузить его в свой шаблон.