Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

редактируемое поле


stasonsky
 Поделиться

Рекомендованные сообщения

В админке, при просмотре заказа, хочу сделать редактируемым поле с отметками. Данные будут храниться в БД, а в поле можно будет перезаписывать значение. Для этого в таблице 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, "&quot;")
				.replace(/'/g, "&#039;");
            }
            function unescapeQuot(text) {
				return text
				.replace('&quot;', '"')
				.replace('&#039;', "'");
			}
		$('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>

 

Изменено пользователем stasonsky
Ссылка на комментарий
Поделиться на других сайтах


Не проверял, конечно, на ошибки все, но вот тут 

33 минуты назад, stasonsky сказал:

в admin/view/template/sale/order_info.tpl :

весьма странный вызов для аякс-запроса:

$('tbody').on('click', '#save-field', function(){
Ссылка на комментарий
Поделиться на других сайтах


38 минут назад, stasonsky сказал:

в admin/view/template/sale/order_info.tpl :

А ваше форматирование наводит на мысль, что вы не заметили, как 

 

38 минут назад, stasonsky сказал:

$('.editable-field').on('click', function(){


кончился намного раньше, вот тут

 

39 минут назад, stasonsky сказал:

$(this).popover('show');
});


используйте нормальный IDE или редактор

Ссылка на комментарий
Поделиться на других сайтах


В 06.02.2021 в 14:17, Shureg сказал:

Не проверял, конечно, на ошибки все, но вот тут 

весьма странный вызов для аякс-запроса:


$('tbody').on('click', '#save-field', function(){

Вы не подскажете как написать простейший AJAX запрос, который после нажатия кнопки с id="button-refresh" перезапишет данные из поля input в ячейку БД ?

К примеру есть поле с кнопкой, которое выводит уже существующее значение из БД. Нужно по нажатию кнопки обновить вписанное в него значение.

<input type="text" name="order_note" value="<?php echo $product['order_product_note']; ?>" class="form-control" />
<button type="button"  id="button-refresh" data-toggle="tooltip" title="обновить" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-primary"><i class="fa fa-refresh"></i></button>

 

Ссылка на комментарий
Поделиться на других сайтах


допустим в tpl будет такой AJAX запрос

$('#button-refresh').on('click', function() { //условие выполнения - нажатие на кнопку с id="button-refresh"
	var noteId = $(this).data('id'); //переменная для записи значения, не знаю нужно или нет
	$.ajax({
		url: 'index.php?route=sale/order/updateNote', //путь: папка (admin/controller/sale)/файл order.php/function updateNote
		type: 'POST',
		data: {order_product_id: noteId}, //привязка id товара к id переменной, если я правильно понимаю
		success: function(data) {  
                    if (data){
                      alert('Заметка добавлена');
                    } else {  
                      alert('Ошибка записи'); 
                    }
        }
    });
});            

он правильно составлен? чтоб потом в контроллере admin/controller/sale/order.php прописать функциюpublic function updateNote() {

Ссылка на комментарий
Поделиться на других сайтах


Подскажите, пожалуйста, как составить AJAX запрос, чтоб из поля input (admin/view/template/sale/order_info.tpl) при нажатии на кнопку, значение order_product_note из поля input вносились в таблицу БД (oc_order_product) с соответствующим order_product_id.

<input type="text" name="order_note" id="input-note" class="form-control" />
<button type="button"  id="button-refresh" data-toggle="tooltip" title="обновить" class="btn btn-primary"></button>

Функцию в (admin/model/sale/order.php) для записи значения создал так:

public function updateNote($order_product_id, $order_product_note) {
		$this->db->query("UPDATE " . DB_PREFIX . "order_product SET order_product_note = '" . (int)$order_product_note . "' WHERE order_product_id = '" . (int)$order_product_id . "'");
}

 

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.