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>
,, 성하다다 and를 만듭니다.header.php
★★★★★★★★★★★★★★★★★」footer.php
참조할 수 있습니다.
.<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, 머리글 해야 할 "sss, 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");
헤더, 뷰 및 바닥글을 로드합니다.
나는 이 페이지에 제시된 거의 모든 답변과 다른 많은 것들을 시도했다.모든 웹사이트에서 최종적으로 유지한 최선의 옵션은 다음과 같은 아키텍처입니다.
단일 뷰
브라우저에 표시되는 뷰는 1개뿐입니다.메인 뷰(/views/page.php)는 다음과 같습니다.
<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
<!DOCTYPE html>
<html lang="en">
<head>
<?= $header ?? '' ?>
</head>
<body>
<div style="width:1200px">
<?= $content ?? '' ?>
</div>
</body>
</html>
컨트롤러가 여러 뷰에 대응
, 그 견해가 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.$header
및$content
과 같습니다.츠키다
$data['header'] = $this->load->view('templates/google-analytics', '', TRUE)
.$this->load->view('templates/javascript', '', TRUE)
.$this->load->view('templates/css', '', TRUE);
$data['content'] = $this->load->view('templates/navbar', '', TRUE)
.$this->load->view('templates/alert', $myData, TRUE)
.$this->load->view('home/index', $myData, TRUE)
.$this->load->view('home/footer', '', TRUE)
.$this->load->view('templates/modal-login', '', TRUE);
$this->load->view('templates/page', $data);
- 소스코드가 얼마나 아름답고 깨끗한지 보세요.
- HTML 마크업이 한 뷰에서 열리고 다른 뷰에서 닫히지 않게 되었습니다.
- 각 뷰는 이제 한 가지 일에만 전념합니다.
- 뷰가 어떻게 연결되어 있는지 확인합니다. 메서드 체인 패턴 또는 다음과 같이 말할 수 있습니다.
- 부분: 세 부분)을 할 수 .
$javascript
★★★★★★★★★★★★★★★★★★★」 - 를 오버로드 CI_Controller로 합니다.
$this->load->view
어플리케이션 전용 파라미터를 추가함으로써 컨트롤러의 청결을 유지할 수 있습니다. - 항상 같은 뷰를 여러 페이지에 로드하는 경우(드디어 질문에 대한 답변이 됩니다), 필요에 따라 다음 두 가지 옵션이 있습니다.
- 뷰에 뷰 로드
- CI_Controller 또는 CI_Loader 확장
이 건축물이 정말 자랑스러워요
@Landons MY_Loader의 간단한 리라이트.바디에 여러 개의 파일(예: 고유한 사이드바)을 포함합니다.
<?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;
}
}
}
이 방법은 양쪽 다...
템플릿에 파일 1개 포함:
$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'인 파일을 추가하여 CI_Loader::view 함수를 재정의합니다.php'을 어플리케이션/코어 폴더에 저장하여 다음 콘텐츠를 추가합니다.
/**
* /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/
내 일은 이렇게 처리한다.템플릿이라는 파일을 만듭니다.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' 등의 메시지로 끝나야 하는 문제가 있었습니다.뷰 -> 메시지 -> 메시지 -> 메시지_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);
이 질문에 대한 답변은 잘 되었지만, 다른 사람들이 언급한 것과 크게 다르지 않기 때문에 제 접근 방식을 추가하고 싶습니다.
다른 레이아웃 페이지를 사용하여 다른 머리글/바닥글을 호출합니다. 일부는 이 레이아웃을 호출하고 일부는 템플릿이라고 부릅니다.
편집
core/Loader.php
레이아웃을 로드하기 위해 자신의 함수를 추가해서 함수를 호출했습니다.layout
.독자적인 템플릿 페이지를 생성하여 호출합니다.
header/footer
너를 위해, 나는 그것을 불렀다.default.php
새로운 디렉토리(예:view/layout/default.php
통상대로 컨트롤러에서 자신의 뷰 페이지를 호출합니다.하지만 전화하는 대신
$this-load->view
사용하다$this->load->layout
, 레이아웃 함수가 호출합니다.default.php
그리고.default.php
머리글과 바닥글을 호출합니다.
1) 인core/Loader.php
view() 함수에서 나는 그것을 복제하고 내 것을 추가했다.
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) 레이아웃 폴더를 만들고 그 폴더에 default.php를 넣습니다.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) 컨트롤러에서 레이아웃을 호출
$this->load->layout('projects');// will use 'view/layout/default.php' layout which in return will call header and footer as well.
다른 레이아웃을 사용하려면 새 레이아웃 이름을 다음 레이아웃에 포함합니다.$data
배열
$data["layout"] = "full_width";
$this->load->layout('projects', $data);// will use full_width.php layout
물론 다음과 같이 레이아웃 디렉토리에 새 레이아웃이 있어야 합니다.
view/layout/full_width.php
이 도우미를 사용한 다이내믹템플릿 로드
// 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;
}
}
나는 이것에 도달했습니다.그리고 모든 사람이 my_controller를 어플리케이션/코어로 만들고 이 코드를 파일명으로 변경하여 거기에 넣을 수 있도록 돕고 싶습니다.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
// this is page helper to load pages daunamically
class MY_Controller extends CI_Controller {
function loadPage($user,$data,$page='home'){
switch($user){
case 'user':
$this->load->view('Temp/head',$data);
$this->load->view('Temp/us_sidebar',$data);
$this->load->view('Users/'.$page,$data);
$this->load->view('Temp/footer',$data);
break;
case 'admin':
$this->load->view('Temp/head',$data);
$this->load->view('Temp/ad_sidebar',$data);
$this->load->view('Admin/'.$page,$data);
$this->load->view('Temp/footer',$data);
break;
case 'visitor';
$this->load->view('Temp/head',$data);
$this->load->view($page);
$this->load->view('Temp/footer',$data);
break;
default:
echo 'wrong argument';
die();
}//end switch
}//end function loadPage
}
컨트롤러에서 이 기능을 사용합니다.
class yourControllerName extends MY_Controller
주의: 컨트롤러 프리픽스 이름에 대해서는 config.disc 파일의 프리픽스에 대해 확인해야 합니다.그 중 하나가 도움이 되었으면 합니다.
언급URL : https://stackoverflow.com/questions/9540576/header-and-footer-in-codeigniter
'it-source' 카테고리의 다른 글
행별로 반복하면서 판다의 데이터 프레임 업데이트 (0) | 2022.12.19 |
---|---|
MySQL의 카디널리티란? (0) | 2022.12.19 |
Express.js의 next()를 사용하여 다음 미들웨어에 변수 전달 (0) | 2022.12.19 |
Express.js의 res.send와 res.json의 차이 (0) | 2022.12.19 |
PHP 함수 주석 (0) | 2022.12.19 |