Оформление заказа Шаг 5

Тема в разделе "Общие вопросы", создана пользователем olegianni, 20 апр 2015.

  1. olegianni

    olegianni Новичок

    Сообщения:
    9
    Симпатии:
    3
    Проблема с OpenCart 2.0.2.0.

    Убирал обязательные поля при оформлении заказа. Вроде сначала всё нормально работало, заказ оформил, всё получилось, но потом как будто бы слетело. Причём в тот момент слетело, когда оформлял заказ.
    сначала выдало ошибку на "ШАГ 5"
    Код:
    Notice: Undefined index: country_id in /var/www/user44692/data/www/bebang.ru/system/library/tax.php on line 17Notice: Undefined index: zone_id in/var/www/user44692/data/www/bebang.ru/system/library/tax.php on line 17
    а затем вверху появилась такая ошибка
    Код:
    Notice: Undefined index: country_id in /var/www/user44692/data/www/bebang.ru/system/library/tax.php on line 17Notice: Undefined index: zone_id in /var/www/user44692/data/www/bebang.ru/system/library/tax.php on line 17
    Причём суть в том, что заказ оформил после того, как внёс изменения все, всё нормально получилось. Но сейчас знакомый на сайт зашел, говорит, что ошибка при оформлении. Захожу - действительно...

    Смотрел на америкосовских форумах. Обсуждали там такую проблему. Но понять ничего не удалось. Что-то писали про аккаунты какие-то и что-то подобное...
    Вот этот форум http://forum.opencart.com/viewtopic.php?f=20&t=45393

    А это мой сайт bebang.ru
     
    SergeyRV нравится это.
  2. Ален

    Ален Эксперт

    Сообщения:
    2.055
    Симпатии:
    635
    ну так верните исправления назад. Удалили видимо из шаблона country_id вот и все. Так делать нельзя. Вы поля просто в дисплей-ноне скрывайте и все..
     
  3. olegianni

    olegianni Новичок

    Сообщения:
    9
    Симпатии:
    3
    Я пошёл этим путём, но чтобы скрыть выбор страны и региона, необходимо, чтобы они выбирались каким-то образом автоматически. вот страна автоматически стоит Россия, а регион не стоит автоматически. Пробовал осуществить через value, выдало ошибку.

    Вот часть кода:
    Код:
          <div class="form-group required">
            <label class="control-label" for="input-payment-country"><?php echo $entry_country; ?></label>
            <select name="country_id" id="input-payment-country" class="form-control">
              <option value=""><?php echo $text_select; ?></option>
              <?php foreach ($countries as $country) { ?>
              <?php if ($country['country_id'] == $country_id) { ?>
              <option value="<?php echo $country['country_id']; ?>" selected="selected"><?php echo $country['name']; ?></option>
              <?php } else { ?>
              <option value="<?php echo $country['country_id']; ?>"><?php echo $country['name']; ?></option>
              <?php } ?>
              <?php } ?>
            </select>
          </div>
          <div class="form-group required">
            <label class="control-label" for="input-payment-zone"><?php echo $entry_zone; ?></label>
            <select name="zone_id" id="input-payment-zone" class="form-control">
              
              <!--Начинается та часть, которую я добавил-->
              <option value=""><?php echo $text_select; ?></option>
              <?php foreach ($zones) { ?>
              <?php if ($zone['zone_id'] == $zone_id) { ?>
              <option value="<?php echo $zone['zone_id']; ?>" selected="selected"><?php echo $zone['name']; ?></option>
              <?php } else { ?>
              <option value="<?php echo $zone['zone_id']; ?>"><?php echo $zone['name']; ?></option>
              <?php } ?>
              <?php } ?>
              <!--Оканчивается та часть, которую я добавил-->
    
            </select>
          </div>
    
     
    Zlata Jesen нравится это.
  4. olegianni

    olegianni Новичок

    Сообщения:
    9
    Симпатии:
    3
    Решил!

    Заменить это
    Код:
                html = '<option value=""><?php echo $text_select; ?></option>';
    
                if (json['zone'] && json['zone'] != '') {
                    for (i = 0; i < json['zone'].length; i++) {
                        html += '<option value="' + json['zone'][i]['zone_id'] + '"';
    
                        if (json['zone'][i]['zone_id'] == '<?php echo $zone_id; ?>') {
                            html += ' selected="selected"';
                        }
    
                        html += '>' + json['zone'][i]['name'] + '</option>';
                    }
                } else {
                    html += '<option value="0" selected="selected"><?php echo $text_none; ?></option>';
                }
    
    
    На это
    Код:
                html = '';
    
                if (json['zone'] && json['zone'] != '') {
                    for (i = 0; i < json['zone'].length; i++) {
                        html += '<option value="' + json['zone'][i]['zone_id'] + '"';
    
                        if (json['zone'][i]['zone_id'] == '<?php echo $zone_id; ?>') {
                            html += ' selected="selected"';
                        }
    
                        html += '>' + json['zone'][i]['name'] + '</option>';
                    }
                } else {
                    html += '<option value="0" selected="selected"><?php echo $text_none; ?></option>';
                }
    
     
    Zlata Jesen нравится это.
  5. Korovke

    Korovke Пользователь

    Сообщения:
    42
    Симпатии:
    3
    Второй раз слышу про это! Подскажите, о чем идет речь? Есть примеры, инструкция?
     
  6. Ален

    Ален Эксперт

    Сообщения:
    2.055
    Симпатии:
    635
  7. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97
    Я пытаюсь повторить задумку @olegianni , но что-то слабо получается - PHP совсем не знаю, как говорится "читаю со словарем". Но ОЧЕНЬ хочу научиться, разумеется, это лучше всего делать на практике.
    Помогите, пожалуйста, понять. Мне НЕ нужен готовый код, мне нужно объяснение, если не трудно, ну и подсказки... :)
    Итак, что требуется: в выпадающем списке регионов принудительно задать нужный, чтобы или скрыть потом это поле или предоставить пользователю возможность менять уже заданный регион.

    Да-да, я понимаю, что скрыть можно,заменив select на inputtype="text" и принудительно указав значение, но это ведь слишком просто и ничему я не научусь... :rolleyes:

    В файле /catalog/view/theme/default/template/checkout/guest.tpl изначальный код такой:

    Код:
          <div class="form-group required">
            <label class="control-label" for="input-payment-zone"><?php echo $entry_zone; ?></label>
            <select name="zone_id" id="input-payment-zone" class="form-control">
            </select>
          </div>
    В нем не хватает тега <option> c опцией selected, чтобы принудительно выбрать регион.
    Что задумал @olegianni , как я это понимаю. Он скопировал образец кода принудительного выбора страны (чуть выше в том же файле) и все переменные страны ($country) заменил на переменные зоны ($zone). Так? Это, похоже, не заработало и он меняет код (уж не знаю, на основании чего он его менял, возможно, гуглил) на джаву... которую потом правит во втором посте...

    Вопрос:
    Можно ли тут обойтись без JSON и почему не заработал первый код? Переменная есть не $zone, а $zone_info, но ведь оператор присваивания должен был сработать, нет? Нужно расписать построчно, как я понимаю действие этого куска кода? Я, правда, совсем новичок в PHP, но читать, сравнивать и пробовать я умею, просто прошу чуток помочь и подсказать.

    Если этот вопрос выходит за рамки данной темы, прошу перенести в отдельную тему "Научите девушку кодить" в разделе "Обо всем". ;)
     
    RoS нравится это.
  8. Ravilr

    Ravilr Специалист

    Сообщения:
    3.275
    Симпатии:
    898
    как вариант. В настройках магазина, во вкладке Локализация выставляем нужный регион.
    Затем в файле \catalog\controller\checkout\guest.php
    меняем строку
    PHP:
    $data['zone_id'] = '';
    на эту
    PHP:
    $data['zone_id'] = $this->config->get('config_zone_id');
    ну или вручную задаем код региона.
     
    nostradam, RoS и Zlata Jesen нравится это.
  9. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    97
    @Ravilr , спасибо огромное, все без лишних сложностей...
    Но это просто "как вариант"? (Себе уже быстренько сделала и записала, где и зачем правила файл).
    А если "поколдовать", можно обойтись без правки контроллера? Через этот злополучный шаблон, не? Или что-то мешает такой реализации?
    Хочется понять, в чем ошибка простого копирования по образцу страны.
     
  10. Ravilr

    Ravilr Специалист

    Сообщения:
    3.275
    Симпатии:
    898
    В коде выше нужно понять так
    Код:
    if (json['zone'][i]['zone_id'] == '53') {
                            html += ' selected="selected"';
                        }
    
    Где 53 номер региона
     
    aleksandrv и Zlata Jesen нравится это.
  11. armenian_panda

    armenian_panda Новичок

    Сообщения:
    2
    Симпатии:
    0
    Заменял и задавал регион, но все равно остается все без изменения
    upload_2018-3-6_18-33-9.png
    guest.tpl
    upload_2018-3-6_18-33-46.png
    guest.php
    upload_2018-3-6_18-34-10.png

    Пробовал также совет от olegianni, но там в его случае просто убирает из списка "выберите" и выставляет первый регион из списка, мне же нужно выставить конкретный. Надеюсь сможете что-нибудь предложить, заранее спасибо.
     
  12. Ravilr

    Ravilr Специалист

    Сообщения:
    3.275
    Симпатии:
    898
    Пишите ссылку на сайт и точную версию движка.
     
  13. armenian_panda

    armenian_panda Новичок

    Сообщения:
    2
    Симпатии:
    0
    pchelodelo.ru opencart 2.3.0.2
     
  14. Ravilr

    Ravilr Специалист

    Сообщения:
    3.275
    Симпатии:
    898
    У вас шаблон не стандартный, потому и стандартные методы работать не будут.
    Но изменения в контроллере в теории должны были помочь при условии что все же область назначена в админке магазина.
    Ну и в конце концов, всегда можно купить модуль оформления заказа за 450р. который сэкономит кучу времени. http://shop.opencart-russia.ru/rybrikator/rybrika-bistrii-oformlenie/