В админке, при просмотре заказа, хочу сделать редактируемым поле с отметками. Данные будут храниться в БД, а в поле можно будет перезаписывать значение. Для этого в таблице order_product создал дополнительный столбец order_product_note. Вывел его в таблицу списка заказанных товаров. Теперь стоит задача сделать это поле редактируемым. На просторах интернета нашел код и пытаюсь адаптировать его под свою задачу, но безрезультатно. Может кто подсказать что не так и как сделать, чтоб было так. Привожу пример кода:
в модели admin/model/sale/order.php :
public function editField($field, $value, $order_product_id) {
$table = DB_PREFIX . "order_product";
$where = '';
$value = $this->db->escape($value);
$this->db->query("UPDATE " . $table . " SET " . $field . " = '" . $value . "' WHERE order_product_id = '" . (int)$order_product_id . "'" . $where);
$query = $this->db->query("SELECT " . $field . " FROM " . $table . " WHERE order_product_id = '" . (int)$order_product_id . "'" . $where);
return $query->row[$field];
}
в контроллере admin/controller/sale/order.php :
public function editField() {
$json = array();
$json['error'] = false;
$this->load->model('sale/order');
$this->language->load('sale/order');
if (isset($this->request->get['order_product_id']) && isset($this->request->get['field']) && isset($this->request->get['value'])) {
$order_product_id = $this->request->get['order_product_id'];
$field = $this->request->get['field'];
$value = $this->request->get['value'];
$newvalue = html_entity_decode($this->model_sale_order->editField($field, $value, $order_product_id), ENT_QUOTES, 'UTF-8');
$json['value'] = $newvalue;
} else {
$json['error'] = '';
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
в admin/view/template/sale/order_info.tpl :
<script type="text/javascript">
$('.editable-field').on('click', function(){
var splitted = $(this).attr('id').split('-');
var order_product_id = splitted[1];
var field = splitted[0];
var save_button = '<button data-field="'+field+'" data-id="'+order_product_id+'" id="save-field" type="button" class="btn btn-primary"><i class="fa fa-save"></i></button>';
$('.popover').popover('hide', function() {
$('.popover').remove();
});
$(this).popover({
html: true,
placement: 'bottom',
trigger: 'manual',
content: function() {
return input.replace('%value',escapeQuot($(this).text()));
}
});
$(this).popover('show');
});
function escapeQuot(text) {
return text
.replace(/"/g, """)
.replace(/'/g, "'");
}
function unescapeQuot(text) {
return text
.replace('"', '"')
.replace(''', "'");
}
$('tbody').on('click', '#save-field', function(){
var order_product_id = $(this).data('id');
var field = $(this).data('field');
var value = $('#field'+order_product_id).val();
var data = {
order_product_id : order_product_id,
field : field,
value : unescapeQuot(value),
};
$.ajax({
url: 'index.php?route=sale/order/editfield&token=<?php echo $token; ?>',
data: data,
dataType: 'json',
success: function(json) {
if (json['error']){
alert(json['error']);
} else {
$('#'+field+'-'+order_product_id).text(json['value']);
}
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus, errorThrown);
}
});
$('.popover').remove();
});
</script>
и само поле:
<span id="order_product_note-<?php echo $product['order_product_id']; ?>" class="editable-field"><?php echo $product['order_product_note']; ?></span>