Как изменить заказ в магазине, чтобы добавить собственные свойства позиции - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь добавить кнопку изменения порядка на страницах истории заказов моего клиента, чтобы автоматически изменить порядок уже приобретенных товаров.Это отправит их обратно в корзину с уже заполненными товарами и готовыми к оформлению заказа.К каждому товару присваиваются особые свойства.Кажется, все работает нормально, за исключением того, что когда я добавляю элементы обратно в корзину, я не могу получить свойства настраиваемых позиций для отображения .

Я использую фрагмент order-to-cart.liquid .

В строке 18 кажется, что пользовательские свойства вызываются:

properties: {{ line_item.properties | json }}

Я пытался изменить код, чтобы добавить их:

request.send(JSON.stringify({
  'quantity':order.items[0].quantity,
  'id':order.items[0].variant_id,
  'properties':order.items[0].properties
}));

Ноэто не работает.

На основании приведенного ниже комментария я попытался перебрать свойства элемента:

request.send(JSON.stringify({
  'quantity':order.items[0].quantity,
  'id':order.items[0].variant_id,
  'properties': {
    {% for line_item in order.line_items %}
      {% for property in line_item.properties %}
        '{{ property.first }}': '{{ property.last }}'{% unless forloop.last %},{% endunless %}
      {% endfor %}
    {% endfor %}
  }
}));

Но я получаю синтаксическую ошибку:

SyntaxError: missing } after property list
note: { opened at line 403, column 26

Который, кажется, ссылается на список свойств request.send

. Пример json:

        /* Setup the order object. Extend this as needed. */
        var order = {
          items:[

              {
                variant_id: 16320547225634,
                product_id: 1782978904098,
                properties: [["Arrangement Type",""],["Enclosed Card",""],["Occasion \u0026amp; Comments","Condolescens"],["Delivery Date","Mar 29, 2019"]],
                available: true
              },

              {
                variant_id: null,
                product_id: 1776316743714,
                properties: [["Arrangement Type",""],["Enclosed Card",""],["Occasion \u0026amp; Comments",""],["Delivery Date","Mar 24, 2019"]],
                available: null
              },

              {
                variant_id: 16319970017314,
                product_id: 1782916808738,
                properties: [["Arrangement Type","Seasonal"],["Enclosed Card","Love and best wishes"],["Occasion \u0026amp; Comments","Just Because"],["Delivery Date","Mar 25, 2019"]],
                available: true
              },

              {
                variant_id: 16311468687394,
                product_id: 1780877819938,
                properties: [["Arrangement Type","Large vase with orchids"],["Enclosed Card","Steal the warm chair right after you get up when owners are asleep, cry for no apparent reason sleeps on my head."],["Occasion \u0026amp; Comments","Birthday so make extra special!"],["Delivery Date","Apr 10, 2019"]],
                available: true
              }

          ]
        };



request.send(JSON.stringify({
            'quantity':order.items[0].quantity,
            'id':order.items[0].variant_id,
            'properties': {


                    'Arrangement Type': '',

                    'Enclosed Card': '',

                    'Occasion & Comments': 'Condolescens',

                    'Delivery Date': 'Mar 29, 2019'



                    'Arrangement Type': '',

                    'Enclosed Card': '',

                    'Occasion & Comments': '',

                    'Delivery Date': 'Mar 24, 2019'



                    'Arrangement Type': 'Seasonal',

                    'Enclosed Card': 'Love and best wishes',

                    'Occasion & Comments': 'Just Because',

                    'Delivery Date': 'Mar 25, 2019'



                    'Arrangement Type': 'Large vase with orchids',

                    'Enclosed Card': 'Steal the warm chair right after you get up when owners are asleep, cry for no apparent reason sleeps on my head.',

                    'Occasion & Comments': 'Birthday so make extra special!',

                    'Delivery Date': 'Apr 10, 2019'


              }
          }));

Мой cart.liquid файл вызывает пользовательские свойства, например:

            {% if property_size > 0 %}

                  {% for p in item.properties %}
                    {% assign first_character_in_key = p.first | truncate: 1, '' %}
                    {% unless p.last == blank or first_character_in_key == '_' %}
                      <div class="label-info">{{ p.first }}:
                        <strong class="input-info">{{ p.last }}</strong>
                      </div>
                    {% endunless %}
                  {% endfor %}

            {% endif %}

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

Свойства пользовательских позиций должны отображаться при добавлении обратно в корзину, в противном случае функция переупорядочения победит 'Это действительно сэкономит время, так как заставит клиентов вернуться на каждую страницу продукта, чтобы заново добавить информацию в настраиваемые поля.

Я не настолько разбираюсь в жидкости, поэтому не совсем уверен, что нужносделано, чтобы изменить шаблоны сниппета или корзины.Буду признателен за любую помощь, которую вы можете оказать!

Большое спасибо, Марк

1 Ответ

0 голосов
/ 30 марта 2019

Причина, по которой 'properties':order.items[0].properties не работает, заключается в том, что он содержит массив с именем и значением свойства элемента строки.

Чтобы настроить это, нам нужно превратить массив в объект и затем передать его в функцию request.send.

Функция, которую я нашел, которая достигает этого, может быть замечена в этом посте . Вы можете скопировать и вставить эту функцию в функцию orderItems.

После добавления мы создаем переменную properties, передавая order.items[0].properties в качестве аргумента, чтобы превратить это в объект.

Эта переменная добавлена ​​вместе с «количеством» и «id» в request.send.

Вот как будет выглядеть функция orderItems при добавлении всего:

/* Simple function add to cart */
var orderItems = function(){
  if(!order.items.length){ return }
  if(!order.items[0].available){ 
    checkQueue();
  }

  function objectify(array) {
    return array.reduce(function(p, c) {
      p[c[0]] = c[1];
      return p;
    }, {});
  }

  var properties = objectify(order.items[0].properties);

  var request = new XMLHttpRequest();
  request.open('post', '/cart/add.js', true);
  request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
  request.onload = function() {
    var resp = request.responseText;
    if (request.status >= 200 && request.status < 400) {
      checkQueue();
    } else { /* add your error handling in here */ }
  };
  request.onerror = function() {
    /* add your error handling in here */
  };
  request.send(JSON.stringify({
    'quantity':order.items[0].quantity,
    'id':order.items[0].variant_id,
    properties 
  }));

};

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...