Domanda

Aggiornamento:

Ho provato il codice di Sheldon qui sotto, ma ho colpito un paio di problemi:

    .
  1. Quando si utilizza la linea $this->load->view($page->template, array('content' => $page->content), TRUE);Alble per caricare il file richiesto .php ma se lo modillo su $page->content funziona bene.

  2. Quando posizionisco le funzioni dell'indice nei miei altri controller caricano ancora il controller domestico predefinito nonostante sia impostato il segmento URI. Come posso regolare il modello per funzionare?

    Domanda originale:

    Ho un file temlate.php che ospita la mia struttura del sito principale. Supponiamo di avere una pagina chiamata "casa". Vorrei impostare il $title e i dati $content dal database.

    Ho impostato una vista per ogni pagina e anche un controller. Ho provato:

    $this->cms_pages->name;
    
    .

    Questo non produce nulla. So che ho bisogno di ottenere il segmento URI ma perché sto usando /$sales->name che non sono sicuro se devo cambiarlo su $sales->id per funzionare. Mi piacerebbe ottenerlo con il nome. Anche le migliori pratiche sono importanti.

    C'è un modo in cui potrei fare qualcosa come: $this->cms_pages->id->1->name?

    Modello

    function getCMSPages() {
    
        $query = $this->db->get('pages');
        if($query->num_rows() > 0) return $query->result();
    }
    
    .

    Modello

    <?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);
    }
    }
    
    .

    Template

     $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>
    

È stato utile?

Soluzione

As @davzie said;

Model

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();
}

Controller

<?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);
}

}

Altri suggerimenti

You might want to consider having a function that gets the details of a page by its name. This in-turn would run a function like getIdByName($page_name = false)

From there you would have the ID to pull from the database and get the correct page.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top