동적 페이지 - Codeigniter
-
14-11-2019 - |
문제
업데이트:
아래에서 Sheldon의 코드를 시도했지만 몇 가지 문제가 발생했습니다.
라인 이용시
$this->load->view($page->template, array('content' => $page->content), TRUE);
요청한 파일 .php를 로드할 수 없지만 다음으로 변경하면$page->content
잘 작동합니다.인덱스 기능을 다른 컨트롤러에 배치하면 uri 세그먼트의 설정에도 불구하고 여전히 기본 홈 컨트롤러가 로드됩니다.이것이 작동하도록 모델을 어떻게 조정합니까?
원래 질문:
내 기본 사이트 구조를 저장하는 template.php 파일이 있습니다.'home'이라는 페이지가 있다고 가정해 보겠습니다.나는 $title
그리고 $content
데이터베이스의 데이터.
각 페이지에 대한 보기와 컨트롤러를 설정했습니다.나는 시도했다:
$this->cms_pages->name;
이것은 아무것도 생산하지 않습니다.URI 세그먼트를 가져와야 한다는 것을 알고 있지만 /$sales->name
로 바꿔야 할지 잘 모르겠습니다 $sales->id
이것이 작동하려면.이름으로 받고 싶습니다.모범 사례도 중요합니다.
다음과 같이 할 수 있는 방법이 있나요? $this->cms_pages->id->1->name
?
모델
function getCMSPages() {
$query = $this->db->get('pages');
if($query->num_rows() > 0) return $query->result();
}
주형
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller {
public function index()
{
$data['cms_pages'] = $this->navigation_model->getCMSPages();
$data['title'] = 'Ccho';
$data['content'] = $this->load->view('home', NULL, TRUE);
$this->load->view('template', $data);
}
}
주형
$stylesheetCSS = array('href' => 'includes/css/style.css', 'rel' => 'stylesheet', 'type' => 'text/css', 'media' => 'print');
echo doctype('html5');
?>
<head>
<title>Housemovers : <?php echo $title ?></title>
<?php echo link_tag($stylesheetCSS);?>
</head>
<body>
<div id ="wrapper">
<header>
<p>content</p>
</header>
<nav>
<ul>
<?php if($this->session->userdata('logged_in')): ?>
<li><?php echo anchor('#','Edit Pages');?>
<?php if(is_array($cms_pages)): ?>
<ul>
<?php foreach($cms_pages as $page): ?>
<li><a href="<?=$page->title?>"><?= $page->title?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<li><?php echo anchor('#','Gallery');?>
<ul>
<li><?php echo anchor('admin/addgallery','Add Gallery');?></li>
<li><?php echo anchor('admin/uploadimage','Upload Image');?>
</li>
<li><?php echo anchor('#','Delete Gallery');?></li>
</ul>
</li>
<li><?php echo anchor('#','Sales');?>
<ul>
<li><?php echo anchor('admin/addsale','Add Sale');?></li>
<li><?php echo anchor('#','Edit Sale');?>
<?php if(is_array($sales_pages)): ?>
<ul>
<?php foreach($sales_pages as $sale): ?>
<li><a href="editsale/index/<?=$sale->id?>"><?= $sale->name?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<li><?php echo anchor('#','Delete Sale');?></li>
<li><?php echo anchor('admin/home/logout','Log Out');?></li>
</ul>
</li>
<?php else: ?>
<ul>
<li><?php echo anchor('home','Home');?></li>
<li><?php echo anchor('about','About Us');?></li>
<li><?php echo anchor('gallery','Gallery');?></li>
<li><?php echo anchor('testimonials', 'Testimonials');?></li>
<li><?php echo anchor('sales','Sales');?></li>
<li><?php echo anchor('contact','Contact Us');?></li>
</ul>
<?php endif; ?>
</ul>
</nav>
<section id="content">
<h1><?= $title ?></h1>
<p><?= $content ?></p>
</section>
<footer>© Houses LTD <?php echo date('Y');?></footer>
</div> <!-- Wrapper Close -->
</body>
해결책
@davzie가 말했듯이;
모델
function getCMSPage($page_name = '') {
if(!$page_name) $page_name= 'home'; // home be default.
$this->db->where('name', $page_name);
$query = $this->db->get('pages', 1);
if($query->num_rows() == 1) return $query->row();
}
제어 장치
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller {
public function index()
{
$page = $this->navigation_model->getCMSPage($this-uri->segment(1)); // pretend the first segment in your URI is the page you want.
$data['cms_pages'] = $this->navigation_model->getCMSPages();
$data['title'] = $page->name;
$data['content'] = $this->load->view($page->template, array('content' => $page->content), TRUE);
$this->load->view('template', $data);
}
}
다른 팁
이름으로 페이지의 세부정보를 가져오는 함수를 고려하는 것이 좋습니다.그러면 getIdByName($page_name = false)와 같은 함수가 실행됩니다.
거기에서 데이터베이스에서 가져와 올바른 페이지를 얻을 수 있는 ID를 갖게 됩니다.