grocery_CRUD_v1.2.zip
"set_relation" is pretty good.
But... the relation table's row count was huge, it can't render select's options.
My solution is not simple yet, but it can be one of the ways I think.
[attachment=79:picker.png]
[indent=1]
Original:
Render a select with options. (every rows in table)
Mine:
Open modal dialog what return the selected row's primary key. (same as nomal list interface)[/indent]
A example below is "Customer calls Employee".
diff -ru --strip-trailing-cr CodeIgniter_2.1.0.orig/application/controllers/examples.php CodeIgniter_2.1.0/application/controllers/examples.php
--- CodeIgniter_2.1.0.orig/application/controllers/examples.php 2012-03-15 21:27:32.000000000 +0900
+++ CodeIgniter_2.1.0/application/controllers/examples.php 2012-03-22 23:28:28.000000000 +0900
@@ -2,6 +2,44 @@
class Examples extends CI_Controller {
+ function picker_close($id)
+ {
+ echo '<script type="text/javascript">';
+ echo "window.returnValue = '$id';";
+ echo 'self.close();';
+ echo '</script>';
+ }
+
+ function employee_picker()
+ {
+ $crud = new grocery_CRUD();
+
+ $crud->set_table('employees');
+ $crud->set_relation('officeCode', 'offices', 'city');
+ $crud->display_as('officeCode','Office City');
+
+ $crud->unset_add();
+ $crud->unset_edit();
+ $crud->unset_delete();
+ $crud->add_action('Pick', 'dummy.png', 'examples/picker_close');
+
+ $output = $crud->render();
+ $this->_example_output($output);
+ }
+
+ function _employee_picker($value, $primary_key)
+ {
+ $script =
+ "ret = showModalDialog('".site_url('examples/employee_picker')."');".
+ "if (ret != null) $('[name=salesRepEmployeeNumber]').val(ret);"
+ ;
+ $data = array(
+ 'content' => 'Pick Employee',
+ 'onclick' => $script
+ );
+ return form_input('salesRepEmployeeNumber', $value, 'style="width:100px;"').' '.form_button($data);
+ }
+
function __construct()
{
parent::__construct();
@@ -83,6 +121,8 @@
$crud->set_subject('Customer');
$crud->set_relation('salesRepEmployeeNumber','employees','{lastName} {firstName}');
+ $crud->callback_field('salesRepEmployeeNumber', array($this, '_employee_picker'));
+
$output = $crud->render();
$this->_example_output($output);