Автор Тема: Ошибка 500 при оформлении заказа  (Прочитано 2159 раз)

09 Август 2017, 19:31:19
Ответ #15
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Заметил это и увидел что Вы тоже подтвердили мои предположения, спасибо, на верном пути значит.

Но все же я неугомонный и думаю стоит ли городить велосипед, поправьте если я не вижу все картины.
Если я в адресах(в админе нет), в коде заменю проверку city на states, повлияет ли это на что то еще?

Скрин прикрепил.
09 Август 2017, 20:10:59
Ответ #16
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Повлияет только если у страны будет отмечено, что она содержит штаты. Тогда будут проблемы.
10 Август 2017, 19:12:34
Ответ #17
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Так я и хочу изменить сущность штатов на города. Чтобы под штатами подразумевались города.
10 Август 2017, 21:56:42
Ответ #18
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вроде все гуд подчистил, проверил, единственное не могу убрать поле в city в самом заказе перелазил, не могу найти где выводятся эти поля. Хелпаните пожалуйста
11 Август 2017, 10:05:13
Ответ #19
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Присвой значение по умолчанию, точку или букву.
11 Август 2017, 20:12:15
Ответ #20
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нет мне нужно, чтобы это поле исчезло с формы при заполнении.
12 Август 2017, 10:44:56
Ответ #21
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Так добавь dislpay: none или inpupt type hidden.
13 Август 2017, 18:01:58
Ответ #22
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Я знаю что сделать!!! Но не могу найти где лежит этот файл, пробегал по файлам в теме, не нашел. Проходил поиском по разным словам, типа city, mobile_phone. НИЧЕГО НЕТ!!!
13 Август 2017, 20:23:29
Ответ #23
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Совсем запутался. Скидываю файл где лежит основа формирования, а по цепочке найти не могу где можно убрать.... Помогите!!!
13 Август 2017, 23:00:49
Ответ #24
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Форма адреса формируется в /controllers/front/AddressController.php.
Изменить набор полей можно в /classes/Customer.php. Пример функция getSimpleAddress.
14 Август 2017, 17:28:18
Ответ #25
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Не поверите, навели правильно, еще в нескольких местах убрал, поиском прошел где есть city. Удалось убрать как обязательное поле, но СКААА до сих пор в шаблоне оно осталось, что за проклятье!
14 Август 2017, 18:11:04
Ответ #26
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Если в шаблонах его нет, а показывает, тогда только в контроллерах искать. AddressController, OrderController в них посмотреть переменную адреса.
14 Август 2017, 18:47:36
Ответ #27
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Разберем по шагам:
1. Нахожу саму форму
<div class="js-address-form">
    <form
      method="POST"
      action="{$urls.pages.order}"
      data-refresh-url="{url entity='order' params=['ajax' => 1, 'action' => 'addressForm']}"
    >

      {if !$use_same_address}
        <h2 class="h4">{l s='Shipping Address' d='Shop.Theme.Checkout'}</h2>
      {/if}

      {if $use_same_address && !$cart.is_virtual}
        <p>
          {l s='The selected address will be used both as your personal address (for invoice) and as your delivery address.' d='Shop.Theme.Checkout'}
        </p>
      {elseif $use_same_address && $cart.is_virtual}
        <p>
          {l s='The selected address will be used as your personal address (for invoice).' d='Shop.Theme.Checkout'}
        </p>
      {/if}

      {if $show_delivery_address_form}
        <div id="delivery-address">
          {render file                      = 'checkout/_partials/address-form.tpl'
                  ui                        = $address_form
                  use_same_address          = $use_same_address
                  type                      = "delivery"
                  form_has_continue_button  = $form_has_continue_button
          }
        </div>
      {elseif $customer.addresses|count > 0}
        <div id="delivery-addresses" class="address-selector js-address-selector">
          {include  file        = 'checkout/_partials/address-selector-block.tpl'
                    addresses   = $customer.addresses
                    name        = "id_address_delivery"
                    selected    = $id_address_delivery
                    type        = "delivery"
                    interactive = !$show_delivery_address_form and !$show_invoice_address_form
          }
        </div>

2. В файле checkout/_partials/address-selector-block.tpl вижу парсинг:

{foreach $addresses as $address}
  <article
    class="address-item{if $address.id == $selected} selected{/if}"
    id="{$name|classname}-address-{$address.id}"
  >
    <header class="h4">
      <label class="radio-block">
        <span class="custom-radio">
          <input
            type="radio"
            name="{$name}"
            value="{$address.id}"
            {if $address.id == $selected}checked{/if}
          >
          <span></span>
        </span>
        <span class="address-alias h4">{$address.alias}</span>
        <div class="address">{$address.formatted nofilter}</div>
      </label>
    </header>
    <hr>
    <footer class="address-footer">
      {if $interactive}
        <a
          class="edit-address text-muted"
          data-link-action="edit-address"
          href="{url entity='order' params=['id_address' => $address.id, 'editAddress' => $type, 'token' => $token]}"
        >
          <i class="material-icons edit">&#xE254;</i>{l s='Edit' d='Shop.Theme.Actions'}
        </a>
        <a
          class="delete-address text-muted"
          data-link-action="delete-address"
          href="{url entity='order' params=['id_address' => $address.id, 'deleteAddress' => true, 'token' => $token]}"
        >
          <i class="material-icons delete">&#xE872;</i>{l s='Delete' d='Shop.Theme.Actions'}
        </a>
      {/if}
    </footer>
  </article>
{/foreach}
{if $interactive}
  <p>
    <button class="ps-hidden-by-js form-control-submit center-block" type="submit">{l s='Save' d='Shop.Theme.Actions'}</button>
  </p>
{/if}

3. Иду в контролеры искать массив, нахожу все что есть по поиску city, какие то закоменчиваю, которые идут на доставку и дающие сбой оставляю, но по коду я вижу что не они там задействованы.
14 Август 2017, 18:50:58
Ответ #28
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Единственное где во Front контролерах осталось место
protected function processStoreAddress($store)
    {
        // StarterTheme: Remove method when google maps v3 is done
        $ignore_field = array(
            'firstname',
            'lastname'
        );

        $out_datas = array();

        $address_datas = AddressFormat::getOrderedAddressFields($store['id_country'], false, true);
        $state = (isset($store['id_state'])) ? new State($store['id_state']) : null;

        foreach ($address_datas as $data_line) {
            $data_fields = explode(' ', $data_line);
            $addr_out = array();

            $data_fields_mod = false;
            foreach ($data_fields as $field_item) {
                $field_item = trim($field_item);
                if (!in_array($field_item, $ignore_field) && !empty($store[$field_item])) {
                    $addr_out[] = ($field_item == 'city' && $state && isset($state->iso_code) && strlen($state->iso_code)) ?
                        $store[$field_item].', '.$state->iso_code : $store[$field_item];
                    $data_fields_mod = true;
                }
            }
            if ($data_fields_mod) {
                $out_datas[] = implode(' ', $addr_out);
            }
        }

        $out = implode('<br />', $out_datas);
        return $out;
    }
14 Август 2017, 19:26:50
Ответ #29
  • Пользователь
  • **
  • Сообщений: 58
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Финишная, проверил, проверку повыключал, тестовая покупка работает, но ОСТАЛОСЬ ЭТО ГРЕБАННОЕ ПОЛЕ!!! Форумчане спасайте.....