Welcome Guest, Not a member yet? Register   Sign In
Missing a trick with helpers
#1

[eluser]Mike Cocklin[/eluser]
I know that I must be doing something stupid but I am having no joy in adding my own helper to my controller and using the helper functions.

Here is my controller

Code:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

/**
  * Index Page for this controller.
  *
  * Maps to the following URL
  *   http://example.com/index.php/welcome
  * - or -  
  *   http://example.com/index.php/welcome/index
  * - or -
  * Since this controller is set as the default controller in
  * config/routes.php, it's displayed at http://example.com/
  *
  * So any other public methods not prefixed with an underscore will
  * map to /index.php/welcome/<method_name>
  * @see http://ellislab.com/codeigniter/user-guide/general/urls.html
  */
    

public function __construct()
{
  parent::__construct();
  $this->load->model('Page_model');
    $this->load->helper('content');
  }


//    function getTitle($pageName)
//  {
//     $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5); //Gets browser language
//     $pageTitle = $pageName . '.title';
//  
//     $data['pageTitle'] = $this->Page_model->page_data($options = array('getKey' => $pageTitle, 'locale' => $lang));
//  
//     return $data['pageTitle'];
//  
//    }
//  
//    function getContent($pageName)
//  {
//     $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5);
//     $pageContent = $pageName . '.content';
//    
//     $data['pageContent'] = $this->Page_model->page_data($options = array('getKey' => $pageContent, 'locale' => $lang));
//     //print_r($data['pageContent']);
//   //die();
//     return $data['pageContent'];
//    }

public function index()
{  
  echo 'You are here okay' . '<br />';
    $test['array'] = $this->getTitle('welcome_message');
    print_r($test['array']);
    die();
    
    $data['page_title'] = $this->getTitle('welcome_message');
  $data['page_content'] = $this->getContent('welcome_message');
  
  $this->load->view('templates/header', $data);
  $this->load->view('templates/sidebar');
  $this->load->view('templates/banner');
  $this->load->view('templates/rightcol');
  $this->load->view('pages/welcome_message', $data);
  $this->load->view('templates/footer');
}

As you can see I commented out two functions so that I could move them to a helper as I need to call these functions from several controllers.

My helper looks like this now.

Code:
&lt;?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

  if ( ! function_exists('getTitle'))
  {

   function getTitle($pageName)
{
    $this->load->model('Page_model'); /*Loads page_model*/

    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5); /*Gets browser language*/
    $pageTitle = $pageName . '.title';

    $data['pageTitle'] = $this->Page_model->page_data($options = array('getKey' => $pageTitle, 'locale' => $lang));
  
    return $data['pageTitle'];
  
   }
    }

if ( ! function_exists('getContent'))
  {  
   function getContent($pageName)
{
    $this->load->model('Page_model');
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5);
    $pageContent = $pageName . '.content';
    
    $data['pageContent'] = $this->Page_model->page_data($options = array('getKey' => $pageContent, 'locale' => $lang));
  
    return $data['pageContent'];
   }
    }

/* End of file content_helper.php */
/* Location: ./system/helpers/content_helper.php */

However I get absolutely nothing back and in fact it seems I am not even hitting my helper function, though I am getting into the helper Sad please someone, rescue me from misery!!!
#2

[eluser]Mike Cocklin[/eluser]
Ok, so i am slower than the average bear!!!

I have worked it out now.

content_helper now looks like this
Code:
&lt;?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

      
if ( ! function_exists('getContent'))
  {
   function getTitle($pageName)
{

      $CI =& get_instance();
      $CI->load->model('Page_model'); /*Loads page_model*/
    
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5); /*Gets browser language*/
    $pageTitle = $pageName . '.title';

    $data['pageTitle'] = $CI->Page_model->page_data($options = array('getKey' => $pageTitle, 'locale' => $lang));
  
    return $data['pageTitle'];
  
   }
}

and controller now looks like this

Code:
public function index()
{  
  $data['page_title'] = getTitle('welcome_message');
  $data['page_content'] = getContent('welcome_message');
  
  $this->load->view('templates/header', $data);
  $this->load->view('templates/sidebar');
  $this->load->view('templates/banner');
  $this->load->view('templates/rightcol');
  $this->load->view('pages/welcome_message', $data);
  $this->load->view('templates/footer');
}

Sorry I didn't wait for any input and if anyone sees this and notices a better way or notices something I am doing wrong then please post anyway.

Otherwise Thanks all!!!
#3

[eluser]InsiteFX[/eluser]
Anytime you call anything in from CI you need to get the CI Super Object.
#4

[eluser]CroNiX[/eluser]
[quote author="Mike Cocklin" date="1336060859"]

Code:
public function index()
{  
  $data['page_title'] = getTitle('welcome_message');
  $data['page_content'] = getContent('welcome_message');
  
  $this->load->view('templates/header', $data);
  $this->load->view('templates/sidebar');
  $this->load->view('templates/banner');
  $this->load->view('templates/rightcol');
  $this->load->view('pages/welcome_message', $data);
  $this->load->view('templates/footer');
}
[/quote]Why not just turn that into another helper (or library) so you don't have to repeat that for each controller/method?
Code:
public function create_template($type = '')
{
  $CI =& get_instance();
  $data['page_title'] = getTitle($type);  //maybe move that function into this one
  $data['page_content'] = $getContent($type); //maybe move that function into this one
  
  $this->CI->load->view('templates/header', $data);
  $this->CI->load->view('templates/sidebar');
  $this->CI->load->view('templates/banner');
  $this->CI->load->view('templates/rightcol');
  $this->CI->load->view('pages/welcome_message', $data);
  $this->CI->load->view('templates/footer');
}

Then, in your controller, you would just:
Code:
create_template('welcome_message');
#5

[eluser]Mike Cocklin[/eluser]
Thanks both for your input and suggestions,

It's your input that helps us beginners to move forward. Both answers have helped a lot.
#6

[eluser]InsiteFX[/eluser]
Or create a MY_Controller and extend your other controllers from it!




Theme © iAndrew 2016 - Forum software by © MyBB