Tôi muốn tạo chức năng xóa thứ tự trong magento2, nhưng tôi không thể thêm hành động hàng loạt trong lưới trật tự. vui lòng giúp tôi cách tạo chức năng xóa thứ tự trong magento2. Xin hãy giúp tôi nếu có ai có ý tưởng.
Tôi muốn tạo chức năng xóa thứ tự trong magento2, nhưng tôi không thể thêm hành động hàng loạt trong lưới trật tự. vui lòng giúp tôi cách tạo chức năng xóa thứ tự trong magento2. Xin hãy giúp tôi nếu có ai có ý tưởng.
Câu trả lời:
Bạn cần xác định bộ định tuyến cho adminhtml để làm cho nó hoạt động với mô-đun tùy chỉnh của bạn. Bạn có thể định nghĩa tương tự tại app \ code {{your_package}} {{your_module}} \ etc \ adminhtml \ Rout.xml như sau:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="admin">
<route id="orderdelete" frontName="orderdelete">
<module name="Krish_OrderDelete" />
</route>
</router>
</config>
Bạn có thể xác định frontName của riêng bạn cho tuyến quản trị. Bây giờ trong tệp ui xml của bạn, có sẵn tại view \ adminhtml \ ui_component theo hành động hàng loạt tùy chỉnh tìm kiếm tên vật phẩm = "url" và đặt đường dẫn như " orderdelete / order / massDelete "
Nó sẽ hoạt động nếu bạn sẽ thực hiện nó một cách chính xác.
Vui lòng tham khảo mô-đun bên dưới mà tôi đã phát triển để thêm hành động MassDelete mới trong lưới đặt hàng bán hàng (Tất cả các tệp bên dưới phải nằm trong mô-đun tùy chỉnh của bạn, ví dụ như gói_module ).
1. \etc\module.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Krish_OrderDelete" setup_version="1.0.0">
<sequence>
<module name="Magento_Sales"/>
</sequence>
</module>
</config>
2. \etc\adminhtml\routes.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
<router id="admin">
<route id="orderdelete" frontName="orderdelete">
<module name="Krish_OrderDelete" />
</route>
</router>
</config>
3. \view\adminhtml\ui_component\sales_order_grid.xml
<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<listingToolbar name="listing_top">
<massaction name="listing_massaction">
<action name="order_delete">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="type" xsi:type="string">order_delete</item>
<item name="label" xsi:type="string" translate="true">Delete</item>
<item name="url" xsi:type="url" path="orderdelete/order/massDelete"/>
<item name="confirm" xsi:type="array">
<item name="title" xsi:type="string" translate="true">Delete Order(s)</item>
<item name="message" xsi:type="string" translate="true">Are you sure you wan\'t to delete selected items?</item>
</item>
</item>
</argument>
</action>
</massaction>
</listingToolbar>
</listing>
**Note: If you will define your action under tag <listingToolbar>, than new mass action will be added as child mass action.**
4. \Controller\Adminhtml\Order\MassDelete.php
<?php
namespace Krish\OrderDelete\Controller\Adminhtml\Order;
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
use Magento\Backend\App\Action\Context;
use Magento\Ui\Component\MassAction\Filter;
use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
use Magento\Sales\Api\OrderManagementInterface;
/**
* Class MassDelete
*/
class MassDelete extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
{
/**
* @var OrderManagementInterface
*/
protected $orderManagement;
/**
* @param Context $context
* @param Filter $filter
* @param CollectionFactory $collectionFactory
* @param OrderManagementInterface $orderManagement
*/
public function __construct(
Context $context,
Filter $filter,
CollectionFactory $collectionFactory,
OrderManagementInterface $orderManagement
) {
parent::__construct($context, $filter);
$this->collectionFactory = $collectionFactory;
$this->orderManagement = $orderManagement;
}
/**
* Hold selected orders
*
* @param AbstractCollection $collection
* @return \Magento\Backend\Model\View\Result\Redirect
*/
protected function massAction(AbstractCollection $collection)
{
$countDeleteOrder = 0;
$model = $this->_objectManager->create('Magento\Sales\Model\Order');
foreach ($collection->getItems() as $order) {
if (!$order->getEntityId()) {
continue;
}
$loadedOrder = $model->load($order->getEntityId());
$loadedOrder->delete();
$countDeleteOrder++;
}
$countNonDeleteOrder = $collection->count() - $countDeleteOrder;
if ($countNonDeleteOrder && $countDeleteOrder) {
$this->messageManager->addError(__('%1 order(s) were not deleted.', $countNonDeleteOrder));
} elseif ($countNonDeleteOrder) {
$this->messageManager->addError(__('No order(s) were deleted.'));
}
if ($countDeleteOrder) {
$this->messageManager->addSuccess(__('You have deleted %1 order(s).', $countDeleteOrder));
}
$resultRedirect = $this->resultRedirectFactory->create();
$resultRedirect->setPath($this->getComponentRefererUrl());
return $resultRedirect;
}
}
5. \composer.json
{
"name": "krish/magento2-order-delete",
"description": "extension for deleting orders in magento 2",
"type": "magento2-module",
"version": "1.0.0",
"license": [
"OSL-3.0",
"AFL-3.0"
],
"require": {
"php": "~5.5.0|~5.6.0|~7.0.0",
"magento/magento-composer-installer": "*"
},
"extra": {
"map": [
[
"*",
"Krish/OrderDelete"
]
]
}
}
6. \registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Krish_OrderDelete',
__DIR__
);
Trong mô-đun của bạn, bạn sẽ muốn tạo tệp sau: view/adminhtml/ui_component/sales_order_grid.xml
Với những điều sau đây:
<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Ui/etc/ui_configuration.xsd">
<container name="listing_top">
<massaction name="listing_massaction">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="actions" xsi:type="array">
<item name="delete" xsi:type="array">
<item name="type" xsi:type="string">delete</item>
<item name="label" xsi:type="string" translate="true">Delete</item>
<item name="url" xsi:type="string">sales/order/massDelete</item>
</item>
</item>
</item>
</argument>
</massaction>
</container>
</listing>
Tùy chỉnh đường dẫn URL theo <item name="url" ..>sales/order/massDelete</item>
nhu cầu của bạn.
Hãy xem Magento\Sales\Controller\Adminhtml\Order\MassCancel.php
ví dụ về cách triển khai bộ điều khiển của bạn!
etc/adminhtml/routes.xml
tập tin trong mô-đun của bạn? Bạn có thể sử dụng một bài đăng mà tôi đã viết bao gồm adminhtml làm tài liệu tham khảo: ashsmith.io/magento2/module-from-scratch-part-5-adminhtml
Không phải "container" mà là "listToolbar" trong tệp XML và mọi thứ đều hoạt động.