Magento2 Thêm thuộc tính thứ tự tùy chỉnh


9

Làm cách nào để thêm thuộc tính tùy chỉnh vào Đơn hàng trong Magento. Có vẻ như rõ ràng đối với Sản phẩm và Khách hàng, nhưng tôi không thể tìm thấy bất kỳ thông tin nào để thêm các thuộc tính bổ sung cho đơn hàng.


Bạn đã giải quyết nó? Tôi có cùng một vấn đề
Phoenix128_RiccardoT

Câu trả lời:


4

Tạo mô-đun của riêng bạn và tạo Cài đặt /InstallData.php

<?php



namespace Own\Module\Setup;

use Magento\Customer\Model\Customer;
use Magento\Framework\Encryption\Encryptor;
use Magento\Framework\Indexer\IndexerRegistry;
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Catalog\Setup\CategorySetupFactory;
use Magento\Quote\Setup\QuoteSetupFactory;
use Magento\Sales\Setup\SalesSetupFactory;

/**
 * @codeCoverageIgnore
 */
class InstallData implements InstallDataInterface
{
    /**
     * EAV setup factory
     *
     * @var EavSetupFactory
     */
    private $eavSetupFactory;

    /**
     * Category setup factory
     *
     * @var CategorySetupFactory
     */
    protected $categorySetupFactory;

    /**
     * Quote setup factory
     *
     * @var QuoteSetupFactory
     */
    protected $quoteSetupFactory;

    /**
     * Sales setup factory
     *
     * @var SalesSetupFactory
     */
    protected $salesSetupFactory;


    /**
     * Init
     *
     * @param CategorySetupFactory $categorySetupFactory
     * @param SalesSetupFactory $salesSetupFactory
     */
    public function __construct(
        SalesSetupFactory $salesSetupFactory
    ) {
        $this->salesSetupFactory = $salesSetupFactory;
    }

    /**
     * {@inheritdoc}
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {

        /** @var \Magento\Sales\Setup\SalesSetup $salesSetup */
        $salesSetup = $this->salesSetupFactory->create(['setup' => $setup]);


        /**
         * Remove previous attributes
         */
        $attributes =       ['NEW_ATTRIBUTE'];
        foreach ($attributes as $attr_to_remove){
            $salesSetup->removeAttribute(\Magento\Sales\Model\Order::ENTITY,$attr_to_remove);

        }



        /**
         * Add 'NEW_ATTRIBUTE' attributes for order
         */
        $options = ['type' => 'varchar', 'visible' => false, 'required' => false];
        $salesSetup->addAttribute('order', 'NEW_ATTRIBUTE', $options);

    }
}

Ngoài ra, bạn có thể sử dụng cấu trúc tương tự để gán thuộc tính mới cho các mục. @RiccardoT cho bạn cũng vậy

Chỉnh sửa: Cách chèn Giá trị trên các Thuộc tính mới (Tôi sử dụng giá trị này trên Model / Đơn hàng.php là công việc định kỳ):

use Magento\Directory\Model\Currency;
use Magento\Framework\Api\AttributeValueFactory;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Pricing\PriceCurrencyInterface;
use Magento\Sales\Api\Data\OrderInterface;
use Magento\Sales\Api\Data\OrderStatusHistoryInterface;
use Magento\Sales\Model\Order\Payment;
use Magento\Sales\Model\ResourceModel\Order\Address\Collection;
use Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection as CreditmemoCollection;
use Magento\Sales\Model\ResourceModel\Order\Invoice\Collection as InvoiceCollection;
use Magento\Sales\Model\ResourceModel\Order\Item\Collection as ImportCollection;
use Magento\Sales\Model\ResourceModel\Order\Payment\Collection as PaymentCollection;
use Magento\Sales\Model\ResourceModel\Order\Shipment\Collection as ShipmentCollection;
use Magento\Sales\Model\ResourceModel\Order\Shipment\Track\Collection as TrackCollection;
use Magento\Sales\Model\ResourceModel\Order\Status\History\Collection as HistoryCollection;

class Orders
{

    /**
     * @param \Magento\Sales\Model\Order $order
     */

    public function __construct(
        \Magento\Sales\Model\Order $order,
        \Psr\Log\LoggerInterface $loggerInterface,
        \Magento\Sales\Api\OrderRepositoryInterface $orderRepositoryInterface
    ) {

        $this->order = $order;
        $this->logger = $loggerInterface;
        $this->orderRepository = $orderRepositoryInterface;
    }

    public function execute(){

       $order = $this->order->loadByIncrementId($incrementId);
       $order->setNewAttribute('NEW VALUE');
       $order->save();
   }
}

Đây là nói chung làm thế nào để có quyền truy cập vào một đơn đặt hàng và đặt giá trị cho các thuộc tính.


Đây là để thêm các thuộc tính, nhưng sau đó tôi không thể tìm thấy bất kỳ cách nào để lưu thông tin về các thuộc tính mới, nó dường như lọc chúng ra.
Phoenix128_RiccardoT

1
@RiccardoT Tôi đã chỉnh sửa mã, ở đó bạn có thể thấy một phần mã của tôi mà tôi sử dụng để chèn giá trị vào các thuộc tính mới của mình.
ntzz
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.