Displaying unique ID but not allow editing
Displaying unique ID but not allow editing
waynehultum
Posts: 5Questions: 0Answers: 0
Hi,
I'm trying out the editor as a replacement for our paper job book system.
Everything is fine except I would like the id (AUTO_INCREMENT) field to be used as the job number. I would like this to be displayed but not editable.
I can remove the ID field from the add/edit form but when I add or edit i get the following error:
DataTables warning (table id = 'example'): Requested unknown parameter 'id' from the data source for row 69
The ID is not showing in the datatable when I click OK on the error message. When I refresh the page after the error the ID shows.
Could some please help with this.
Kind regards
Wayne.
Code for test page.
[code]
var editor; // use a global for the submit and return data rendering in the examples
$(document).ready(function() {
editor = new $.fn.dataTable.Editor( {
"ajaxUrl": "php/browsers.php",
"domTable": "#example",
"fields": [ {
"label": "Browser:",
"name": "browser"
}, {
"label": "Rendering engine:",
"name": "engine"
}, {
"label": "Platform:",
"name": "platform"
}, {
"label": "Version:",
"name": "version"
}, {
"label": "CSS grade:",
"name": "grade"
}
],
"events": {
"onSetData": function (json, setData, action) {
if ( action === "create" || action === "edit" ) {
setData.updated_date = json.data.updated_date;
}
}
}
} );
$('#example').dataTable( {
"sDom": "Tfrtip",
"sAjaxSource": "php/browsers.php",
"aoColumns": [
{ "mDataProp": "id" },
{ "mDataProp": "browser" },
{ "mDataProp": "engine" },
{ "mDataProp": "platform" },
{ "mDataProp": "version", "sClass": "center" },
{ "mDataProp": "grade", "sClass": "center" }
],
"oTableTools": {
"sRowSelect": "multi",
"aButtons": [
{ "sExtends": "editor_create", "editor": editor },
{ "sExtends": "editor_edit", "editor": editor },
{ "sExtends": "editor_remove", "editor": editor }
]
}
} );
} );
[/code]
browsers.php
[code]
$editor = new DTEditor(
$db, // DB resource
'browsers', // DB table
'id', // Primary key
'row_', // ID prefix to add to the TR rows (makes it valid and unique)
array( // Fields
new DTField( array(
"name" => "id",
"dbField" => "id",
"set" => false,
"dynamicGet" => true
) ),
new DTField( array(
"name" => "engine",
"dbField" => "engine",
"validator" => "DTValidate::required"
) ),
new DTField( array(
"name" => "browser",
"dbField" => "browser",
"validator" => "DTValidate::required"
) ),
new DTField( array(
"name" => "platform",
"dbField" => "platform"
) ),
new DTField( array(
"name" => "version",
"dbField" => "version"
) ),
new DTField( array(
"name" => "grade",
"dbField" => "grade",
"validator" => "DTValidate::required"
) )
)
);
// The "process" method will handle data get, create, edit and delete
// requests from the client
echo json_encode( $editor->process($_POST) );
[/code]
Could
I'm trying out the editor as a replacement for our paper job book system.
Everything is fine except I would like the id (AUTO_INCREMENT) field to be used as the job number. I would like this to be displayed but not editable.
I can remove the ID field from the add/edit form but when I add or edit i get the following error:
DataTables warning (table id = 'example'): Requested unknown parameter 'id' from the data source for row 69
The ID is not showing in the datatable when I click OK on the error message. When I refresh the page after the error the ID shows.
Could some please help with this.
Kind regards
Wayne.
Code for test page.
[code]
var editor; // use a global for the submit and return data rendering in the examples
$(document).ready(function() {
editor = new $.fn.dataTable.Editor( {
"ajaxUrl": "php/browsers.php",
"domTable": "#example",
"fields": [ {
"label": "Browser:",
"name": "browser"
}, {
"label": "Rendering engine:",
"name": "engine"
}, {
"label": "Platform:",
"name": "platform"
}, {
"label": "Version:",
"name": "version"
}, {
"label": "CSS grade:",
"name": "grade"
}
],
"events": {
"onSetData": function (json, setData, action) {
if ( action === "create" || action === "edit" ) {
setData.updated_date = json.data.updated_date;
}
}
}
} );
$('#example').dataTable( {
"sDom": "Tfrtip",
"sAjaxSource": "php/browsers.php",
"aoColumns": [
{ "mDataProp": "id" },
{ "mDataProp": "browser" },
{ "mDataProp": "engine" },
{ "mDataProp": "platform" },
{ "mDataProp": "version", "sClass": "center" },
{ "mDataProp": "grade", "sClass": "center" }
],
"oTableTools": {
"sRowSelect": "multi",
"aButtons": [
{ "sExtends": "editor_create", "editor": editor },
{ "sExtends": "editor_edit", "editor": editor },
{ "sExtends": "editor_remove", "editor": editor }
]
}
} );
} );
[/code]
browsers.php
[code]
$editor = new DTEditor(
$db, // DB resource
'browsers', // DB table
'id', // Primary key
'row_', // ID prefix to add to the TR rows (makes it valid and unique)
array( // Fields
new DTField( array(
"name" => "id",
"dbField" => "id",
"set" => false,
"dynamicGet" => true
) ),
new DTField( array(
"name" => "engine",
"dbField" => "engine",
"validator" => "DTValidate::required"
) ),
new DTField( array(
"name" => "browser",
"dbField" => "browser",
"validator" => "DTValidate::required"
) ),
new DTField( array(
"name" => "platform",
"dbField" => "platform"
) ),
new DTField( array(
"name" => "version",
"dbField" => "version"
) ),
new DTField( array(
"name" => "grade",
"dbField" => "grade",
"validator" => "DTValidate::required"
) )
)
);
// The "process" method will handle data get, create, edit and delete
// requests from the client
echo json_encode( $editor->process($_POST) );
[/code]
Could
This discussion has been closed.
Replies
There are a few options open to you here for how this could be achieved.
1. You could add a "readonly" field to your Editor initialisation - something like:
[code]
{
"label": "Job number:",
"name": "id",
"type": "readonly"
}
[/code]
Then using the Editor PHP class you should add "set" => false, to the 'id' field input, so that DTEditor doesn't try to set the value of that column!
2. Very similar to the above, but rather than using a readonly field, you could disable the field when it is shown:
[code]
editor.disable('id');
[/code]
You'd still need to tell DTEditor in PHP to ignore the set for this field.
One other point you might want to consider - you could use the onOpen event + the show/hide API methods to show and hide the Job number ID field (presumably since it is auto generated, there is little use in showing it in the 'create' form (unless you want to show a message saying that it will be auto generated - the same approach applies as this):
[code]
editor.on('onShow', function() {
if ( this.s.action === 'create' ) {
this.hide('id');
}
else {
this.show('id');
}
} );
[/code]
Editor 1.1 will have onInitCreate etc events to make this a little bit clearer in future. Editor 1.1 will be out int he next few days :-)
Regards,
Allan
Both option 1 and 2 stop the error and allow the record to be inserted/edited.
However when a record is inserted the ID is not shown in the datatable until it's refreshed.
Is there a way to refresh the datatable after inserting? or is there another method to use.
Regards
Wayne.
Allan