COVID2019 и это вот все. Друзья, вся эта история начинает плохо пахнет. Мойте руки, не ходите в люди. Отложите все плановые покупки и положите в носок заначку. Заприте ваших родителей, бабушек-дедушек на даче. Лучше перебдеть чем недобдеть. Берегите себя!

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


Nameless

Recommended Posts

Прошу помощи дать пример кода на выполнение вот такого 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 и попробовал бы его отправить как форму.. хотя нет, даже пробовать бы не стал, потому как такого элемента я так и не найду

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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

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

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.