Как получить адрес покупателя на шаге выбора способа доставки Есть решение

У меня на сайте адрес доставки запрашивается на шаге запроса контактных данных.

Мне необходимо получить название города, который покупатель ввел ранее в форму, на шаге выбора способов доставки. То есть получить address.shipping.city

Подскажите как это сделать?


8 ответов

  • 2

    если авторизован, то
    {$addr = $wa->user('address.shipping','')}
    или только город
    {$addr = $wa->user('address:city.shipping','')}
    получите массив, а из него уже достанете город {$addr.0.data.city}


    если не авторизован, то
    {$addr = $wa->session('shop/checkout')}

    и смотрите что там в адресе контакта.
    {$addr.contact.address|@var_dump}


    • +1
      Виктор Виктор 22 января 2016 12:18 #

      Если не авторизован, то получаю:

      array(1) { [7]=> array(3) { ["data"]=> array(5) { ["street"]=> string(0) "" ["city"]=> string(12) "Москва" ["region"]=> string(2) "77" ["zip"]=> string(0) "" ["country"]=> string(3) "rus" } ["ext"]=> string(8) "shipping" ["value"]=> string(67) "Москва, Москва, Российская Федерация" } }

      Или еще {$addr.contact.address|wa_dump} выдал:

      Array
      (
        16 => Array
        (
          data => Array
          (
            street => ''
            city => 'Москва'
            region => '77'
            zip => ''
            country => 'rus'
          )
          ext => 'shipping'
          value => 'Москва, Москва, Российская Федерация'
        )
      )

      Как вывести значение "город" в нужном месте?

      • +3

        {if $wa->user()->isAuth()}
        {$addr = $wa->user('address.shipping','')}
        {$city = $addr.0.data.city}

        {else}
        {$addr = $wa->session('shop/checkout')}
        {$city = $addr.contact.address.data.city}
        {/if}

        и в нужном месте шаблона {$city} выведет город, если он был задан(поэтому желательно делать проверку типа
        {if $city}{$city}{/if}).

        может есть и более элегантные способы, но искать их в пятницу вечером я не хочу.

        • +1
          Виктор Виктор 22 января 2016 12:45 #

          Очень благодарен, что пытаетесь помочь...но вот тут не работает:

          {$addr = $wa->session('shop/checkout')}

          {$city = $addr.contact.address.data.city}

          через {$city|wa_dump} получаю NULL


          • +3

            А вы логаут нажали? {$addr = $wa->session('shop/checkout')} - это только для новых пользователей, которые заполняют форму не будучи залогинеными.

            Просто вставьте блок кода, который я написал постом выше {if}..{else}..{/if} в начало шаблона shipping.checkout.html
            а сразу после него
            {if !empty($city)}
            город={$city}
            {/if}
            И если вы залогинены в админку, и у авторизованого пользователя задан город, то он выведется.
            Если нажать логаут и заполнить поле город у нового юзера на шаге контактной информации, то будет выведен он.

            Пы.сы. Я все нюансы издалека учесть не могу, но по логике, всё должно работать.

            • +1
              Виктор Виктор 22 января 2016 19:55 #

              Все сделал, как вы написали, для залогиненных все работает, а вот для незалогиненных ничего не выводится...

              • +6

                Да, вчера под вечер не разглядел внимательней. Для не авторизованного тогда так:
                {$addr = $wa->session('shop/checkout')}
                {foreach $addr.contact.address as $key => $value name=foo}
                {if $value.ext == 'shipping'}
                {$city = $value.data.city}
                {/if}
                {/foreach}

                Не хочу разбираться почему, но $addr.contact.address у вас содержит массив, индекс которого меняется, то вон 7 был, то 16. Поэтому проще всего сейчас сделать так.



                • +2
                  Виктор Виктор 24 января 2016 06:30 #

                  Спасибо вам огромное за помощь! Теперь работает. Наплюсовал вам в карму...

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите