Inplace editable
From MoodleDocs
inplace_editable is a mini-API introduced in Moodle 3.1. It allows developers easily add in-place editing of a value on any page. The interface looks very similar to activity name editing but implemented as AMD module using JQuery and is re-usable.
inplace_editable consists of
- Template core/inplace_editable
- Javascript module core/inplace_editable
- Webservice core_update_inplace_editable available from AJAX
- Interface core\inplace_editable_saver_base
Implementing inplace_editable in a plugin
Define class \yourpluginname\inplace_editable_saver, typically it will look like this:
namespace yourpluginname;
class inplace_editable_saver implements core\inplace_editable_saver_base {
public function render_value($itemtype, $object) {
$value = $object->name;
$displayvalue = format_string($value); // You can add html link to the displayvalue.
$editable = has_capability('....', context_system::instance());
$edithint = 'Edit name';
$editlabel = 'New value for '.format_string($value); // Obviously, use strings here!
return new \core\output\inplace_editable('yourpluginname', $itemtype, $object->id, $editable, $displayvalue,
$value, $edithint, $editlabel);
}
public function update_value($itemtype, $itemid, $newvalue) {
// Always clean and validate input!
$newvalue = clean_param($newvalue, PARAM_NOTAGS);
// Check permission of the user to update this item. Call require_login($course) if needed.
require_capability('....', context_system::instance());
$object = $DB->get_record('tablename', array('id' => $itemid), '*', MUST_EXIST);
// Update the record (the best way is to call an existing function for it).
$DB->update_record('tablename', array('id' => $itemid, 'name' => $newvalue));
return $this->render_value($itemtype, $object);
}
}
In your renderer where you display the value call:
$tmpl = new core_tag\inplace_editable_saver();
echo $OUTPUT->render($tmpl->render_value($itemtype, $object));
That's it!
See also
[Category:AJAX]