Hello Magento Friends,
In today’s Magento tutorial we will learn about How to Add Custom Column for New Order Select Product Grid in Magento 2.
At the time of order creation in Magento 2, the product grid contains columns related to product information. You can create a Magento 2 custom product grid by adding the required column.
Let’s learn How to Add Custom Column for New Order Select Product Grid in Magento 2.
Steps to Add Custom Column for New Order Select Product Grid in Magento 2:
Step 1: Add layout file sales_order_create_index.xml in your extension at the below path
app/code/Vendor/Extension/view/adminhtml/layout/sales_order_create_index.xml
Add the code as follows
1 2 3 4 |
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance dc" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <referenceBlock class="Magento\Sales\Block\Adminhtml\Order\Create\Items\Grid" template="Vendor_Extension::order/create/items/grid.phtml" name="items_grid" /> </page> |
Step 2: Override the phtml file from the vendor path
vendor/magento/module-sales/view/adminhtml/templates/order/create/items/grid.phtml
And add phtml file grid.phtml at below path
app/code/Vendor/Extension/view/adminhtml/templates/order/create/items/grid.phtml
And replace the section from the vendor to the below code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
<table class="data-table admin__table-primary order-tables"> <thead> <tr class="headings"> <th class="col-product"><span><?= $block->escapeHtml(__('Product')) ?></span></th> <th class="col-price"><span><?= $block->escapeHtml(__('Price')) ?></span></th> <th class="col-qty"><span><?= $block->escapeHtml(__('Qty')) ?></span></th> <th class="col-subtotal"><span><?= $block->escapeHtml(__('Subtotal')) ?></span></th> <th class="col-discount"><span><?= $block->escapeHtml(__('Discount')) ?></span></th> <th class="col-row-total"><span><?= $block->escapeHtml(__('Row Subtotal')) ?></span></th> <th class="col-row-customefield"><span><?= $block->escapeHtml(__('Custome Item')) ?></span></th> <th class="col-action"><span><?= $block->escapeHtml(__('Action')) ?></span></th> </tr> </thead> <tfoot> <tr> <td class="col-total"><?= $block->escapeHtml(__('Total %1 product(s)', count($_items))) ?></td> <td colspan="2" class="col-subtotal"><?= $block->escapeHtml(__('Subtotal:')) ?></td> <td class="col-price"> <strong><?= /* @noEscape */ $block->formatPrice($block->getSubtotal()) ?></strong> </td> <td class="col-price"> <strong><?= /* @noEscape */ $block->formatPrice($block->getDiscountAmount()) ?></strong> </td> <td class="col-price"> <strong><?= /* @noEscape */ $block->formatPrice($block->getSubtotalWithDiscount()); ?></strong> </td> <td colspan="2"> </td> </tr> </tfoot> <?php $i = 0 ?> <?php foreach ($_items as $_item): $i++ ?> <tbody class="<?= /* @noEscape */ ($i%2) ? 'even' : 'odd' ?>"> <tr> <td class="col-product"> <span id="order_item_<?= (int) $_item->getId() ?>_title"><?= $block->escapeHtml($_item->getName()) ?></span> <div class="product-sku-block"> <span><?= $block->escapeHtml(__('SKU')) ?>:</span> <?= /* @noEscape */ implode( '<br />', $catalogHelper->splitSku($block->escapeHtml($_item->getSku())) ) ?> </div> <div class="product-configure-block"> <?= $block->getConfigureButtonHtml($_item) ?> </div> </td> <td class="col-price"> <?= $block->getItemUnitPriceHtml($_item) ?> <?php $_isCustomPrice = $block->usedCustomPriceForItem($_item) ?> <?php if ($_tier = $block->getTierHtml($_item)): ?> <div id="item_tier_block_<?= (int) $_item->getId() ?>"> <a href="#"><?= $block->escapeHtml(__('Tier Pricing')) ?></a> <div id="item_tier_<?= (int) $_item->getId() ?>"><?= /* @noEscape */ $_tier ?></div> <?= /* @noEscape */ $secureRenderer->renderStyleAsTag( "display:none", 'div#item_tier_' . (int) $_item->getId() ) ?> </div> <?php if ($_isCustomPrice): ?> <?= /* @noEscape */ $secureRenderer->renderStyleAsTag( "display:none", 'div#item_tier_block_' . (int) $_item->getId() ) ?> <?php endif; ?> <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag( 'onclick', "$('item_tier_" . (int) $_item->getId() ."').toggle();event.preventDefault();", 'div#item_tier_block_' . (int) $_item->getId() . ' a' ) ?> <?php endif; ?> <?php if ($block->canApplyCustomPrice($_item)): ?> <div class="custom-price-block"> <input type="checkbox" class="admin__control-checkbox" id="item_use_custom_price_<?= (int) $_item->getId() ?>" <?php if ($_isCustomPrice): ?> checked="checked"<?php endif; ?> /> <label class="normal admin__field-label" for="item_use_custom_price_<?= (int) $_item->getId() ?>"> <span><?= $block->escapeHtml(__('Custom Price')) ?>*</span></label> <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag( 'onclick', "order.toggleCustomPrice(this, 'item_custom_price_" . (int) $_item->getId() . "', 'item_tier_block_" . (int) $_item->getId() . "');", 'input#item_use_custom_price_' . (int) $_item->getId() ) ?> </div> <?php endif; ?> <input id="item_custom_price_<?= (int) $_item->getId() ?>" name="item[<?= (int) $_item->getId() ?>][custom_price]" value="<?= /* @noEscape */ sprintf("%.2f", $block->getOriginalEditablePrice($_item)) ?>" <?php if (!$_isCustomPrice): ?> disabled="disabled" <?php endif; ?> class="input-text item-price admin__control-text"/> <?= /* @noEscape */ $secureRenderer->renderStyleAsTag( "display:none", 'input#item_custom_price_' . (int) $_item->getId() ) ?> </td> <td class="col-qty"> <input name="item[<?= (int) $_item->getId() ?>][qty]" class="input-text item-qty admin__control-text" value="<?= (float) $_item->getQty() ?>" maxlength="12" /> </td> <td class="col-subtotal col-price"> <?= $block->getItemRowTotalHtml($_item) ?> </td> <td class="col-discount col-price"> <?= /* @noEscape */ $block->formatPrice(-$_item->getTotalDiscountAmount()) ?> <div class="discount-price-block"> <input id="item_use_discount_<?= (int) $_item->getId() ?>" class="admin__control-checkbox" name="item[<?= (int) $_item->getId() ?>][use_discount]" <?php if (!$_item->getNoDiscount()): ?>checked="checked"<?php endif; ?> value="1" type="checkbox" /> <label for="item_use_discount_<?= (int) $_item->getId() ?>" class="normal admin__field-label"> <span><?= $block->escapeHtml(__('Apply')) ?></span></label> </div> </td> <td class="col-price col-row-subtotal"> <?= $block->getItemRowTotalWithDiscountHtml($_item) ?> </td> <td class="col-customfield col-row-customefield"> <?php echo "custom file value"; ?> </td> <td class="col-actions last"> <select class="admin__control-select" name="item[<?= (int) $_item->getId() ?>][action]"> <option value=""><?= $block->escapeHtml(__('Please select')) ?></option> <option value="remove"><?= $block->escapeHtml(__('Remove')) ?></option> <?php if ($block->getCustomerId() && $block->getMoveToCustomerStorage()): ?> <option value="cart"><?= $block->escapeHtml(__('Move to Shopping Cart')) ?></option> <?php if ($block->isMoveToWishlistAllowed($_item)): ?> <?php $wishlists = $block->getCustomerWishlists();?> <?php if (count($wishlists) <= 1): ?> <option value="wishlist"><?= $block->escapeHtml(__('Move to Wish List')) ?> </option> <?php else: ?> <optgroup label="<?= $block->escapeHtml(__('Move to Wish List')) ?>"> <?php foreach ($wishlists as $wishlist):?> <option value="wishlist_<?= (int) $wishlist->getId() ?>"> <?= $block->escapeHtml($wishlist->getName()) ?> </option> <?php endforeach;?> </optgroup> <?php endif; ?> <?php endif; ?> <?php endif; ?> </select> </td> </tr> <?php $hasMessageError = false; ?> <?php foreach ($_item->getMessage(false) as $messageError): ?> <?php if (!empty($messageError)): $hasMessageError = true; endif; ?> <?php endforeach; ?> <?php if ($hasMessageError): ?> <tr class="row-messages-error"> <td colspan="100"> <!-- ToDo UI: remove the 100 --> <?php foreach ($_item->getMessage(false) as $message): if (empty($message)) { continue; } ?> <div class="message <?php if ($_item->getHasError()): ?>message-error<?php else: ?>message-notice<?php endif; ?>"> <?= $block->escapeHtml($message) ?> </div> <?php endforeach; ?> </td> </tr> <?php endif;?> <?= $block->getItemExtraInfo($_item)->toHtml() ?> </tbody> <?php endforeach; ?> </table> |
Conclusion:
This way you can Add Custom Column for New Order Select Product Grid in Magento 2. You can also Add a Custom Filter to the Product Grid in Magento 2. If you have any doubt, let me know through the comment section. Share the solution with your friends and stay updated for more tutorials.
Happy Coding!
This one helped me. Thank you.
Nice work Dhiren. I’m trying to use this, but when clicking Add Product, new Custom value column is not being shown. It is being shown only when refreshing page. Any idea how to fix this.
Kindly check, if there is any error show on the console for this one? Possible it conflict with other things into system.