动态页面 - Codeigniter

时间:2011-03-30 21:00:16

标签: php codeigniter dynamic-pages

更新

我在下面尝试过Sheldon的代码,但我遇到了几个问题:

  1. 使用行$this->load->view($page->template, array('content' => $page->content), TRUE);时无法加载请求的文件.php,但如果我将其更改为$page->content则可以正常工作。

  2. 当我将索引函数放入我的其他控制器时,它仍会加载默认的家庭控制器,尽管uri段设置为。如何调整模型以使其起作用?

  3. 原始问题:

    我有一个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>&copy; Houses LTD <?php echo date('Y');?></footer>
    </div> <!-- Wrapper Close -->
    
    </body>
    

2 个答案:

答案 0 :(得分:3)

正如@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);
}

}

答案 1 :(得分:2)

您可能需要考虑使用一个按名称获取页面详细信息的函数。这反过来将运行像getIdByName($ page_name = false)

这样的函数

从那里你可以从数据库中提取ID并获得正确的页面。