12 <div data-bind=
"scope: '<?= /* @noEscape */ $block->getComponentName() ?>'" data-role=
"bulk-step">
13 <h2
class=
"steps-wizard-title"><?=
$block->escapeHtml(
__(
'Step 3: Bulk Images, Price and Quantity')) ?></h2>
14 <div
class=
"steps-wizard-info">
15 <?=
__(
'Based on your selections %1 new products will be created. Use this step to customize images and price for your new products.',
'<span class="new-products-count" data-bind="text:countVariations"></span>') ?>
18 <div data-bind=
"with: sections().images" class=
"steps-wizard-section">
19 <div data-role=
"section">
20 <div
class=
"steps-wizard-section-title">
21 <span><?=
$block->escapeHtml(
26 <ul
class=
"steps-wizard-section-list">
28 <div
class=
"admin__field admin__field-option">
30 id=
"apply-single-set-radio" 31 class=
"admin__control-radio" 33 data-bind=
"checked:type">
34 <label
for=
"apply-single-set-radio" class=
"admin__field-label">
35 <span><?=
$block->escapeHtml(
36 __(
'Apply single set of images to all SKUs')
42 <div
class=
"admin__field admin__field-option">
44 id=
"apply-unique-images-radio" 45 class=
"admin__control-radio" 47 data-bind=
"checked:type">
48 <label
for=
"apply-unique-images-radio" class=
"admin__field-label">
49 <span><?=
$block->escapeHtml(
__(
'Apply unique images by attribute to each SKU')) ?></span>
54 <div
class=
"admin__field admin__field-option">
56 id=
"skip-images-uploading-radio" 57 class=
"admin__control-radio" 60 data-bind=
"checked:type">
61 <label
for=
"skip-images-uploading-radio" class=
"admin__field-label">
62 <span><?=
$block->escapeHtml(
__(
'Skip image uploading at this time')) ?></span>
68 <div data-role=
"step-gallery-single" 69 class=
"attribute-image-selector" 70 data-bind=
"visible: type() == 'single'">
71 <div data-role=
"gallery" 74 data-types=
"<?= $block->escapeHtml( 75 $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($block->getImageTypes()) 78 <div
class=
"image image-placeholder">
79 <div data-role=
"uploader" class=
"uploader">
80 <div
class=
"image-browse">
81 <span><?=
$block->escapeHtml(
__(
'Browse Files...')) ?></span>
85 class=
"admin__control-file" 87 data-url=
"<?= /* @noEscape */ $block->getUrl('catalog/product_gallery/upload') ?>" />
90 <div
class=
"product-image-wrapper">
91 <p
class=
"image-placeholder-text"><?=
$block->escapeHtml(
__(
'Browse to find or drag image here')) ?></p>
95 <?php
foreach (
$block->getImageTypes() as $typeData):
97 <input
name=
"<?= $block->escapeHtml($typeData['name']) ?>" 98 class=
"image-<?= $block->escapeHtml($typeData['code']) ?>" 100 value=
"<?= $block->escapeHtml($typeData['value']) ?>"/>
105 <script data-
template=
"uploader" type=
"text/x-magento-template">
106 <div
id=
"<%- data.id %>" class=
"file-row">
107 <span
class=
"file-info"><%- data.name %> (<%- data.size %>)</span>
108 <div
class=
"progressbar-container">
109 <div
class=
"progressbar upload-progress" style=
"width: 0%;"></div>
111 <div
class=
"spinner">
112 <span></span><span></span><span></span><span></span>
113 <span></span><span></span><span></span><span></span>
118 <script data-
template=
"gallery-content" type=
"text/x-magento-template">
119 <div
class=
"image item <% if (data.disabled == 1) { %>hidden-for-front<% } %>" 122 name=
"product[media_gallery][images][<%- data.file_id %>][position]" 123 value=
"<%- data.position %>"/>
125 name=
"product[media_gallery][images][<%- data.file_id %>][file]" 126 value=
"<%- data.file %>"/>
128 name=
"product[media_gallery][images][<%- data.file_id %>][value_id]" 129 value=
"<%- data.value_id %>"/>
131 name=
"product[media_gallery][images][<%- data.file_id %>][label]" 132 value=
"<%- data.label %>"/>
134 name=
"product[media_gallery][images][<%- data.file_id %>][disabled]" 135 value=
"<%- data.disabled %>"/>
137 name=
"product[media_gallery][images][<%- data.file_id %>][removed]"/>
138 <div
class=
"product-image-wrapper">
139 <img
class=
"product-image" data-role=
"image-element" src=
"<%- data.url %>" alt=
"<%- data.label %>"/>
140 <div
class=
"actions">
141 <button type=
"button" 142 class=
"action-remove" 143 data-role=
"delete-button" 144 title=
"<?= $block->escapeHtml(__('Remove image')) ?>">
145 <span><?=
$block->escapeHtml(
__(
'Remove image')) ?></span>
147 <div
class=
"draggable-handle"></div>
149 <div
class=
"image-fade"><span><?=
$block->escapeHtml(
__(
'Hidden')) ?></span></div>
151 <div
class=
"item-description">
152 <div
class=
"item-title" data-role=
"img-title"><%- data.label %></div>
153 <div
class=
"item-size">
154 <span data-role=
"image-dimens"></span>, <span data-role=
"image-size"><%- data.sizeLabel %></span>
157 <ul
class=
"item-roles" data-role=
"roles-labels">
161 <li data-role-code=
"<?= $block->escapeHtml( 162 $attribute->getAttributeCode() 163 ) ?>" class=
"item-role item-role-<?= $block->escapeHtml( 164 $attribute->getAttributeCode() 175 <script data-
template=
"image" type=
"text/x-magento-template">
177 <div
class=
"product-image-wrapper">
178 <img
class=
"product-image" 179 data-role=
"image-element" 180 src=
"<%- data.url %>" 181 data-position=
"<%- data.position %>" 182 alt=
"<%- data.label %>" />
184 <div
class=
"actions">
185 <button type=
"button" 186 class=
"action-remove" 187 data-role=
"delete-button" 188 title=
"<?= $block->escapeHtml(__('Remove image')) ?>">
189 <span><?=
$block->escapeHtml(
__(
'Remove image')) ?></span>
192 <div
class=
"draggable-handle"></div>
195 <div
class=
"image-fade"><span><?=
$block->escapeHtml(
__(
'Hidden')) ?></span></div>
197 <!--<ul
class=
"item-roles">
198 <li
class=
"item-role item-role-base">Base</li>
203 <script data-role=
"img-dialog-container-tmpl" type=
"text/x-magento-template">
204 <div
class=
"image-panel ui-tabs-panel ui-widget-content ui-corner-bottom" data-role=
"dialog">
208 <script
class=
"dialog-template" type=
"text/x-magento-template" data-title=
"Image Options">
209 <div
class=
"image-panel-preview">
210 <img src=
"<%- data.url %>" alt=
"<%- data.label %>" />
212 <div
class=
"image-panel-controls">
213 <strong
class=
"image-name"><%- data.label %></strong>
215 <fieldset
class=
"admin__fieldset fieldset-image-panel">
216 <div
class=
"admin__field field-image-description">
217 <label
class=
"admin__field-label" for=
"image-description">
218 <span><?=
$block->escapeHtml(
__(
'Alt Text')) ?></span>
221 <div
class=
"admin__field-control">
222 <textarea data-role=
"image-description" 224 class=
"admin__control-textarea" 225 name=
"product[media_gallery][images][<%- data.file_id %>][label]" 226 ><%- data.label %></textarea>
230 <div
class=
"admin__field field-image-role">
231 <label
class=
"admin__field-label">
232 <span><?=
$block->escapeHtml(
236 <div
class=
"admin__field-control">
237 <ul
class=
"multiselect-alt">
243 <input
class=
"image-type" 244 data-role=
"type-selector" 246 value=
"<?= $block->escapeHtml( 247 $attribute->getAttributeCode() 262 <div
class=
"admin__field admin__field-inline field-image-size" data-role=
"size">
263 <label
class=
"admin__field-label">
264 <span><?=
$block->escapeHtml(
268 <div
class=
"admin__field-value" data-message=
"<?= $block->escapeHtml( 273 <div
class=
"admin__field admin__field-inline field-image-resolution" data-role=
"resolution">
274 <label
class=
"admin__field-label">
275 <span><?=
$block->escapeHtml(
276 __(
'Image Resolution')
279 <div
class=
"admin__field-value" data-message=
"<?= $block->escapeHtml( 280 __('{width}^{height} px') 284 <div
class=
"admin__field field-image-hide">
285 <div
class=
"admin__field-control">
286 <div
class=
"admin__field admin__field-option">
287 <input type=
"checkbox" 288 id=
"hide-from-product-page" 289 data-role=
"visibility-trigger" 291 class=
"admin__control-checkbox" 292 name=
"product[media_gallery][images][<%- data.file_id %>][disabled]" 293 <%
if (data.disabled == 1) { %>checked=
"checked"<% } %> />
295 <label
for=
"hide-from-product-page" class=
"admin__field-label">
297 __(
'Hide from Product Page')
309 <div data-role=
"step-gallery-each" class=
"attribute-image-selector" data-bind=
"visible: type() == 'each'">
310 <fieldset
class=
"admin__fieldset bulk-attribute-values">
311 <div
class=
"admin__field _required">
312 <label
class=
"admin__field-label" for=
"apply-images-attributes">
313 <span><?=
$block->escapeHtml(
314 __(
'Select attribute')
317 <div
class=
"admin__field-control">
319 id=
"apply-images-attributes" 320 class=
"admin__control-select" 322 options: $parent.attributes, 323 optionsText: 'label', 325 optionsCaption: '<?= $block->escapeHtml( 334 <ul
class=
"items attributes-selector-list" data-bind=
"if:attribute, visible: attribute">
335 <!-- ko
foreach: {data: attribute().chosen, afterRender: $parent.bindGalleries} -->
336 <li
class=
"item" data-bind=
"attr:{'data-role':'step-gallery-option-' + id}">
337 <label
class=
"attribute-label">
338 <span data-bind=
"text:label"></span>
341 <div data-role=
"gallery" 344 data-types=
"<?= $block->escapeHtml( 345 $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($block->getImageTypes()) 348 <div
class=
"image image-placeholder">
349 <div data-role=
"uploader" class=
"uploader">
350 <div
class=
"image-browse">
351 <span><?=
$block->escapeHtml(
352 __(
'Browse Files...')
354 <input type=
"file" name=
"image" multiple=
"multiple" 355 data-url=
"<?= /* @noEscape */ $block->getUrl('catalog/product_gallery/upload') ?>" />
358 <div
class=
"product-image-wrapper">
359 <p
class=
"image-placeholder-text"><?=
$block->escapeHtml(
360 __(
'Browse to find or drag image here')
363 <div
class=
"spinner">
364 <span></span><span></span><span></span><span></span>
365 <span></span><span></span><span></span><span></span>
369 <?php
foreach (
$block->getImageTypes() as $typeData):
371 <input
name=
"<?= $block->escapeHtml($typeData['name']) ?>" 372 class=
"image-<?= $block->escapeHtml($typeData['code']) ?>" 374 value=
"<?= $block->escapeHtml($typeData['value']) ?>"/>
379 <script data-
template=
"uploader" type=
"text/x-magento-template">
380 <div
id=
"<%- data.id %>" class=
"file-row">
381 <span
class=
"file-info"><%- data.name %> (<%- data.size %>)</span>
382 <div
class=
"progressbar-container">
383 <div
class=
"progressbar upload-progress" style=
"width: 0%;"></div>
385 <div
class=
"spinner">
386 <span></span><span></span><span></span><span></span>
387 <span></span><span></span><span></span><span></span>
392 <script data-
template=
"gallery-content" type=
"text/x-magento-template">
393 <div
class=
"image item <% if (data.disabled == 1) { %>hidden-for-front<% } %>" 396 name=
"product[media_gallery][images][<%- data.file_id %>][position]" 397 value=
"<%- data.position %>" class=
"position"/>
399 name=
"product[media_gallery][images][<%- data.file_id %>][file]" 400 value=
"<%- data.file %>"/>
402 name=
"product[media_gallery][images][<%- data.file_id %>][value_id]" 403 value=
"<%- data.value_id %>"/>
405 name=
"product[media_gallery][images][<%- data.file_id %>][label]" 406 value=
"<%- data.label %>"/>
408 name=
"product[media_gallery][images][<%- data.file_id %>][disabled]" 409 value=
"<%- data.disabled %>"/>
411 name=
"product[media_gallery][images][<%- data.file_id %>][removed]" 414 <div
class=
"product-image-wrapper">
415 <img
class=
"product-image" data-role=
"image-element" src=
"<%- data.url %>" alt=
"<%- data.label %>"/>
416 <div
class=
"actions">
417 <button type=
"button" 418 class=
"action-remove" 419 data-role=
"delete-button" 420 title=
"<?= $block->escapeHtml(__('Remove image')) ?>">
421 <span><?=
$block->escapeHtml(
425 <div
class=
"draggable-handle"></div>
427 <div
class=
"image-fade"><span><?=
$block->escapeHtml(
431 <div
class=
"item-description">
432 <div
class=
"item-title" data-role=
"img-title"><%- data.label %></div>
433 <div
class=
"item-size">
434 <span data-role=
"image-dimens"></span>, <span data-role=
"image-size"><%- data.sizeLabel %></span>
437 <ul
class=
"item-roles" data-role=
"roles-labels">
441 <li data-role-code=
"<?= $block->escapeHtml( 442 $attribute->getAttributeCode() 443 ) ?>" class=
"item-role item-role-<?= $block->escapeHtml( 444 $attribute->getAttributeCode() 455 <script data-
template=
"image" type=
"text/x-magento-template">
457 <div
class=
"product-image-wrapper">
458 <img
class=
"product-image" 459 src=
"<%- data.url %>" 460 data-role=
"image-element" 461 data-position=
"<%- data.position %>" 462 alt=
"<%- data.label %>" />
463 <div
class=
"actions">
464 <button type=
"button" 465 class=
"action-remove" 466 data-role=
"delete-button" 467 title=
"<?= $block->escapeHtml(__('Remove image')) ?>">
468 <span><?=
$block->escapeHtml(
__(
'Remove image')) ?></span>
470 <div
class=
"draggable-handle"></div>
472 <div
class=
"image-fade"><span><?=
$block->escapeHtml(
__(
'Hidden')) ?></span></div>
474 <!--<ul
class=
"item-roles">
475 <li
class=
"item-role item-role-base">Base</li>
480 <script data-role=
"img-dialog-container-tmpl" type=
"text/x-magento-template">
481 <div
class=
"image-panel ui-tabs-panel ui-widget-content ui-corner-bottom" data-role=
"dialog">
485 <script
class=
"dialog-template" type=
"text/x-magento-template" data-title=
"Image Options">
486 <div
class=
"image-panel-preview">
487 <img src=
"<%- data.url %>" alt=
"<%- data.label %>" />
489 <div
class=
"image-panel-controls">
490 <strong
class=
"image-name"><%- data.label %></strong>
492 <fieldset
class=
"admin__fieldset fieldset-image-panel">
493 <div
class=
"admin__field field-image-description">
494 <label
class=
"admin__field-label" for=
"image-description">
495 <span><?=
$block->escapeHtml(
500 <div
class=
"admin__field-control">
501 <textarea data-role=
"image-description" 503 class=
"admin__control-textarea" 504 name=
"product[media_gallery][images][<%- data.file_id %>][label]" 505 ><%- data.label %></textarea>
509 <div
class=
"admin__field field-image-role">
510 <label
class=
"admin__field-label">
511 <span><?=
$block->escapeHtml(
515 <div
class=
"admin__field-control">
516 <ul
class=
"multiselect-alt">
522 <input
class=
"image-type" 523 data-role=
"type-selector" 525 value=
"<?= $block->escapeHtml( 526 $attribute->getAttributeCode() 541 <div
class=
"admin__field admin__field-inline field-image-size" data-role=
"size">
542 <label
class=
"admin__field-label">
543 <span><?=
$block->escapeHtml(
547 <div
class=
"admin__field-value" data-message=
"<?= $block->escapeHtml( 552 <div
class=
"admin__field admin__field-inline field-image-resolution" data-role=
"resolution">
553 <label
class=
"admin__field-label">
554 <span><?=
$block->escapeHtml(
555 __(
'Image Resolution')
558 <div
class=
"admin__field-value" data-message=
"<?= $block->escapeHtml( 559 __('{width}^{height} px') 563 <div
class=
"admin__field field-image-hide">
564 <div
class=
"admin__field-control">
565 <div
class=
"admin__field admin__field-option">
566 <input type=
"checkbox" 567 id=
"hide-from-product-page" 568 data-role=
"visibility-trigger" 570 class=
"admin__control-checkbox" 571 name=
"product[media_gallery][images][<%- data.file_id %>][disabled]" 572 <%
if (data.disabled == 1) { %>checked=
"checked"<% } %> />
574 <label
for=
"hide-from-product-page" class=
"admin__field-label">
576 __(
'Hide from Product Page')
593 <div data-bind=
"with: sections().price" class=
"steps-wizard-section">
594 <div data-role=
"section">
595 <div
class=
"steps-wizard-section-title">
596 <span><?=
$block->escapeHtml(
600 <ul
class=
"steps-wizard-section-list">
602 <div
class=
"admin__field admin__field-option">
604 id=
"apply-single-price-radio" 605 class=
"admin__control-radio" 607 data-bind=
"checked:type" />
608 <label
for=
"apply-single-price-radio" 609 class=
"admin__field-label">
610 <span><?=
$block->escapeHtml(
611 __(
'Apply single price to all SKUs')
617 <div
class=
"admin__field admin__field-option">
619 id=
"apply-unique-prices-radio" 620 class=
"admin__control-radio" 622 data-bind=
"checked:type" />
623 <label
for=
"apply-unique-prices-radio" 624 class=
"admin__field-label">
625 <span><?=
$block->escapeHtml(
626 __(
'Apply unique prices by attribute to each SKU')
632 <div
class=
"admin__field admin__field-option">
634 id=
"skip-pricing-radio" 635 class=
"admin__control-radio" 638 data-bind=
"checked:type" />
639 <label
for=
"skip-pricing-radio" class=
"admin__field-label">
640 <span><?=
$block->escapeHtml(
641 __(
'Skip price at this time')
647 <
form data-role=
"attributes-values-form">
648 <fieldset
class=
"admin__fieldset bulk-attribute-values" data-bind=
"visible: type() == 'single'">
649 <div
class=
"admin__field _required">
650 <label
for=
"apply-single-price-input" class=
"admin__field-label">
651 <span><?=
$block->escapeHtml(
655 <div
class=
"admin__field-control">
656 <div
class=
"currency-addon">
657 <input
class=
"admin__control-text required-entry validate-zero-or-greater" type=
"text" 658 data-bind=
"value:value, uniqueName: true" id=
"apply-single-price-input"/>
659 <span
class=
"currency-symbol" data-bind=
"text:currencySymbol"></span>
666 <div data-bind=
"visible: type() == 'each'">
667 <fieldset
class=
"admin__fieldset bulk-attribute-values">
668 <div
class=
"admin__field _required">
669 <label
for=
"select-each-price" class=
"admin__field-label">
670 <span><?=
$block->escapeHtml(
671 __(
'Select attribute')
674 <div
class=
"admin__field-control">
675 <select
id=
"select-each-price" class=
"admin__control-select" data-bind=
" 676 options: $parent.attributes, 677 optionsText: 'label', 679 optionsCaption: 'Select'"></select>
684 <
form data-role=
"attributes-values-form">
685 <fieldset
class=
"admin__fieldset bulk-attribute-values" data-bind=
"if:attribute">
686 <!-- ko
foreach: attribute().chosen -->
687 <div
class=
"admin__field _required">
688 <label data-bind=
"attr: {for: 'apply-single-price-input-' + $index()}" class=
"admin__field-label">
689 <span data-bind=
"text:label"></span>
691 <div
class=
"admin__field-control">
692 <div
class=
"currency-addon">
693 <input
class=
"admin__control-text required-entry validate-zero-or-greater" 695 data-bind=
"value:sections()[$parent.label], uniqueName: true, 696 attr: {id: 'apply-single-price-input-' + $index()}"/>
697 <span
class=
"currency-symbol" data-bind=
"text:$parent.currencySymbol"></span>
708 <div data-bind=
"with: sections().quantityPerSource" class=
"steps-wizard-section">
709 <div data-role=
"section">
710 <div
class=
"steps-wizard-section-title">
711 <span><?=
$block->escapeHtml(
__(
'Quantity per source')) ?></span>
713 <ul
class=
"steps-wizard-section-list">
715 <div
class=
"admin__field admin__field-option">
717 id=
"apply-single-inventory-radio" 718 class=
"admin__control-radio" 720 data-bind=
"checked: type" />
721 <label
for=
"apply-single-inventory-radio" class=
"admin__field-label">
722 <span><?=
$block->escapeHtml(
__(
'Apply single quantity to each SKUs')) ?></span>
727 <div
class=
"admin__field admin__field-option">
729 id=
"apply-unique-inventory-radio" 730 class=
"admin__control-radio" 732 data-bind=
"checked: type" />
733 <label
for=
"apply-unique-inventory-radio" class=
"admin__field-label">
734 <span><?=
$block->escapeHtml(
__(
'Apply unique quantity by attribute to each SKU')) ?></span>
739 <div
class=
"admin__field admin__field-option">
741 id=
"skip-inventory-radio" 742 class=
"admin__control-radio" 745 data-bind=
"checked: type" />
746 <label
for=
"skip-inventory-radio" class=
"admin__field-label">
747 <span><?=
$block->escapeHtml(
__(
'Skip quantity at this time')) ?></span>
753 <
form data-role=
"attributes-values-form">
754 <fieldset
class=
"admin__fieldset bulk-attribute-values" data-bind=
"visible: type() == 'single'">
755 <div data-bind=
"scope: 'quantity_resolver'">
756 <!-- ko
template:
$data.getTemplate() --><!-- /ko -->
761 <div data-bind=
"visible: type() == 'each'">
762 <fieldset
class=
"admin__fieldset bulk-attribute-values">
763 <div
class=
"admin__field _required">
764 <label
for=
"apply-single-price-input-qty" class=
"admin__field-label">
765 <span><?=
$block->escapeHtml(
__(
'Select attribute')) ?></span>
767 <div
class=
"admin__field-control">
768 <select
id=
"apply-single-price-input-qty" class=
"admin__control-select" data-bind=
" 769 options: $parent.attributes, 770 optionsText: 'label', 772 optionsCaption: 'Select'"></select>
776 <
form data-role=
"attributes-values-form">
777 <fieldset
class=
"admin__fieldset bulk-attribute-values" data-bind=
"if:attribute">
778 <div data-bind=
"scope: 'quantity_resolver'">
779 <!-- ko
template:
$data.getTemplate() --><!-- /ko -->
789 <script type=
"text/x-magento-init">
792 "Magento_Ui/js/core/app": {
794 "<?= /* @noEscape */ $block->getComponentName() ?>": {
795 "component":
"Magento_InventoryConfigurableProductAdminUi/js/variations/steps/bulk",
796 "appendTo":
"<?= /* @noEscape */ $block->getParentComponentName() ?>",
797 "noImage":
"<?= /* @noEscape */ $block->getNoImageUrl() ?>",
798 "variationsComponent":
"<?= /* @noEscape */ $block->getData('config/form') ?>.configurableVariations",
799 "provider":
"product_form.product_form_data_source",
800 "quantityResolver":
"quantity_resolver" 802 "quantity_resolver": {
803 "component":
"Magento_InventoryConfigurableProductAdminUi/js/configurable-quantity-resolver",
804 "name":
"quantity_resolver",
805 "childTemplate": <?=
$block->getJsonConfig() ?>,
806 "provider":
"product_form.product_form_data_source",
807 "insertListingComponent":
"product_form.product_form.assign_sources_configurable_modal.assign_sources_configurable_grid",
809 "type":
"${$.provider}:data.inventoryType",
810 "attribute":
"${$.provider}:data.inventoryAttribute" foreach( $block->getMediaAttributes() as $attribute)($attribute->getAttributeCode()) ?>" class endforeach
$block setTitle( 'CMS Block Title') -> setIdentifier('fixture_block') ->setContent('< h1 >Fixture Block Title</h1 >< a href=" store url</a><p> Config value
jquery extjs ext tree mage adminhtml form