更新:

我尝试了下面谢尔顿的代码,但遇到了几个问题:

  1. 使用线路时 $this->load->view($page->template, array('content' => $page->content), TRUE);无法加载请求的文件 .php 但如果我将其更改为 $page->content 效果很好。

  2. 当我将索引函数放入其他控制器时,无论 uri 段设置为何,它仍然会加载默认的主控制器。我如何调整模型才能使其发挥作用?

原问题:

我有一个 template.php 文件,其中包含我的主要站点结构。假设我有一个名为“主页”的页面。我想设置 $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>&copy; 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 并获取正确的页面。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top