How to show Product Custom Attribute in edit page of Credit Memos, Invoice and Shipments below SKU in admin in Magento2.2.0?
해결책
Create a module with name STech_Salesattribute by following below steps:
Step 1: Create registration.php under
app/code/STech/Salesattribute/registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'STech_Salesattribute',
__DIR__
);
Step 2: Create module.xml under
app/code/STech/Salesattribute/etc/module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="STech_Salesattribute" setup_version="0.0.1">
<sequence>
<module name="Magento_Sales"/>
<module name="Magento_Quote"/>
<module name="Magento_Checkout"/>
</sequence>
</module>
</config>
Step 3: Create adminhtml_order_shipment_new.xml under
app/code/STech/Salesattribute/view/adminhtml/layout/adminhtml_order_shipment_new.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="column_name" template="STech_Salesattribute::items/column/name.phtml"/>
</body>
</page>
Step 4: Create sales_order_creditmemo_new.xml under
app/code/STech/Salesattribute/view/adminhtml/layout/sales_order_creditmemo_new.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="column_name" template="STech_Salesattribute::items/column/name.phtml"/>
</body>
</page>
Step 5: Create sales_order_invoice_new.xml under
app/code/STech/Salesattribute/view/adminhtml/layout/sales_order_invoice_new.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="column_name" template="STech_Salesattribute::items/column/name.phtml"/>
</body>
</page>
Step 6: Create name.phtml under
app/code/STech/Salesattribute/view/adminhtml/templates/items/column/name.phtml
<?php if ($_item = $block->getItem()): ?>
<div id="order_item_<?= /* @escapeNotVerified */ $_item->getId() ?>_title"
class="product-title">
<?= $block->escapeHtml($_item->getName()) ?>
</div>
<div class="product-sku-block">
<span><?= /* @escapeNotVerified */ __('SKU') ?>:</span> <?= implode('<br />', $this->helper('Magento\Catalog\Helper\Data')->splitSku($block->escapeHtml($block->getSku()))) ?>
</div>
<?php if ($block->getOrderOptions()): ?>
<dl class="item-options">
<?php foreach ($block->getOrderOptions() as $_option): ?>
<dt><?= /* @escapeNotVerified */ $_option['label'] ?>:</dt>
<dd>
<?php if (isset($_option['custom_view']) && $_option['custom_view']): ?>
<?= /* @escapeNotVerified */ $block->getCustomizedOptionValue($_option) ?>
<?php else: ?>
<?php $_option = $block->getFormattedOption($_option['value']); ?>
<?= /* @escapeNotVerified */ $_option['value'] ?><?php if (isset($_option['remainder']) && $_option['remainder']): ?><span id="<?= /* @escapeNotVerified */ $_dots = 'dots' . uniqid() ?>"> ...</span><span id="<?= /* @escapeNotVerified */ $_id = 'id' . uniqid() ?>"><?= /* @escapeNotVerified */ $_option['remainder'] ?></span>
<script>
require(['prototype'], function() {
$('<?= /* @escapeNotVerified */ $_id ?>').hide();
$('<?= /* @escapeNotVerified */ $_id ?>').up().observe('mouseover', function(){$('<?= /* @escapeNotVerified */ $_id ?>').show();});
$('<?= /* @escapeNotVerified */ $_id ?>').up().observe('mouseover', function(){$('<?= /* @escapeNotVerified */ $_dots ?>').hide();});
$('<?= /* @escapeNotVerified */ $_id ?>').up().observe('mouseout', function(){$('<?= /* @escapeNotVerified */ $_id ?>').hide();});
$('<?= /* @escapeNotVerified */ $_id ?>').up().observe('mouseout', function(){$('<?= /* @escapeNotVerified */ $_dots ?>').show();});
});
</script>
<?php endif; ?>
<?php endif; ?>
</dd>
<?php endforeach; ?>
</dl>
<?php endif; ?>
<?php //Your code starts to show custom attribute value ?>
<dl class="item-options">
<dt><?= __('Custom Label') ?>:</dt>
<dd><?= $_item->getProduct()->getCustom() ?></dd>
</dl>
<?php //Your code ends to show custom attribute value ?>
<?= $block->escapeHtml($_item->getDescription()) ?>
<?php endif; ?>
Thats it!. Now run setup upgrade and other required commands and check. Don't forget to replace your attribute code in place of "custom".
다른 팁
Here is the example of override invoice file in a custom module
Create sales_order_invoice_new
, sales_order_invoice_updateqty
, sales_order_invoice_view
app/code/Vendor/Module/view/adminhtml/layout/sales_order_invoice_view.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="order_items.default">
<action method="setTemplate">
<argument name="template" xsi:type="string">Vendor_Module::order/invoice/create/items/renderer/default.phtml</argument>
</action>
</referenceBlock>
</body>
</page>
Now override
vendor/magento/module-sales/view/adminhtml/templates/order/invoice/create/items/renderer/default.phtml
to
app/code/Vendor/Module/view//adminhtml/templates/order/invoice/create/items/renderer/default.phtml
Here in default.phtml
you need to load full product object by product id $_item->getProductId()
and get custom attribute value
<?php $_item = $block->getItem() ?>
<?php $block->setPriceDataObject($_item)?>
<td class="col-product"><?= $block->getColumnHtml($_item, 'name') ?></td>
<?php
// Load product by $_item->getProductId() and get custom attribute value here */
?>
<td class="col-price">
<?= $block->getColumnHtml($_item, 'price') ?>
</td>
For creditmemo override
vendor/magento/module-sales/view/adminhtml/templates/order/creditmemo/create/items/renderer/default.phtml
For shipment override
vendor/magento/module-sales/view/adminhtml/templates/items/column/name.phtml