Shopify: Metafield API - можно ли разрешить пользователям редактировать метаполя со страницы учетной записи? - PullRequest
0 голосов
/ 24 апреля 2018

Я успешно создал метаполе клиента: customer.metafields.c_f.proxy

Цель - разрешить клиенту (при входе в систему) из шаблона account.liquid редактировать значение метаполя с помощью формы.Я пытаюсь использовать некоторые jquery и Metafield API к POST изменению от пользователя:

<form action="/admin/customers/{{ customer.id }}/metafields.json" method="POST" id="custmeta">
  <input type="hidden" name="customer[id]" value="{{ customer.id }}" />
  <input type="text" name="metafield[c_f.proxy]" value="{{ customer.metafields.c_f.proxy }}" placeholder="{{ customer.metafields.c_f.proxy }}" />
  <input type="submit" value="Edit"/>
</form>

<script>
$('form#custmeta').submit(function(e) {
  e.preventDefault();
  $.ajax({
    type: "POST",
    dataType: "json",
    data: $(this).serialize(),
    url: $(this).attr('action'),
    success: function (data) {
      var formValid = (data.status === 'OK');
      if (formValid) {
        var msgs = '';
        for (var i=0;i<data.messages.length;i++) {
          msgs += '-- ' + data.messages[i] + '\n';
        }
        if (msgs > '') {
          alert('SUCCESS WITH MESSAGES:\n\n' + msgs);
        }
        else {
          alert('SUCCESS!');
        }
      }
      else {
        alert('Status: ' + data.status + '\nMessage: ' + data.message);
      }
    },
    error: function (jqXHR, textStatus, errorThrown) {
      alert('AJAX or Server 500 error occurred');
    }
  });
  return false;
});
</script>

В настоящий момент произошла ошибка AJAX или Server 500.

Изменить, чтобы включить ответ с другого форума:

то, что вы делаете, не будет работать.Вы отправляете данные со страницы в API через JS в браузере.Вы будете отправлять куки в этом запросе.Любой запрос на обновление / добавление данных будет заблокирован, если он содержит файлы cookie.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Теги обходного пути могут быть полезными и хитрыми.Правильным способом было бы использовать приложение, которое позволяет пользователям обновлять метаполя из витрины магазина, например, MetaFields2 или пользовательские поля.

Эти приложения платные, так что вы также можете легко реализовать их самостоятельно.

0 голосов
/ 25 апреля 2018

Я нашел обходной путь к этому решению, используя customer.tags

Вот мой код:

{% form 'customer' %}

  {{ form.errors | default_errors }}

  {% if form.posted_successfully? %}
    <div class="form--success">
      <span>Thank you, we added that name and they can pick it up for you.</span> <!-- This might interfere with your newsletter signup, you can try remove this section and add < input type="hidden" name="redirect" value="https://www.yoursite.com/pages/success"> for redirecting to success URL -->
    </div>
  {% else %}

    <input type="hidden" id="proxyTag" name="contact[tags]" value="Proxy Pickup - ">

    {% comment %}
    <label for="proxyTag" class="label--hidden">Proxy Pickup -- </label>
    {% endcomment %}

    <input type="hidden" name="contact[email]" id="Email" class="input-group__field" placeholder="Email" value="{{ customer.email }}">

    <input type="text" id="userTag" name="contact[name]" placeholder="John Smith" required>

    <span class="input-group__btn">
      <button type="submit" name="commit" class="btn">
        <span>Save</span>
      </button>
    </span>

  {% endif %} 
{% endform %}

<script>
  $(function () {
    $('#userTag').on('change', function () {
      $('#proxyTag').val($(this).val() + ' - Proxy Pickup');
    })
  })
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...