Hi,
Please,
Modify file library/grocery_crud.php:
on "grocery_CRUD" Class
public function set_relation($field_name , $related_table, $related_title_field, $where_clause = null, $order_by = null, $default_value=null)
{
$this->relation[$field_name] = array($field_name, $related_table,$related_title_field, $where_clause, $order_by, $default_value,$this->getState());
return $this;
}
Then, on "grocery_CRUD_Layout" Class
protected function get_relation_input($field_info,$value)
{
$this->set_css($this->default_css_path.'/jquery_plugins/chosen/chosen.css');
$this->set_js($this->default_javascript_path.'/jquery_plugins/jquery.chosen.min.js');
$this->set_js($this->default_javascript_path.'/jquery_plugins/config/jquery.chosen.config.js');
$ajax_limitation = 10000;
$total_rows = $this->get_relation_total_rows($field_info->extras);
//Check if we will use ajax for our queries or just clien-side javascript
$using_ajax = $total_rows > $ajax_limitation ? true : false;
//We will not use it for now. It is not ready yet. Probably we will have this functionality at version 1.4
$using_ajax = false;
//If total rows are more than the limitation, use the ajax plugin
$ajax_or_not_class = $using_ajax ? 'chosen-select' : 'chosen-select';
$this->_inline_js("var ajax_relation_url = '".$this->getAjaxRelationUrl()."';\n");
$select_title = str_replace('{field_display_as}',$field_info->display_as,$this->l('set_relation_title'));
$input = "<select id='field-{$field_info->name}' name='{$field_info->name}' class='$ajax_or_not_class' data-placeholder='$select_title' style='width:300px'>";
$input .= "<option value=''></option>";
if(!$using_ajax)
{
// modified by chava
$state = $field_info->extras[6]; // add|edit| ..etc
$default_value = $field_info->extras[5];
if ($state === 'add')
$value = $default_value;
$options_array = $this->get_relation_array($field_info->extras);
foreach($options_array as $option_value => $option)
{
$selected = !empty($value) && $value == $option_value ? "selected='selected'" : '';
$input .= "<option value='$option_value' $selected >$option</option>";
}
}
elseif(!empty($value) || (is_numeric($value) && $value == '0') ) //If it's ajax then we only need the selected items and not all the items
{
$selected_options_array = $this->get_relation_array($field_info->extras, $value);
foreach($selected_options_array as $option_value => $option)
{
$input .= "<option value='$option_value'selected='selected' >$option</option>";
}
}
$input .= "</select>";
return $input;
}
Finally, on your controller:
public function cliente()
{
$this->load->database();
$this->load->helper(array ('url', 'file', 'form'));
$this->load->library('grocery_CRUD');
$this->grocery_crud->set_theme('flexigrid');
$this->grocery_crud->set_table('clientes');
$this->grocery_crud->set_relation('tipopessoa_id','tipopessoa','tipopessoa_ds',null, null, $default_value = 1); // 1 is default tipopessoa_id
$this->grocery_crud->display_as('nome', 'Cliente');
$this->grocery_crud->display_as('email', 'E-mail');
$this->grocery_crud->display_as('ddd', 'DDD');
$this->grocery_crud->display_as('endereco', 'Endereço');
$this->grocery_crud->display_as('tipopessoa_id', 'Tipo');
$this->grocery_crud->set_subject('Cliente');
$output = $this->grocery_crud->render();
$this->_example_output($output);
}
function _example_output($output = null)
{
$this->load->view('tabela',$output);
}
For Dropdown Type:
Modify File library/grocery_crud.php:
On "grocery_CRUD" Class
public function field_type($field , $type, $extras = null, $default_value = null)
{
if ($type === 'dropdown')
{
$extras[0] = $extras;
$extras[1] = $default_value;
$extras[2] = $this->getState();
}
return $this->change_field_type($field , $type, $extras);
}
Then, on "grocery_CRUD_Layout" Class
protected function get_dropdown_input($field_info,$value)
{
$this->set_css($this->default_css_path.'/jquery_plugins/chosen/chosen.css');
$this->set_js($this->default_javascript_path.'/jquery_plugins/jquery.chosen.min.js');
$this->set_js($this->default_javascript_path.'/jquery_plugins/config/jquery.chosen.config.js');
$select_title = str_replace('{field_display_as}',$field_info->display_as,$this->l('set_relation_title'));
// modified by chava
$state = $field_info->extras[2]; // add|edit| ..etc
$default_value = $field_info->extras[1];
if ($state === 'add')
$value = $default_value;
$input = "<select id='field-{$field_info->name}' name='{$field_info->name}' class='chosen-select' data-placeholder='".$select_title."'>";
$options = array('' => '') + $field_info->extras[0];
foreach($options as $option_value => $option_label)
{
$selected = !empty($value) && $value == $option_value ? "selected='selected'" : '';
$input .= "<option value='$option_value' $selected >$option_label</option>";
}
$input .= "</select>";
return $input;
}
Finally, On your controller
public function test()
{
$this->load->library('grocery_CRUD');
$this->grocery_crud->set_theme('flexigrid');
$this->grocery_crud->field_type('type','dropdown',array('hold'='On Hold', 'done'=>'Done'), $default_value = 'hold');
/* Your code */
$output = $this->grocery_crud->render();
$this->_example_output($output);
}
Thanks.
Regards!
--
Chava