Thêm hành động hàng loạt khác trong lưới thứ tự trong magento2


7

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:


13

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__
);

Hmm Câu trả lời hay
Murtuza Zabuawala 23/8/2016

11

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.phpví dụ về cách triển khai bộ điều khiển của bạn!


Xin chào, tôi có thể thêm hành động hàng loạt mới nhưng bộ điều khiển của tôi không hoạt động khi tôi thêm vào mô-đun của chúng tôi, nếu tôi đưa vào "Magento / Sales / Controller / adminhtml / Order" thì nó hoạt động nhưng khi tôi thêm vào mô-đun của chúng tôi thì nó không làm việc . Xin hãy giúp tôi làm thế nào để thêm chức năng khối lượng trong bộ điều khiển của chúng tôi?
Bhaskar Choubisa

Bạn có một etc/adminhtml/routes.xmltậ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
Ash Smith

Xin chào Ash, làm thế nào chúng ta có thể thêm hành động hàng loạt năng động bằng cách sử dụng mã trên
Manoj Chowrasiya

Sử dụng listToolbar thay vì container. làm việc cho tôi
Virang Jethva

0

Không phải "container" mà là "listToolbar" trong tệp XML và mọi thứ đều hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.