Вопрос по интеграции массива в скрипт

Тема в разделе "JavaScript", создана пользователем ramzes, 12 июн 2022.

  1. ramzes

    ramzes

    Регистрация:
    26 дек 2013
    Сообщения:
    8
    Симпатии:
    0
    Имеем систему тикетов.
    Скрипт подключен в личном кабинете Опенкарт catalog/view/theme/default/template/account/order_info.tpl


    <div class="form-group">
    <button type="button" id="button-quick-popup-ticket" data-loading-text="загрузка" class="btn btn-primary btn-lg btn-block">оформить запрос</button>
    </div>
    <div class="modal fade" id="quick-popup-modal" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
    <div class="modal-content">
    <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <h4 class="modal-title" id="quick-popup-modal-title"></h4>
    </div>
    <div class="modal-body" id="quick-popup-modal-body">
    </div>
    </div>
    </div>
    </div>




    <script type="text/javascript">
    $('#button-quick-popup-ticket').on('click', function() {



    $.ajax({
    url: 'index.php?route=ticket/ticket/popup',
    type: 'post',

    data: 'product_id= <?php foreach ($products as $product) { ?><?php echo $product['product_id']; ?>, <?php } ?>',

    dataType: 'json',


    beforeSend: function() {
    $('#button-quick-popup-ticket').button('loading');
    },
    complete: function() {
    $('#button-quick-popup-ticket').button('reset');
    },
    success: function(json) {
    if (json['redirect']) {
    location = json['redirect'];
    }

    if (json['heading_title']) {
    $('#quick-popup-modal-title').html(json['heading_title']);
    }

    if (json['error']) {
    $('#quick-popup-modal-body').html('<div class="text-danger" style="color:#F00;">' + json['error'] + '</div>');
    }

    if (json['content']) {
    if(!$('#quick-popup-modal-body').find('#form-quick-popup-ticket').length) {
    $('#quick-popup-modal-body').html(json['content']);
    }
    }

    $('#quick-popup-modal').modal('show');
    },
    error: function(xhr, ajaxOptions, thrownError) {
    alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
    }
    });
    });
    </script>




    в контроллре тикета

    $this->request->post['message'] = '<a href="' . $this->url->link('product/product', 'product_id=' . $this->request->get['product_id'], true) . '" target="_blank">' . $this->model_ticket_ticket->getProductName($this->request->get['product_id']) . '</a> - ' . $this->request->post['message'];

    В инспекторе кода согласно
    data: 'product_id= <?php foreach ($products as $product) { ?><?php echo $product['product_id']; ?>, <?php } ?>',

    Отображается корректно 3 ID товаров, но, "улетает" только один


    При отправке тикета вместо ( к примеру) 3 товаров на странице в тикет удетает только первый товар ( с корректной ссылкой)

    Хочется решения как сделать что бы в тикет попадали все товары с страницы личного кабинета ( к примеру куплено 3 товара и по всем трем товарам нужно задать вопрос)



    Буду благодарен за практическую помощь... теории я за 4 дня уже начитался (результат нулевой) . Заранее спасибо
     
  2. SinTaksiS-11

    SinTaksiS-11

    Регистрация:
    10 апр 2023
    Сообщения:
    12
    Симпатии:
    1
    В коде есть, значение data для AJAX-запроса формируется с помощью цикла foreach

    PHP:
    data: 'product_id= <?php foreach ($products as $product) { ?><?php echo $product['product_id']; ?><?php ?>',
    Однако, в этом коде есть лишняя запятая после последнего product_id, которая может стать причиной ошибки. Чтобы исправить это, можно использовать функцию implode() вместо цикла foreach, чтобы объединить все product_id в одну строку с разделителем запятая
    PHP:
    var productIds = "<?php echo implode(','array_column($products'product_id')); ?>";
    Полученную строку productIds можно использовать в data для передачи всех product_id
    PHP:
    data'product_id=' productIds,
    Также, в контроллере тикета нужно изменить код, чтобы он обрабатывал все product_id в message, а не только первый. Можно использовать цикл foreach для этого
    PHP:
    foreach ($products as $product) {
       
    $this->request->post['message'] .= '<a href="' $this->url->link('product/product''product_id=' $product['product_id'], true) . '" target="_blank">' $this->model_ticket_ticket->getProductName($product['product_id']) . '</a> - ';
    }

    $this->request->post['message'] = rtrim($this->request->post['message'], ' - ');
    Здесь мы сначала добавляем ссылку для каждого product_id, а затем удаляем последний символ " - ", который добавляется после последнего product_id.