Tyler F.
Tyler F.

Reputation: 124

CodeIgniter 3.x - Nesting Multiple View Folders Within Parent View Folder

Problem / Background

I just graduated and I'm nearing completion of my web portfolio. I'd like to convert some of my school projects into CodeIgniter before my student portfolio is no longer hosted. I want to know if I can nest my projects' view folders within a parent view folder and manipulate it using a single controller before I waste too much of my time.


Hypothetical Project Structure

Below is an example of what the view's folder/file structure would look like.

views/nwtc

nwtc
|
+---website-reviews
|   |
|   +---page1.php
|   +---page2.php
|   +---page3.php
|   +---page4.php
|   +---page5.php
|   +---page6.php
|
+---emerging-technology
|   |
|   +---page1.php
|
+---website-design
|   |
|   +---page1.php
|   +---page2.php
|   +---page3.php
|   +---page4.php
|   +---page5.php
|   +---page6.php
|
+---index.php     //     <--- Project landing page

Ideal URL Structure

mysite.com/nwtc/$project/$page


Hypothetical Controller Design

controllers/Nwtc.php

<?php
class Nwtc extends CI_Controller {

    public function index()
    {
        $data['title'] = 'NWTC Projects';
        $data['description'] = '';

        $this->load->view('templates/nwtc_header', $data);
        $this->load->view('nwtc/index', $data);
        $this->load->view('templates/nwtc_footer');
    }

    public function view($project, $page)    //    <--- Total Guess
    {
        if ( ! file_exists(APPPATH.'views/nwtc/'.$project.'/'.$page.'.php'))
        {
        show_404();
        }

        $data['title'] = ucwords(str_replace("-"," ",$project)).' '.ucfirst($page);
        $data['assets'] = $project; // Project-specific css/js filenames
        $data['description'] = array(
            'website-reviews' => "",
            'emerging-technology' => "",
            'website-design' => ""
        );

        $this->load->view('nwtc/'.$project.'/'.$page, $data);  //   <--- I'll be amazed if this works
    }
}

Questions

  1. Is my nested views scenario even possible?
  2. If so, what needs to change in my controller?
  3. Are there any important considerations that I may be overlooking?

Upvotes: 1

Views: 660

Answers (2)

Eswaran Arumugam
Eswaran Arumugam

Reputation: 77

Yes its possible to load your view. If your file exists it will load otherwise it will throw error.

public function view($project='', $page='') 
{   
  if($project !='' && $page !='')
  {
   $this->load->view('nwtc/'.$project.'/'.$page, $data); 
  } 
}

Upvotes: 1

ubm
ubm

Reputation: 636

Yes,It is possible and your code looks ok for loading pages

    public function view($project, $page)    
        {
    //here $project argument stands for sub folder name
//eg:$project = 'website-reviews',$page = 'page1',then we can load page1.php file

    // do the operations

            $this->load->view('nwtc/'.$project.'/'.$page, $data);  
        }

In my view,your code doesn't need any changes

Upvotes: 1

Related Questions