当前位置: 技术文章>> Magento 2:如何在管理员订单视图页面中添加可编辑字段

文章标题:Magento 2:如何在管理员订单视图页面中添加可编辑字段
  • 文章分类: Magento
  • 17459 阅读
系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》

本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。


在Magento 2的“管理订单视图”页面中添加可编辑字段的步骤:

步骤1:转到以下文件路径

app\code\Vendor\Extension\view\adminhtml\layout\sales_order_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_additional_info">
            <block class="Vendor\Extension\Block\Adminhtml\Order\Checkoutcustomformedit" name="admin.chekoutcustomfield" template="Vendor_Extension::checkoutcustomformedit.phtml" />
        </referenceBlock>
    </body>
</page>

步骤2:接下来,移动到以下文件路径

app\code\Vendor\Extension\Block\Adminhtml\Order\Checkoutcustomformedit.php

现在添加下面提到的代码片段

<?php
namespace Vendor\Extension\Block\Adminhtml\Order;
 
use \Magento\Backend\Block\Template;
use \Magento\Backend\Block\Template\Context;
use \Magento\Sales\Model\Order;
 
class Checkoutcustomformedit extends Template
{
 protected $order;
 
 public function __construct(
         Context $context,
         Order $order,
         array $data = [])
 {
             $this->order = $order;
         parent::__construct($context, $data);
 }
 
 public function getOrderId()
        {
 $orderId = $this->getRequest()->getParam('order_id');
 return $orderId;
 }
 
 public function getCustomfieldvalue()
       {
 $orderId = $this->getOrderId();
 $customfieldvalue = $this->order->load($orderId)->getData('customfield1');
 return $customfieldvalue;
 }
}

步骤3:现在导航到以下文件路径

app\code\Vendor\Extension\view\adminhtml\templates\Checkoutcustomformedit.phtml

现在添加代码,如下所示

<section class="admin__page-section">
    <div class="admin__page-section-title">
        <span class="title">
              <?php /* @escapeNotVerified */ echo __('Buyer Order Information') ?>
        </span>
        <div id="checkoutfield-edit-link" class="actions block-edit-link">
                        <a href="#"
                           id="edit-checkoutfield-info">
                            <?= $block->escapeHtml(__('Edit')); ?>
                        </a>
        </div>
    </div>
    <div class="admin__page-section-content">
        <div class="order-information textfied" id="textfiedcustomfield">
                <div class="box">
                    <div class="box-content">
                        <?php echo $block->getCustomfield1(); ?>
                    </div>
                </div>
        </div>
    </div>
    <div class="admin__page-section-item-content edit-checkoutfield-date" id="edit-checkoutfield-info-form"
         style="display: none;">      
            <fieldset class="admin__fieldset">
                <input type="hidden" id="orderid" value="<?php 
                $objectManager = \Magento\Framework\App\ObjectManager::getInstance();  
                $request = $objectManager->get('Magento\Framework\App\Request\Http');  
                echo $param = $request->getParam('order_id');?>"/>          
                <input type="text" id="customfield1" class="customfield1" value="<?php echo $block->getCustomfield1(); ?>">
            </fieldset>
            <button id="customfield-submit">Submit</button>
    </div>
</section>
<script type="text/javascript">
                require([
                    'jquery',
                    'mage/validation',
                    'mage/translate',
                    'jquery/ui'
                ], function ($) {
                   
                    document.getElementById('edit-checkoutfield-info').addEventListener('click', function (e, t) {
                        e.preventDefault();
                        $('#edit-checkoutfield-info-form').toggle();
                    });
                    $("#customfield-submit").click(function() {
                        var orderid = $('#orderid').val();
                       
                        if($('#customfield1').length){
                           var customfield1 = $('#customfield1').val();
                        }
                        var url = '<?= /** @noEscape */ $block->getUrl("groupproduct/queue/update")?>';
                            jQuery.ajax({
                            url: url,
                            data: {orderid: orderid,customfield1value: customfield1},
                            type: "POST",
                            async: false,
                        }).done(function (response) {
                        $("#textfiedcustomfield").load(location.href + " #textfiedcustomfield");
                        });
 
                    });            
                });
</script>

步骤4:最后,移动到以下文件路径

app\code\Vendor\Extension\Controller\Adminhtml\Queue\Update.php

并添加下面提到的代码

<?php
 
namespace Vendor\Extension\Controller\Adminhtml\Queue;
 
use Magento\Framework\App\ResponseInterface;
use Magento\Framework\Exception\LocalizedException;
use Magento\Backend\App\Action;
use Magento\Sales\Api\OrderRepositoryInterface;
 
class Update extends Action
{
    protected $quoteFactory
    protected $orderinterface;
    protected $request;
 
    public function __construct(
        Action\Context $context,
        \Magento\Quote\Model\QuoteFactory $quoteFactory,
        \Magento\Sales\Api\Data\OrderInterface $orderinterface,
        \Magento\Framework\App\Request\Http $request)
    {
        parent::__construct($context);
        $this->orderinterface = $orderinterface;
        $this->request = $request;
        $this->quoteFactory = $quoteFactory;
    }
   
    public function execute()
    {
        $customfield1value = $this->getRequest()->getPostValue('customfield1value');
        $orderid = $this->getRequest()->getPostValue('orderid');
        $order = $this->orderinterface->load($orderid);
        $order->setData('customfield1', $customfield1value);
        $order->save();
    }
}

结论:

这样,您可以在Magento 2的管理订单视图页面中添加可编辑字段。


推荐文章