Перейти к содержанию

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

Добрый день, нужна помощь.

Opencart Version 2.1.0.2 (rs.1)
Есть некий модуль:
во фронте модалка, в которую пользователь оставляет заявку.
в админке форма со всеми заявками.
Модуль делал я сам, когда только знакомился с opencart (далеко я с тех пор не ушел :-D)
нашел в инете какойто мануал и тупо оттуда все слизывал, меняя некоторые мелочи под себя.
И вот сейчас потребовалось его модифицировать, в частности добавить возможность массово удалять заявки.
Ковыряюсь целый день, штурмую гугл, но после бесчисленного количества попыток я решил попросить помощи)
Собственно в чем проблема:

<td>
  <a href="#" data-toggle="tooltip" title="" class="btn btn-danger comment-delete" data-original-title="Удалить без подтверждения">
    <i class="fa fa-trash-o">
      <input type="hidden" name="id" value="<?php echo $comment['id']; ?>"/>
    </i>
  </a>
</td>

у каждой записи есть кнопка, внутри которой скрытый инпут со значением равным id записи.
по нажатию на кнопку отрабатывает Ajax и id улетает в бэкенд
 

	$('.comment-delete').click(function(){
		gems = $(this).find('input');
		$.ajax({
			url: 'index.php?route=module/comments/deleteComment&token=<?php echo $token; ?>',
			type: 'post',
			data: gems,
			dataType: 'json',
			beforeSend: function() {
				console.log(gems);
			},
			error: function (json) {
				console.log(json);		
			},
			success: function(json) {
				console.log(json);		
				// location.reload();			
			}
		});
		return false;
	});

Все работает, все отлично. И тут в дело вступаю я и делаю вместо кнопок чекбоксы:
 

<input class="box" type="checkbox" name="id" value="<?php echo $comment['id']; ?>">

И меняю скрипт :
 

	$('.comment-delete').click(function(){
		gems = $.map( $(".box:checked"), function(el){ return $(el); });

		$.ajax({
			url: 'index.php?route=module/comments/deleteComment&token=<?php echo $token; ?>',
			type: 'post',
			data: gems,
			dataType: 'json',
			beforeSend: function() {
				console.log(gems);
			},
			error: function (json) {
				console.log(json);		
			},
			success: function(json) {
				console.log(json);		
				// location.reload();			
			}
		});
		return false;
	});

В ответ я получаю балалайку.
в лог падает ошибка что id не определен
вот метод deleteComment из контроллера: 
 

	public function deleteComment(){
		
		// получаем значения
		$text = ($this->request->post['id']) ? $this->request->post['id'] : 0;
		// массив вывода
		$json = array();
		if (!$text) {
			$json['error'] = 'no id';
		} else {
			$this->load->model('comments/comments');
			$json['com_id'] = $this->model_comments_comments->deleteRow($text);
		}
		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}


З.Ы.

Изначально я в массив собирал значения с боксов: 

var gems = $.map( $(".box:checked"), function(el){ return $(el).val(); });

Потом обратил внимание что в варианте с кнопками оно в переменную пишет Jquery обьект инпута и не его значение, и изменил на :
 

gems = $.map( $(".box:checked"), function(el){ return $(el); });

Потом еще было много извращений с массивами, я сам уже перестал понимать что делаю :( :
 

var gems = $('.box').map(function(i,el){
	if($(el).prop('checked')){
		return $(el).val();
	}
}).get();



Помогите кто-нибудь)

Изменено пользователем f4rr3ll1990

Поделиться сообщением


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

если хотите удалять сразу несколько, то как-то так

<input class="box" type="checkbox" name="id[]" value="11">
<input class="box" type="checkbox" name="id[]" value="22">
<input class="box" type="checkbox" name="id[]" value="33">
<button class="comment-delete">delete</button>
 <script>
    $(function(){
        $(".comment-delete").click(function(){
         $.ajax({
                 url:  'index.php?route=module/comments/deleteComment&token=<?php echo $token; ?>',
                 type: 'post',
                 data: $(".box:checked"),
                 dataType: 'json',
                 beforeSend: function() {
                         console.log(gems);
                 },
                 error: function (json) {
                         console.log(json);		
                 },
                 success: function(json) {
                         console.log(json);		
                         // location.reload();			
                 }
         });
        })
    })
 </script>
public function deleteComment(){

        // получаем значения
        $text = ($this->request->post['id']) ? $this->request->post['id'] : 0;
        // массив вывода
        $json = array();
        if (!$text) {
                $json['error'] = 'no id';
        } else {
                $this->load->model('comments/comments');
                foreach($text as $t){
                    $json['com_id'][] = $this->model_comments_comments->deleteRow($t);
                }

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

или сделать еще функцию массового удаления.  передаете туда массив id,  там формируете строку типа

$srt_id = implode(',',$arr_id);

и потом  where id in ( '". $str_id ." ')

  • +1 1

Поделиться сообщением


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

если я правильно понял, то:

сделайте отдельную кнопку, например

.var-comments-delete

На её нажатие сделайте обработчик (тот скрипт оставьте на случай если надо будет поштучно удалять):

$('.var-comments-delete').click(function(){
		$.map( $(".box:checked"), function(el){ return $(el); }).each(function(){ //делаю предположение, что эта строка вытягивает нужные вам строки, (я бы написал по-другому, но не вижу код страницы, поэтому оставил так)
		
		gems = $(this).find('input');
		$.ajax({
			url: 'index.php?route=module/comments/deleteComment&token=<?php echo $token; ?>',
			type: 'post',
			data: gems,
			dataType: 'json',
			beforeSend: function() {
				console.log(gems);
			},
			error: function (json) {
				console.log(json);		
			},
			success: function(json) {
				console.log(json);		
				// location.reload();			
			}
		});
		return false;
	});
});

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
47 минут назад, fanatic сказал:

если хотите удалять сразу несколько, то как-то так

Спасибо огромное)
Я около 12 часов эту мелочь ковырял)
кстати был в голове вариант с
 

data: $(".box:checked")

но я почемуто подумал что оно возмет только первый чекбокс:-D
учиться мне еще и учиться)

Изменено пользователем f4rr3ll1990

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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