Inline Edits With PHP/AJAX: Difference between revisions
Jump to navigation
Jump to search
| Line 68: | Line 68: | ||
* Create a page class derived from the shared `AjaxPage` class. | * Create a page class derived from the shared `AjaxPage` class. | ||
* Collect parent id, read parent properties, return markup used to display the editing form. | * Collect parent id, read parent properties, return markup used to display the editing form. | ||
* Test if form was submitted, and save changes accordingly. | |||
== Examples == | == Examples == | ||
Revision as of 21:18, 7 September 2014
Markup
Editable container
Add a `<td> or <div> container as a container for the inline edits.
- The container's content is changed to accommodate the edits, but not the container itself.
Assign the container a class that will serve as a selector for inline edits. Something likestatus-cell,in-stock-cell,access-cell, etc.Assign the container theinline-editclass to use to target it for content updates.The container has adata-idattribute with the parent record's id as its value.Variable nameThe PHP variable used to access the value displayed in the cell is typically$rowon listings pages and$input` on details pages.- The content template will have to accommodate whatever variable is used on its parent page.
- Create an object variable for the purposes of the template that won't collide with the parent page's variables, and that has whatever properties are required by the cell template:
$name = (object)array("id"=>$clip->id, "table"=>'album', "value"=>$clip->title);
Editable content
Create an include file for the flattened content that can be shared between listings and details pages.
- path:
[SECTION_BASE_DIR]_templates/content/[content_type]-cell.php - The actual content of this file doesn't affect the process; it can be anything.
Editing form
Create an include file to be inserted into the DOM by the editing handler.
- path:
[SECTION_BASE_DIR]_templates/forms/[content_type]-edit-form.php - Include a hidden error message container with class
alert alert-error. - Hidden form inputs:
id: parent record id[class_id_param]: parent record id parameter as defined in the parent PHP class- Any filter values needed to present options during the process.
- A form input for the property being edited.
- Submit buttons are optional. Ideally an
onchangeor Enter key keystroke handler will cause the inline form to be submitted.
JavaScript
$.inlineEdit()
- Bundled into
littled.js - Source:
[COMMON_BASE_DIR]scripts/littled/inlineEdit.js - Settings
input_keyThe name of the parameter used to pass the new value to the AJAX page.edit_uriURL of the AJAX script that serves the form markup and commits the changes to the database.events.to_commitType of event that will cause the new value to be saved to the database, e.g. 'keydown', 'change'.- Currently, 'change' is the only value that is implemented.
- implement a keydown handler for textbox form inputs
Initialization on page
$(document).ready(function() {
$('.mycontent-edit-cell').inlineEdit('init', {
input_key: 'mycontentID',
edit_uri: '/path/to/ajax_script.php'
});
});
AJAX
Custom content edits
- Create a page class derived from the shared
AjaxPageclass. - Collect parent id, read parent properties, return markup used to display the editing form.
- Test if form was submitted, and save changes accordingly.
Examples
- Littledamien storage CMS > package status container
- Damien Jay Comics books CMS > in-stock container