Hi all! This is my second library.
If you have a few dependent dropdowns on any page this library for you.
When you made selection in a "Parent" dropdown the library refreshes a "child" dropdown.
Advantage of this library:
- integration is easily
- it is not required to change a template
- it is not required to create a callback function
The library works perfectly with GC v 1.5.x and CI 3.x
_______________________________________
Download here:
v 1.5.1 [attachment=1127:Gc_dependent_select.php]
__________________________________________
v 1.2.0 [attachment=378:gc_dependent_select.php]
_______________________________________
v 1.1.1 [attachment=364:gc_dependent_select.php]
_______________________________________
v 1.1.0 [attachment=360:gc_dependent_select.php]
The library v.1.1.0 has a bug!
http://www.grocerycr...t__20#entry4344
_______________________________________
How to use (v. 1.2.0.):
[attachment=359:cc.jpg]
[attachment=358:c.jpg]
$crud = new grocery_CRUD(); $crud->set_table('dd_goods'); $crud->set_relation('goods_country', 'dd_country', 'country_title'); $crud->set_relation('goods_state', 'dd_state', 'state_title'); $crud->set_relation('goods_city', 'dd_city', 'city_title'); $this->load->library('gc_dependent_select'); // settings $fields = array( // first field: 'goods_country' => array( // first dropdown name 'table_name' => 'dd_country', // table of country 'title' => 'country_title', // country title 'relate' => null // the first dropdown hasn't a relation ), // second field 'goods_state' => array( // second dropdown name 'table_name' => 'dd_state', // table of state 'title' => 'state_title', // state title 'id_field' => 'state_id', // table of state: primary key 'relate' => 'country_ids', // table of state: 'data-placeholder' => 'select state' //dropdown's data-placeholder: ), // third field. same settings 'goods_city' => array( 'table_name' => 'dd_city', 'where' =>"post_code>'167'", // string. It's an optional parameter. 'order_by'=>"state_title DESC", // string. It's an optional parameter. 'title' => 'id: {city_id} / city : {city_title}', // now you can use this format ))) 'id_field' => 'city_id', 'relate' => 'state_ids', 'data-placeholder' => 'select city' ) ); $config = array( 'main_table' => 'dd_goods', 'main_table_primary' => 'goods_id', "url" => base_url() . __CLASS__ . '/' . __FUNCTION__ . '/', path to method 'ajax_loader' => base_url() . 'ajax-loader.gif' // path to ajax-loader image. It's an optional parameter 'segment_name' =>'Your_segment_name' // It's an optional parameter. by default "get_items" ); $categories = new gc_dependent_select($crud, $fields, $config); // first method: //$output = $categories->render(); // the second method: $js = $categories->get_js(); $output = $crud->render(); $output->output.= $js; $this->_example_output($output);
Note:
You can't use the callback_edit_field and callback_add_field for this field. You can use callback_edit_field and callback_add_field only for the first field
example 2:
[attachment=379:schema.jpg]
function test() { $crud = new grocery_CRUD(); $crud->set_table('zone_allocate_subzone'); $crud->set_relation('category_id', 'category', 'category_name'); $crud->set_relation('subcategory_id', 'sub_category', 'subcategory_name'); $crud->set_relation('zone_id', 'zone', 'zone_name'); $crud->set_relation('subzone_id', 'sub_zone', 'subzone_name'); $this->load->library('gc_dependent_select'); $fields = array( 'category_id' => array(// first dropdown name 'table_name' => 'category', // table of country 'title' => 'country_title', // country title 'relate' => null // the first dropdown hasn't a relation ), 'subcategory_id' => array(// second dropdown name 'table_name' => 'sub_category', // table of state 'title' => 'subcategory_name', // state title 'id_field' => 'id', // table of state: primary key 'relate' => 'category_id', // table of state: 'data-placeholder' => 'Select Subcategory' //dropdown's data-placeholder: ) ); $config = array( 'main_table' => 'dd_goods', 'main_table_primary' => 'goods_id', "url" => base_url() . __CLASS__ . '/' . __FUNCTION__ . '/', ); $categories = new gc_dependent_select($crud, $fields, $config); $js = $categories->get_js(); $fields2 = array( 'zone_id' => array(// first dropdown name 'table_name' => 'zone', // table of country 'title' => 'country_title', // country title 'relate' => null // the first dropdown hasn't a relation ), 'subzone_id' => array(// second dropdown name 'table_name' => 'sub_zone', // table of state 'title' => 'subzone_name', // state title 'id_field' => 'id', // table of state: primary key 'relate' => 'zone_id', // table of state: 'data-placeholder' => 'Select Subzone' //dropdown's data-placeholder: ) ); // change the "segment_name"!!! $config2 = array( 'main_table' => 'dd_goods', 'main_table_primary' => 'goods_id', "url" => base_url() . __CLASS__ . '/' . __FUNCTION__ . '/', 'segment_name' => "other_name" ); $categories2 = new gc_dependent_select($crud, $fields2, $config2); $js2 = $categories2->get_js(); $output = $crud->render(); $output->output.= $js . $js2; $this->_example_output($output); }
---------------------------------------------------
P.S. Thanks to web-johnny, thanks to KaBaDaBrA and to me /public/style_emoticons/#EMO_DIR#/smile.png .
P.S.S. Code can contain some bugs . If you find a bug - report, please.
Sorry, my English is poor.