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

Как пропустить 3й шаг оформления заказа зарегистрированному пользователю ocstore 2.3

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

Всем привет, в поисках помощи решил обратиться к этому форуму. Устал искать решение

Есть задача убрать 3й шаг оформления заказа на ocstore 2.3 (адрес доставки), при этом сохранить обработку адреса в этом пункте, то есть сам по себе пункт должен работать, но выполнение его должно быть скрыто.

 

Выяснил, что исполнением данного пункта занимаются 2 файла:

/catalog/view/theme/yourtheme/template/checkout/checkout.tpl

/catalog/view/theme/yourtheme/template/checkout/shipping_address.tpl

 

checkout.tpl занимается исполнением и отображением внешних div (то есть каркас при свернутом аккордионе) 

Шаг 3: Адрес доставки

shipping_address.tpl отвечает за отображение и исполнение внутренних пунктов (то есть при открытом пункте)

- Использовать существующий адрес и - Я хочу использовать новый адрес

 

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

при использовании скрипта в shipping_address.tpl:

<script language="Javascript" type="text/javascript">$(document).ready(function(){$('#button-shipping-address').trigger('click');});</script>

 

Но происходит зацикливание следующего пункта "Шаг 3: Способ доставки" (дергается)  то есть сам по себе скрипт выполняется бесконечное колличество раз и подтверждением этому бесконечно прогружающаяся кнопка "ПРОДОЛЖИТЬ"

Прописывание этого скрипта (являющегося нажатием кнопки продолжить) в checkout.tpl не приносит результатов.

 

Поэтому думаю что есть 2 варианта решения:

1)Остановить работу нажатия кнопки после перехода на пункт "Шаг 3: Способ доставки" (собственно прикратить исполнение вышепрописанного скрипта) 

- пробовал вместо .tigger использовать .one и `oneclick` попросту ничего не происходит, скрипт не работает

2)Использовать другие скрипты которые в при исполнении нажатия на кнопку "ПРОДОЛЖИТЬ" в Шаг 2: Платежная информация запустят исполнение скриптов "Шаг 3: Способ доставки"

 

Но поскольку я не соображаю ни в javascrypt ни даже в библиотеках jquery , не понимаю какой код прописать

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

Для наглядности прикрепляю части кода  в checkout.tpl и shipping_address.tpl

// Shipping Address

