Я посмотрел на страницу, на которую вы ссылались, и похоже, что ваша тема запускает функцию с именем "selectCallback" всякий раз, когда изменяется выбор покупателя.
В файлах вашей темы ищите этот фрагмент кода :
var selectCallback = function(variant, selector)
, который отмечает начало вашей функции изменения варианта. Эта функция отображается на странице продукта в виде строки, поэтому она , вероятно, поступает из одного из следующих файлов:
- Файл базового шаблона -
templates/product.liquid
- Раздел, связанный с базовым шаблоном - если приведенный выше содержит
{% section 'some-section-name' %}
, найдите в папке sections
файл с именем 'some-section-name.liquid' - Если его нет ни в одном из выше, попробуйте фрагмент, который отображает форму продукта, часто называемую
product-form.liquid
или аналогичной - . Несколько тем помещают эту функцию непосредственно в файл базового макета,
layout/theme.liquid
Один раз вы найдете эту функцию, вы можете добавить туда строку javascript, чтобы обновить метку для выбранного цвета. Переменная с именем variant
будет вновь выбранным вариантом объекта (или null
, если комбинация выбранных параметров не соответствует варианту в продукте), а переменная с именем selector
содержит набор полезной информации.
Объект variant
содержит всю информацию, которую Shopify имеет для описания варианта, включая variant.options
(массив всех значений параметров, описывающих вариант), а также variant.option1
, variant.option2
и variant.option3
(ссылки на значения параметров по указанным c индексам). В связанном продукте цвет является первым и единственным параметром, поэтому variant.options[0]
или variant.option1
- это два способа получить доступ к значению цвета выбранного в данный момент продукта.
Если вам нужно найти Опция color определенно в любом произвольном продукте и если вы хотите игнорировать любые другие названия опций, я укажу вам selector.product
, что даст вам доступ ко всему объекту продукта. Это означает, что selector.product.options
позволит вам получить доступ ко всем именам опций в текущем продукте, чтобы вы могли определить, какое измерение является ярким.
Пример времени!
Вот пример того, что вы могли бы добавить к этой функции.
Глядя на объект selector
, я вижу функцию с именем selectedValues
который возвращает массив всех выбранных в данный момент параметров. Это выглядит полезным, поскольку более сложный продукт может не иметь варианта для каждой возможной комбинации вариантов выбора. [Сноска]
Глядя на структуру документа, я вижу, что визуализированный код выглядит следующим образом:
<tr data-option-index="0" id="gl_select_0">
<td class="label"><label for="0">Color</label></td>
<!-- (option-selecting swatches) -->
</tr>
Без обновления структуры документа мы можем добавить это в вашу функцию selectCallback
, что должно делать примерно то, что вам нужно:
var selectedOptions = selector.selectedValues(); // This gives an array of all the selected options
var optionData = selector.product.options; // This gives information about the options set up on the product
var form = selector.variantIdField.form; // This gives us the enclosing form element without needing to do any query-selecting
// Now lets loop through the options and update the elements
for(var i=0; i<selectedOptions.length; i++){
var optionLabel = form.querySelector('[data-option-index="' + i + '"] label') // This reads, "Find the first <label> element inside the element with the specified data-option-index attribute inside my product form"
// Let's make sure our code will not break and quickly check to make sure we found the element we were after. If it's blank, continue to the next option. Raising an appropriate error is left as an exercise for the reader.
if(!optionLabel){
continue;
}
var optionName = typeof optionData[i] === 'object' ? optionData[i].name : optionData[i]; // This is checking to see which of Shopify's 2 different option formats got fed into this function - it could have been either an array of titles or an array of objects that include both the name and an array of all the values. The ( check ? result_if_true : result_if_false ) syntax is called a ternary expression and is shorthand for if(check){ value_if_true } else { value_if_false }
optionLabel.innerText = optionName + ': ' + selectedOptions[i]
}
Этот пример кода может быть помещен в любое место вашей функции selectCallback
. Я бы рекомендовал размещать его либо в начале, либо в конце, вне каких-либо операторов if()
внутри функции, поскольку мы хотели бы, чтобы это выполнялось независимо от того, существует ли успешно выбранный вариант или нет.
Удачи!
[Сноска]
Для проверки Javascript объектов на предмет того, что вы можете с ними сделать, я часто считаю целесообразным:
- Добавьте точку останова в свой код внутри интересующей вас функции. (Я нашел точку вручную, используя инструменты разработчика Chrome, вы можете воспользоваться ярлыком, добавив ключевое слово
debugger
внутри своей функции) - Переход на страницу
- Открытие инструментов разработчика вашего браузера (для большинства браузеров, работающих под управлением Windows обычно используется сочетание клавиш F12)
- Сделайте что-нибудь на странице, что вызовет соответствующую функцию (например: нажмите на образцы разных цветов)
- Браузер будет приостанавливаться, когда достигнет точки останова.
- На вкладке
console
(иногда называемой в некоторых браузерах отладкой) вы можете ввести имя интересующей вас переменной, и ваши средства разработки должны автоматически заполнить имя переменной. Теперь вы можете поиграть в консоли, чтобы увидеть, каковы различные свойства, запустить функции, чтобы увидеть, какой будет их вывод, и т. Д. c. - Помните, что если вы добавите
debugger
в свой исходный код, Обязательно очистите, когда закончите, удалив код отладки :)