CodeIgniter의 머리글 및 바닥 글
나는 모든 컨트롤러에서 작성하는 것을 정말로 좋아하지 않습니다.
$this->load->view('templates/header');
$this->load->view('body');
$this->load->view('templates/footer');
할 수 있습니까? 머리글과 바닥 글이 자동으로 포함되고 변경해야 할 경우 그렇게 할 수도 있습니까? 어떻게 처리합니까? 아니면 문제가 아니라고 생각하십니까? 감사.
내가하는 일은 다음과 같습니다.
<?php
/**
* /application/core/MY_Loader.php
*
*/
class MY_Loader extends CI_Loader {
public function template($template_name, $vars = array(), $return = FALSE)
{
$content = $this->view('templates/header', $vars, $return);
$content .= $this->view($template_name, $vars, $return);
$content .= $this->view('templates/footer', $vars, $return);
if ($return)
{
return $content;
}
}
}
CI 3.x의 경우 :
class MY_Loader extends CI_Loader {
public function template($template_name, $vars = array(), $return = FALSE)
{
if($return):
$content = $this->view('templates/header', $vars, $return);
$content .= $this->view($template_name, $vars, $return);
$content .= $this->view('templates/footer', $vars, $return);
return $content;
else:
$this->view('templates/header', $vars);
$this->view($template_name, $vars);
$this->view('templates/footer', $vars);
endif;
}
}
그런 다음 컨트롤러에서 다음을 수행하면됩니다.
<?php
$this->load->template('body');
예.
라는 파일 만들기 template.php
당신의 views
폴더에 저장합니다.
내용 template.php
:
$this->load->view('templates/header');
$this->load->view($v);
$this->load->view('templates/footer');
그런 다음 컨트롤러에서 다음과 같이 할 수 있습니다.
$d['v'] = 'body';
$this->load->view('template', $d);
이것은 실제로 제가 개인적으로 모든 뷰를로드하는 방법에 대한 매우 단순한 버전입니다. 이 아이디어를 극단적으로 취하면 흥미로운 모듈 식 레이아웃을 만들 수 있습니다.
init.php
단일 행을 포함하는 라는보기를 작성하는 경우 고려하십시오 .
$this->load->view('html');
이제 html.php
내용이 있는보기 를 만듭니다 .
<!DOCTYPE html>
<html lang="en">
<? $this->load->view('head'); ?>
<? $this->load->view('body'); ?>
</html>
이제 head.php
내용이 있는보기 를 만듭니다 .
<head>
<title><?= $title;?></title>
<base href="<?= site_url();?>">
<link rel="shortcut icon" href='favicon.ico'>
<script type='text/javascript'>//Put global scripts here...</script>
<!-- ETC ETC... DO A BUNCH OF OTHER <HEAD> STUFF... -->
</head>
그리고 body.php
내용이 있는 보기 :
<body>
<div id="mainWrap">
<? $this->load->view('header'); ?>
<? //FINALLY LOAD THE VIEW!!! ?>
<? $this->load->view($v); ?>
<? $this->load->view('footer'); ?>
</div>
</body>
그리고 적절하게 작성 header.php
하고 footer.php
봅니다.
이제 컨트롤러에서 init를 호출하면 모든 무거운 작업이 완료되고 뷰가 내부에 래핑 <html>
되고 <body>
태그가 표시되고 머리글과 바닥 글이로드됩니다.
$d['v'] = 'fooview'
$this->load->view('init', $d);
다음 시도
폴더 구조
-application
--controller
---dashboards.php
--views
---layouts
----application.php
---dashboards
----index.php
제어 장치
class Dashboards extends CI_Controller
{
public function __construct()
{
parent::__construct();
$data = array();
$data['js'] = 'dashboards.js'
$data['css'] = 'dashbaord.css'
}
public function index()
{
$data = array();
$data['yield'] = 'dashboards/index';
$this->load->view('layouts/application', $data);
}
}
전망
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Some Title</title>
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/app.css" />
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/<?php echo $css; ?>" />
</head>
<body>
<header></header>
<section id="container" role="main">
<?php $this->load->view($yield); ?>
</section>
<footer></footer>
<script src="<php echo base_url(); ?>assets/js/app.js"></script>
<script src="<php echo base_url(); ?>assets/js/<?php echo $js; ?>"></script>
</body>
</html>
다른 js, css 또는 머리글이나 바닥 글의 모든 항목을로드해야 할 때 __construct
함수를 사용하여$this->load->vars
여기 접근과 같은 일종의 레일
또는 더 복잡하지만 인생을 쉽게 만드는 것은 부팅시 더 많은 상수를 사용하는 것입니다. 따라서 하위 클래스를 자유롭게 정의 할 수 있으며보기를 표시하는 단일 메서드를 사용할 수 있습니다. 또한 선택된 상수는 헤더의 javascript로 전달할 수 있습니다.
<?php
/*
* extends codeigniter main controller
*/
class CH_Controller extends CI_Controller {
protected $viewdata;
public function __construct() {
parent::__construct();
//hard code / override and transfer only required constants (for security) server constants
//such as domain name to client - this is for code porting and no passwords or database details
//should be used - ajax is for this
$this->viewdata = array(
"constants_js" => array(
"TOP_DOMAIN"=>TOP_DOMAIN,
"C_UROOT" => C_UROOT,
"UROOT" => UROOT,
"DOMAIN"=> DOMAIN
)
);
}
public function show($viewloc) {
$this->load->view('templates/header', $this->viewdata);
$this->load->view($viewloc, $this->viewdata);
$this->load->view('templates/footer', $this->viewdata);
}
//loads custom class objects if not already loaded
public function loadplugin($newclass) {
if (!class_exists("PL_" . $newclass)) {
require(CI_PLUGIN . "PL_" . $newclass . ".php");
}
}
그런 다음 간단히 :
$this->show("<path>/views/viewname/whatever_V.php");
머리글,보기 및 바닥 글을로드합니다.
@Landons MY_Loader의 간단한 재 작성, 본문에 대한 여러 파일을 포함하도록, ei 페이지 고유 사이드 바 ...
<?php
class MY_Loader extends CI_Loader {
public function template($template_name, $vars = array(), $return = FALSE)
{
$content = $this->view('frontend/templates/header', $vars, $return);
if(is_array($template_name)) { //return all values in contents
foreach($template_name as $file_to_load) {
$content .= $this->view('frontend/'.$file_to_load, $vars, $return);
}
}
else {
$content .= $this->view('frontend/'.$template_name, $vars, $return);
}
$content .= $this->view('frontend/templates/footer', $vars, $return);
if ($return)
{
return $content;
}
}
}
이것은 두 가지 방식으로 작동합니다 ...
템플릿에 하나의 파일 포함 :
$data['moo'] = 'my data'];
$this->load->template('home', $data);
템플릿에 여러 파일 포함 :
$data['catalog'] = 'catalog load 1';
$data['sidebar'] = 'sidebar load 2';
$load = array('catalog/catalog', 'catalog/sidebar');
$this->load->template($load, $data);
CodeIgniter-Assets 는 CodeIgniter를 사용하여 사용자 정의 머리글과 바닥 글을 갖도록 저장소를 쉽게 구성 할 수 있습니다. 이것이 문제를 해결하기를 바랍니다.
응용 프로그램 / 코어 폴더에 'MY_Loader.php'라는 파일을 추가하고 다음 내용을 추가하여 CI_Loader :: view 함수를 재정의합니다.
/**
* /application/core/MY_Loader.php
*/
class MY_Loader extends CI_Loader
{
public function view($view, $vars = array(), $return = FALSE, $include_template=TRUE)
{
$header='';
$footer='';
if($include_template)
{
$header=parent::view('templates/header',$vars,$return);
}
$content=parent::view($view, $vars,$return);
if($include_template)
{
$footer=parent::view('templates/footer',$vars,$return);
}
if($return)
return "$header$content$footer";
return $this;
}
}
config.php 파일을 사용할 수 있으며 CodeIgniter의 도우미 기능을 사용할 수도 있습니다.
$config['header_css'] = array('style.css','prettyPhoto.css','nivo-slider.css');
$config['header_js'] = array('core.js','core.js',
'jquery-1.4.1.min.js',
'jquery-slidedeck.pack.lite.js',
'jquery-prettyPhoto.js',
'jquery.nivo.slider.js');
출처 : https://jamshidhashimi.com/dynamically-add-javascript-and-css-files-in-codeigniter-header-page/
여기 내가 내 것을 다루는 방법이 있습니다. 보기 폴더에 template.php라는 파일을 만듭니다. 이 파일에는 내 기본 사이트 레이아웃이 모두 포함되어 있습니다. 그런 다음이 템플릿 파일에서 추가 뷰를 호출합니다. 다음은 그 예입니다.
<!doctype html>
<html lang="en">
<head>
<meta charset=utf-8">
<title><?php echo $title; ?></title>
<link href="<?php echo base_url() ;?>assets/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="<?php echo base_url() ;?>assets/css/main.css" rel="stylesheet" type="text/css" />
<noscript>
Javascript is not enabled! Please turn on Javascript to use this site.
</noscript>
<script type="text/javascript">
//<![CDATA[
base_url = '<?php echo base_url();?>';
//]]>
</script>
</head>
<body>
<div id="wrapper">
<div id="container">
<div id="top">
<?php $this->load->view('top');?>
</div>
<div id="main">
<?php $this->load->view($main);?>
</div>
<div id="footer">
<?php $this->load->view('bottom');?>
</div>
</div><!-- end container -->
</div><!-- end wrapper -->
<script type="text/javascript" src="<?php echo base_url();?>assets/js/jquery-1.8.2.min.js" ></script>
<script type="text/javascript" src="<?php echo base_url();?>assets/js/bootstrap.min.js"></script>
</body>
</html>
컨트롤러에서 뷰 이름을 $ data [ 'main']에 전달합니다. 그래서 다음과 같이 할 것입니다.
class Main extends CI_Controller {
public function index()
{
$data['main'] = 'main_view';
$data['title'] = 'Site Title';
$this->load->vars($data);
$this->load->view('template', $data);
}
}
컨트롤러가 'Thanks for that form'및 일반 'not found etc'와 같은 메시지로 끝나기를 원하는이 문제가있었습니다. 나는 views-> message-> message_v.php에서 이것을한다.
<?php
$title = "Message";
$this->load->view('templates/message_header', array("title" => $title));
?>
<h1>Message</h1>
<?php echo $msg_text; ?>
<h2>Thanks</h2>
<?php $this->load->view('templates/message_footer'); ?>
이를 통해 단일 파일에서 메시지 렌더링 사이트 전체를 변경할 수 있습니다.
$this->load->view("message/message_v", $data);
이 질문에 대한 답은 적절했지만 제 접근 방식을 추가하고 싶습니다. 다른 사람들이 언급 한 것과 크게 다르지 않습니다.
I use different layouts pages to call different headers/footers, some call this layout, some call it template etc.
Edit
core/Loader.php
and add your own function to load your layout, I called the function e.g.layout
.Create your own template page and make it call
header/footer
for you, I called itdefault.php
and put in a new directory e.g.view/layout/default.php
Call your own view page from your controller as you would normally. But instead of calling
$this-load->view
use$this->load->layout
, layout function will call thedefault.php
anddefault.php
will call your header and footer.
1) In core/Loader.php
under view() function I duplicated it and added mine
public function layout($view, $vars = array(), $return = FALSE)
{
$vars["display_page"] = $view;//will be called from the layout page
$layout = isset($vars["layout"]) ? $vars["layout"] : "default";
return $this->_ci_load(array('_ci_view' => "layouts/$layout", '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
}
2) Create layout folder and put default.php in it in view/layout/default.php
$this->load->view('parts/header');//or wherever your header is
$this->load->view($display_page);
$this->load->view('parts/footer');or wherever your footer is
3) From your controller, call your layout
$this->load->layout('projects');// will use 'view/layout/default.php' layout which in return will call header and footer as well.
To use another layout, include the new layout name in your $data
array
$data["layout"] = "full_width";
$this->load->layout('projects', $data);// will use full_width.php layout
and of course you must have your new layout in the layout directory as in:
view/layout/full_width.php
Using This Helper For Dynamic Template Loading
// get Template
function get_template($template_name, $vars = array(), $return = FALSE) {
$CI = & get_instance();
$content = "";
$last = $CI - > uri - > total_segments();
if ($CI - > uri - > segment($last) != 'tab') {
$content = $CI - > load - > view('Header', $vars, $return);
$content. = $CI - > load - > view('Sidebar', $vars, $return);
}
$content. = $CI - > load - > view($template_name, $vars, $return);
if ($CI - > uri - > segment($last) != 'tab') {
$content. = $CI - > load - > view('Footer', $vars, $return);
}
if ($return) {
return $content;
}
}
참고URL : https://stackoverflow.com/questions/9540576/header-and-footer-in-codeigniter
'developer tip' 카테고리의 다른 글
Android : 활동을 인스턴스화 할 수 없음 / ClassNotFoundException (0) | 2020.11.07 |
---|---|
파이썬에서 부울의 반대 (부정)를 어떻게 얻습니까? (0) | 2020.11.07 |
브라우저에서 자바 스크립트를 통해 이미지를 압축하는 방법은 무엇입니까? (0) | 2020.11.07 |
glBindVertexArrays 대 glBindBuffer의 역할은 무엇이며 그 관계는 무엇입니까? (0) | 2020.11.07 |
Angular 2 구성 요소 @Input이 작동하지 않습니다. (0) | 2020.11.07 |