$(document).delegate('#button-shipping-address', 'click', function() {
    $.ajax({
        url: 'index.php?route=checkout/shipping_address/save',
        type: 'post',
        data: $('#collapse-shipping-address input[type=\'text\'], #collapse-shipping-address input[type=\'date\'], #collapse-shipping-address input[type=\'datetime-local\'], #collapse-shipping-address input[type=\'time\'], #collapse-shipping-address input[type=\'password\'], #collapse-shipping-address input[type=\'checkbox\']:checked, #collapse-shipping-address input[type=\'radio\']:checked, #collapse-shipping-address textarea, #collapse-shipping-address select'),
        dataType: 'json',
        beforeSend: function() {
            $('#button-shipping-address').button('loading');
        },
        success: function(json) {
            $('.alert, .text-danger').remove();

            if (json['redirect']) {
                location = json['redirect'];
            } else if (json['error']) {
                $('#button-shipping-address').button('reset');

                if (json['error']['warning']) {
                    $('#collapse-shipping-address .panel-body').prepend('<div class="alert alert-warning">' + json['error']['warning'] + '<button type="button" class="close" data-dismiss="alert">×</button></div>');
                }

                for (i in json['error']) {
                    var element = $('#input-shipping-' + i.replace('_', '-'));

                    if ($(element).parent().hasClass('input-group')) {
                        $(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>');
                    } else {
                        $(element).after('<div class="text-danger">' + json['error'][i] + '</div>');
                    }
                }

                // Highlight any found errors
                $('.text-danger').parent().parent().addClass('has-error');
            } else {
                $.ajax({
                    url: 'index.php?route=checkout/shipping_method',
                    dataType: 'html',
                    complete: function() {
                        $('#button-shipping-address').button('reset');
                    },
                    success: function(html) {
                        $('#collapse-shipping-method .panel-body').html(html);

                        $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-method" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle"><?php echo $text_checkout_shipping_method; ?> <i class="fa fa-caret-down"></i></a>');

                        $('a[href=\'#collapse-shipping-method\']').trigger('click');


                        $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_payment_method; ?>');
                        $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_confirm; ?>');

                        $.ajax({
                            url: 'index.php?route=checkout/shipping_address',
                            dataType: 'html',
                            success: function(html) {
                            $('#collapse-shipping-address .panel-body').html(html);
                            },
                            error: function(xhr, ajaxOptions, thrownError) {
                                alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
                            }

                        });
                    },
                    error: function(xhr, ajaxOptions, thrownError) {
                        alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
                    }
                });

                $.ajax({
                    url: 'index.php?route=checkout/payment_address',
                    dataType: 'html',
                    success: function(html) {
                        $('#collapse-payment-address .panel-body').html(html);
                    },
                    error: function(xhr, ajaxOptions, thrownError) {
                        alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
                    }
                });
            }
        },
        error: function(xhr, ajaxOptions, thrownError) {
            alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
        }
    });
});

 

 

и checkout.tpl

 

<script language="Javascript" type="text/javascript">
$(document).ready(function(){
$('#button-shipping-address').trigger('click');
});
</script> 
  
<form class="form-horizontal">
  <?php if ($addresses) { ?>
  <div class="radio">
    <label>
      <input type="radio" name="shipping_address" value="existing" checked="checked" />
      <?php echo $text_address_existing; ?></label>
  </div>
  <div id="shipping-existing">
    <select name="address_id" class="form-control">
      <?php foreach ($addresses as $address) { ?>
      <?php if ($address['address_id'] == $address_id) { ?>
      <option value="<?php echo $address['address_id']; ?>" selected="selected"><?php echo $address['firstname']; ?> <?php echo $address['lastname']; ?>, <?php echo $address['address_1']; ?>, <?php echo $address['city']; ?>, <?php echo $address['zone']; ?>, <?php echo $address['country']; ?></option>
      <?php } else { ?>
      <option value="<?php echo $address['address_id']; ?>"><?php echo $address['firstname']; ?> <?php echo $address['lastname']; ?>, <?php echo $address['address_1']; ?>, <?php echo $address['city']; ?>, <?php echo $address['zone']; ?>, <?php echo $address['country']; ?></option>
      <?php } ?>
      <?php } ?>
    </select>
  </div> 
  <div class="buttons clearfix">
    <div class="pull-right">
      <input type="button" value="<?php echo $button_continue; ?>" id="button-shipping-address" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-primary" />
    </div>
  </div>
</form> 

 

Все ненужное повырезал, для удобства. Заранее спасибо за помощь, всем добра

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

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


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

Рекомендую и не будет никаких проблем

 

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


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

Этот способ я знаю, но это не решение проблемы! Еще более эффективный способ - заказать разработку магазина с 0.

Хочется понять принцип работы оформления заказа реализованного разработчиками ocstore

 

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


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

Этот способ я знаю, но это не решение проблемы! Еще более эффективный способ - заказать разработку магазина с 0.

Хочется понять принцип работы оформления заказа реализованного разработчиками ocstore

 

Ну если все то время что вы потратите на решение этой проблемы стоит менее чем 450руб то это не выход конечно, но с точки зрения здравого смысла я бы рекомендовал не изобретать велосипед.

Цитата

Но поскольку я не соображаю ни в javascrypt ни даже в библиотеках jquery , не понимаю какой код прописать

 

Тогда не пойму

Цитата

Готовые решения использовать категорически не хочу, поскольку хочется понять исполнение оформления заказа от начала и до конца

 

Если в целях изучения - изучите js и php и поймете как все работает, без этих знаний этого никак не понять.

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


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

20% работы приводят к 80% результата. Пока не найду решение буду изучать jquery, найду решение буду знать необходимое для работы с ocstore

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


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

20% работы приводят к 80% результата. Пока не найду решение буду изучать jquery, найду решение буду знать необходимое для работы с ocstore

Жать 450р на симплу я считаю грехом))

Модуль должен как минимум раза в 3-5 дороже стоить))

 

 

 

 

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


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

Жать 450р на симплу я считаю грехом))

Модуль должен как минимум раза в 3-5 дороже стоить))

Тс.. не подкидуйте идею автору))) Мне это по карману ударит часто беру его модуль^_^

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


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

Жать 450р на симплу я считаю грехом))

Модуль должен как минимум раза в 3-5 дороже стоить))

 

 

 

 

Этот модуль стоит своих денег, разве кто-то спорит? но покупка не решает проблему, ведь сам по себе ocstore бесплатное решение, логично же научиться пользоваться им бесплатно. 

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

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


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

Тс.. не подкидуйте идею автору))) Мне это по карману ударит часто беру его модуль^_^

Я уже говорил автору, что модуль будут так же охотно покупать и за 1-3к, потому что альтернатив нет и это лучший вариант для оформления заказа

