fefe
fefe

Reputation: 9055

pass parameters to codeigniters controller

How do I pass to codeigniters controller a parameter via URL? I use IgnitedTables to display jquery DataTable. Actually I use ajax to populate table (cms_datatable()) I would like to pass somehow a language parameter via url to can filter content on language

I have the following

public function cms($cms_lang = '') {

    $this->cms_lang = $this->session->userdata('cms_lang');
    if(isset($cms_lang)){
        $this->cms_lang['current_lang'] = $cms_lang;
    } else {
        $this->cms_lang['current_lang'] = 'de';
    }

        $tmpl = array('table_open' => '<table id="cms_table" border="0" cellpadding="2" cellspacing="2" class="table table-striped table-primary table-condensed">');
        $this->table->set_template($tmpl);
        $this->table->set_heading('<input name="id[]" type="checkbox">', 'Title', 'SEF URL', 'Letztens bearbeitet', 'Status');
        $this->load->view('admin/admin', $this->data);
    }

    public function cms_datatable() {
    error_reporting(-1);
    // var_dump($this->cms_lang['current_lang']); returns NULL
    $this->datatables->select('id,title,sef_title, creation_date,status')            
            ->edit_column('title', '<a href="/admin/dashboard/edit_post/$1">$2</a>', 'id, title')
            ->unset_column('creation_date')
            ->add_column('creation_date', '<span class="label label-danger">$1</span>', 'creation_date')
            ->unset_column('status')
            ->add_column('status', get_buttons('$1'), 'id')
            ->from('ci_content')
            ->where('language', $this->cms_lang);
    echo $this->datatables->generate();
}

than I try to override the default value of variable $lang like

domain/admin/cms/en

but my var_dump($lang) shows the defualt value

routed as

$route['admin/cms']  = "admin/dashboard/cms";
$route['admin/cms/(:any)']  = "admin/dashboard/cms/$1";

Upvotes: 0

Views: 94

Answers (1)

Jakub
Jakub

Reputation: 20475

your controller fn name is cms_datatable but you're not calling it.

Try using the url routes:

$route['admin/cms']         = "admin/dashboard/cms_datatable";
$route['admin/cms/(:any)']  = "admin/dashboard/cms_datatable/$1";

That route assumes that:

  • admin is your folder
  • dashboard is your controller
  • cms_datatable is your controller fn

Also, re-reading your question, I am not sure why you want to pass language variables to EACH controller? Just set it in session and check it that way. Override the default if the session has a different language defined. Having every controller check this is not good form.

Upvotes: 2

Related Questions