Исполнение SQL запроса по нажатию кнопки


Nameless
 Поделиться

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

Прошу помощи дать пример кода на выполнение вот такого sql запроса:

UPDATE `product_option_value` SET `subtract` = '0' WHERE `quantity` <= '0';

нужна возможность запускать этот запрос по кнопки из админки раздел товары в шаблоне product_list.tpl

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

пример кода не дам, но сделать это не сложно

вы можете обойтись созданием нового контроллера или редактированием любого удобного, например, ControllerCatalogProduct (но лучше все же отдельный)

добавляете новый public метод, например updateSubtract, в котором для начала проверяете разрешение пользователю на запись

$this->user->hasPermission('modify', 'catalog/product')

а затем выполняете ваш запрос

$this->db->query("UPDATE " . DB_PREFIX . "product_option_value ...");

после этого вы можете вызывать данный метод из строки браузера

а чтобы кнопкой, то редактируйте шаблон списка, добавив кнопку в желаемое место .tpl и по клику на нее выполняйте ajax-запрос к новому методу, не забудьте только передать token

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

Те нужно создать admin/controller папку myqyery в ней фай myqyery.php с таким кодом:

<?php
	public function updateSubtract() {
		if (!$this->user->hasPermission('modify', 'catalog/product')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		$this->db->query("UPDATE " . DB_PREFIX . "`product_option_value` SET `weight` = '0' WHERE `quantity` <= '0'");
		return $this->updateSubtract;
	}
	
}

Далее дописать по аналогии на пример в product_list.tpl :

<button type="button" class="btn btn-default" onclick="$('#form-product').attr('action', '<?php echo $updateSubtract; ?>').submit()"><i class="fa fa-minus"></i></button>

 

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

нуу.. почти :)

во-первых, return метода точно не должен быть вызовом этого же метода

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

заполняйте ошибкой или количеством проапдейченых строк локальную переменную, например, $json и возвращайте ее

		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));

в tpl не отправляйте форму, а делайте ajax-запрос, поищите пример отправки такого запроса в этом же файле, по типу содержимого autocomplete.source

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

таак начинаю подзапутываться, и так php файл будет выгледеть тогда так:

<?php
	public function updateSubtract() {
		if (!$this->user->hasPermission('modify', 'catalog/product')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		$this->db->query("UPDATE " . DB_PREFIX . "`product_option_value` SET `weight` = '0' WHERE `quantity` <= '0'");
		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}
	
}

а вот про autocomplete.source нашел только подобные конструкции:

  <script type="text/javascript"><!--
$('input[name=\'filter_name\']').autocomplete({

 

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

2 часа назад, Nameless сказал:

таак начинаю подзапутываться, и так php файл будет выгледеть тогда так:

 

вот так, с определением вашего класса и заполнением переменной

<?php
class ControllerMyqyeryMyqyery extends Controller {
	public function updateSubtract() {
		$json = array();
		if (!$this->user->hasPermission('modify', 'catalog/product')) {
			$json['warning'] = $this->language->get('error_permission');
		}
		$this->db->query("UPDATE " . DB_PREFIX . "`product_option_value` SET `weight` = '0' WHERE `quantity` <= '0'");
		$json['success'] = (int)$this->db->countAffected();
		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}
}

 

 

2 часа назад, Nameless сказал:

а вот про autocomplete.source нашел только подобные конструкции:

 

свойство autocomplete'а я привел как пример для ajax-запроса, только у вас он будет проще, примерно такой

<script type="text/javascript">
$(document).ready(function() {
  $('#id-вашей-кнопки').on('click',function(){
    $.ajax({
      url: 'index.php?route=myqyery/myqyery/updateSubtract&token=<?php echo $token; ?>',
      dataType: 'json',
      success: function(json) {
        if (json.warning) {
          alert(json.warning);
        } else if (json.success) {
          alert('Обновлено строк: ' + json.success);
        }
      }
    });
  });
});
</script>

 

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

увы не завелось, добавил в admin/view/template/catalog/product_list.tpl:

Кнопку:

<button type="button" class="btn btn-default" onclick="$('#product-update-subtract').attr('action', '<?php echo $updateSubtract; ?>').submit()"><i class="fa fa-minus"></i></button>

(она отобразилась, но по клику не чего не происходит)

ниже с блоками скриптов в этом же файле добил и наш:

  <script type="text/javascript">
$(document).ready(function() {
  $('#product-update-subtract').on('click',function(){
    $.ajax({
      url: 'index.php?route=myqyery/myqyery/updateSubtract&token=<?php echo $token; ?>',
      dataType: 'json',
      success: function(json) {
        if (json.warning) {
          alert(json.warning);
        } else if (json.success) {
          alert('Обновлено строк: ' + json.success);
        }
      }
    });
  });
});
</script>

создал файл myqyery.php в директорию admin/controller/myqyery с кодом:

<?php
class ControllerMyqyeryMyqyery extends Controller {
	public function updateSubtract() {
		$json = array();
		if (!$this->user->hasPermission('modify', 'catalog/product')) {
			$json['warning'] = $this->language->get('error_permission');
		}
		$this->db->query("UPDATE " . DB_PREFIX . "`product_option_value` SET `weight` = '0' WHERE `quantity` <= '0'");
		$json['success'] = (int)$this->db->countAffected();
		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}
}

Чего упустил?

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

10 минуту назад, Nameless сказал:

увы не завелось, добавил в admin/view/template/catalog/product_list.tpl:

Кнопку:


<button type="button" class="btn btn-default" onclick="$('#product-update-subtract').attr('action', '<?php echo $updateSubtract; ?>').submit()"><i class="fa fa-minus"></i></button>

(она отобразилась, но по клику не чего не происходит)

 

а что по-вашему должно произойти?

будь я на месте браузера с подгруженным jquery, я бы по клику на эту кнопку нашел элемент #product-update-subtract, добавил бы ему атрибут action и попробовал бы его отправить как форму.. хотя нет, даже пробовать бы не стал, потому как такого элемента я так и не найду

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

прям от души! все заработало, надеюсь через несколько деньков опубликую в ветки выше для чего все это нужно было)

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

Присоединяйтесь к обсуждению

Вы можете опубликовать сейчас и зарегистрироваться позже. Если у вас есть учётная запись, войдите, чтобы публиковать под своей учётной записью.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Показать вместо этого как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Нельзя вставлять изображения напрямую. Загрузите или вставьте изображения по URL.

 Поделиться