+ автор всегда в течении 5 минут отвечает и помогает с любыми вопросами)

 

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


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

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

Улыбнулся) Успехов вам))

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


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

Улыбнулся) Успехов вам))

Спасибо, надеюсь тут сидят js прогеры, насколько понимаю проблема в пару строчек кода 

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


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

 надеюсь тут сидят js прогеры,

Не помню, что бы кому-то рассказали как сделать нормальную корзину не используя симплу.

Если чел спрашивает за "пропустить шаг", его пошлют в симплу. Так всегда.

Вы если доковыряете, то выложите здес решение с пояснениями и кометнариями. И станете первым js прогером на форуме.

 

Кстати на эту тему: где-то было бесплатное решение. Осмелюсь предположить, что оно не закубировано и не обфусцировано. Можно скачать и посмотреть.

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


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

Не помню, что бы кому-то рассказали как сделать нормальную корзину не используя симплу.

Если чел спрашивает за "пропустить шаг", его пошлют в симплу. Так всегда.

Вы если доковыряете, то выложите здес решение с пояснениями и кометнариями. И станете первым js прогером на форуме.

 

Кстати на эту тему: где-то было бесплатное решение. Осмелюсь предположить, что оно не закубировано и не обфусцировано. Можно скачать и посмотреть.

Проблему решил самостоятельно. выкладываю решение с пояснением (не поленился) 

- Пропускаем 3 шаг оформления заказа ocstore 2.3 (для зарегистрированных пользователей) 

- рекомендую предварительно сохранить копию файла checkout.tpl

1) Найти файл /catalog/view/theme/yourtheme/template/checkout/checkout.tpl   (где "yourtheme" ваша тема, если тема стандартная то выбираем папку "default")

2) Скрываем отображение этого пункта визуально, ищем код html: 

<div class="panel panel-default">
    <div class="panel-heading">
        <h4 class="panel-title"><?php echo $text_checkout_shipping_address; ?></h4>
    </div>
<div class="panel-collapse collapse" id="collapse-shipping-address">
    <div class="panel-body"></div>
</div>

и меняем его на: 

<div class="panel panel-default" style="display: none;">
    <div class="panel-heading">
        <h4 class="panel-title"><?php echo $text_checkout_shipping_address; ?></h4>
    </div>
<div class="panel-collapse collapse" id="collapse-shipping-address">
    <div class="panel-body"></div>
</div>

То есть мы изменили всего одну строку, добавив к тегу <div> стиль style="display: none;

3) Теперь нам в коде нужно найти // Payment Address  и выделить весь код до  // Shipping Address

- Данный участок кода относится к исполнению второго шага Шаг 2: Платежная информация и изменения будем делать в этом куске кода

ищем в этом участке кода вот этот кусок (проверяйте внимательно, там таких 3 похожих куска) 

success: function(html) {
  $('#collapse-shipping-address .panel-body').html(html);

  $('#collapse-shipping-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle"><?php echo $text_checkout_shipping_address; ?> <i class="fa fa-caret-down"></i></a>');

  $('a[href=\'#collapse-shipping-address\']').trigger('click');

  $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_shipping_method; ?>');
  $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_payment_method; ?>');
  $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_confirm; ?>');
},

и меняем его на этот: 

success: function(html) {
    $('#collapse-shipping-address .panel-body').html(html);

    $('#collapse-shipping-address').parent().find('.panel-heading .panel-title').html('<a href="#collapse-shipping-address" data-toggle="collapse" data-parent="#accordion" class="accordion-toggle"><?php echo $text_checkout_shipping_address; ?> <i class="fa fa-caret-down"></i></a>');

    $('a[href=\'#collapse-shipping-address\']').trigger('click');

    setTimeout(function(){
      $('#button-shipping-address').trigger('click');
    }, 500);

    $('#collapse-shipping-method').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_shipping_method; ?>');
    $('#collapse-payment-method').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_payment_method; ?>');
    $('#collapse-checkout-confirm').parent().find('.panel-heading .panel-title').html('<?php echo $text_checkout_confirm; ?>');
},

все готово. Получается мы добавили вот этот скрипт 

    setTimeout(function(){
      $('#button-shipping-address').trigger('click');
    }, 500);

Этот кусок кода с отсрочкой в 0.5 секунды нажимает кнопку "продолжить" в шаге "адресс доставки" но исполняется в коде "платежной информации" 

поменяв цифру "500" можно ускорить или замедлить исполнение скрипта

Всем спасибо и удачи!

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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