Magento 2 tạo bảng cấu hình quản trị với các hàng và cột tùy chỉnh


7

Tôi muốn tạo cấu hình quản trị với một bảng để lấy dữ liệu và lưu trong cấu hình để tôi theo liên kết này .

Nhưng tôi cũng muốn tạo các hàng tùy chỉnh trong bảng đó theo chương trình và cũng không có cột hành động cuối cùng và nút thêm. Vui lòng tham khảo hình ảnh Cấu hình quản trị

Tôi không thể tìm thấy bất kỳ giải pháp nào trên web liên quan đến cùng một tập tin

\ Magento \ Config \ Block \ System \ Config \ Form \ Field \ FieldArray \ AbstractFieldArray
mà chúng tôi mở rộng đã đưa ra bất kỳ manh mối nào.
Có thể dễ dàng thực hiện điều này thông qua jquery nhưng muốn thực hiện giải pháp tiêu chuẩn.

Mã số:

<?php
namespace Abc\Paymentmethod\Block\Adminhtml\System\Config\Form\Field;

class Feetable extends \Magento\Config\Block\System\Config\Form\Field\FieldArray\AbstractFieldArray
{
    /**
     * @var \Magento\Framework\Data\Form\Element\Factory
     */
    protected $_elementFactory;

    /**
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Framework\Data\Form\Element\Factory $elementFactory
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Framework\Data\Form\Element\Factory $elementFactory,
        array $data = []
    )
    {
        $this->_elementFactory  = $elementFactory;
        parent::__construct($context,$data);
    }
    protected function _construct(){
        $this->addColumn('noi', ['label' => __('NOI'),'readonly'=>'readonly']);
        $this->addColumn('fixed', ['label' => __('Fixed')]);
        $this->addColumn('percent', ['label' => __('Percent')]);
        $this->_addAfter = false;
        $this->_addButtonLabel = __('Add More');
        parent::_construct();
    }

    protected function _prepareArrayRow(\Magento\Framework\DataObject $row) {
        $options = [1,2,3];
        $row->setData('option_extra_attrs', $options);
    }

}

systemDB

<field id="abc_fee_table" translate="label comment tooltip" sortOrder="17.4" showInDefault="1" showInWebsite="1" showInStore="0">
                    <label>Abc Fee by Number of Installments(NOI)</label>
                    <frontend_model>Abc\Paymentmethod\Block\Adminhtml\System\Config\Form\Field\Feetable</frontend_model>
                    <backend_model>Magento\Config\Model\Config\Backend\Serialized\ArraySerialized</backend_model>                    
                </field>

@Divyesh không nó sẽ không. Vui lòng tham khảo hình ảnh để hiểu yêu cầu của tôi
Ashwani Shukla

Bạn có thể chia sẻ mã
Chirag Patel

Tôi đang tìm kiếm điều tương tự, nhưng nhận ra rằng một cái bàn như vậy là không thực sự cần thiết. Mỗi bảng tra cứu 2d có thể được chuyển đổi trong bảng 1d. Nếu bạn có một bảng excel, đây là hướng dẫn cách chuyển đổi nó: palettepage.com/index.php/tip/ mẹo . Có thể không phải là giải pháp bạn đang tìm kiếm, nhưng sẽ giúp bạn tiết kiệm rất nhiều công việc;)
Mo3bius

Dưới đây là một so sánh chi tiết hơn về cả hai biểu diễn dữ liệu: eagereyes.org/basics/s Lansheet-thinking-vs-database-thinking . Magento dựa trên các bảng cơ sở dữ liệu nên có lẽ tốt nhất là thể hiện dữ liệu trong phần phụ trợ theo cách như vậy.
Mo3bius

1
@MartinE Sau khi không nhận được câu trả lời, tôi đã thực hiện thông qua jQuery. Nếu bạn muốn tôi có thể chia sẻ mã với bạn.
Ashwani Shukla

Câu trả lời:


0

Bạn cần thêm mã này vào system.xml như thế này:

<field id="abc_fee_table" ranslate="label comment tooltip" sortOrder="17.4" showInDefault="1" showInWebsite="1" showInStore="0">
            <label>Additional Emails</label>
            <frontend_model>Abc\Paymentmethod\Block\Adminhtml\Form\Field\AdditionalItem</frontend_model>
    <backend_model>Abc\Paymentmethod\Config\Backend\AdditionalItem</backend_model>
</field>

Vui lòng thêm serializer tùy chỉnh

 <?php
namespace Abc\Paymentmethod\Config\Backend;

use Magento\Framework\App\Cache\TypeListInterface;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\App\Config\Value as ConfigValue;
use Magento\Framework\Data\Collection\AbstractDb;
use Magento\Framework\Model\Context;
use Magento\Framework\Model\ResourceModel\AbstractResource;
use Magento\Framework\Registry;
use Magento\Framework\Serialize\SerializerInterface;

class AdditionalItem extends ConfigValue
{
    /**
     * Json Serializer
     *
     * @var SerializerInterface
     */
    protected $serializer;

    /**
     * ShippingMethods constructor
     *
     * @param SerializerInterface $serializer
     * @param Context $context
     * @param Registry $registry
     * @param ScopeConfigInterface $config
     * @param TypeListInterface $cacheTypeList
     * @param AbstractResource|null $resource
     * @param AbstractDb|null $resourceCollection
     * @param array $data
     */
    public function __construct(
        SerializerInterface $serializer,
        Context $context,
        Registry $registry,
        ScopeConfigInterface $config,
        TypeListInterface $cacheTypeList,
        AbstractResource $resource = null,
        AbstractDb $resourceCollection = null,
        array $data = []
    ) {
        $this->serializer = $serializer;
        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
    }

    public function beforeSave()
    {
        $value = $this->getValue();
        unset($value['__empty']);
        $encodedValue = $this->serializer->serialize($value);

        $this->setValue($encodedValue);
    }

    protected function _afterLoad()
    {
        $value = $this->getValue();
        $decodedValue = $this->serializer->unserialize($value);

        $this->setValue($decodedValue);
    }
}

Thêm quản trị viên tùy chỉnh

<?php
namespace Abc\Paymentmethod\Block\Adminhtml\Form\Field;

use Magento\Config\Block\System\Config\Form\Field\FieldArray\AbstractFieldArray;

class AdditionalItem extends AbstractFieldArray
{
    protected function _prepareToRender()
    {
         $this->addColumn('noi', ['label' => __('NOI'),'readonly'=>'readonly']);
        $this->addColumn('fixed', ['label' => __('Fixed')]);
        $this->addColumn('percent', ['label' => __('Percent')]);
        $this->_addAfter = false;
        $this->_addButtonLabel = __('Add More');
    }
}

Cảm ơn bạn đã anwser của bạn, tuy nhiên, đây không phải là giải pháp. Đây chỉ là về cách tạo bảng mặc định. Tôi cần biết cách tạo các hàng động với dữ liệu (ví dụ với mảng dữ liệu) và cách loại bỏ các nút hành động và nút "thêm".
MartinE 18/03/19

/root/vendor/dotmailer/dotmailer-magento2-extension/Block/Adminhtml/Config/Automation/Customdatafields.php
Birjitsinh Zala

Vui lòng kiểm tra Customdatafields.php để biết thêm chi tiết
Birjitsinh Zala 18/03/19

-1 không phải là một giải pháp làm việc. Tôi đang tìm kiếm một giải pháp quá. Giống như @MartinE cho biết đây là bảng mặc định.
Akif

ok i under stand Vui lòng tham khảo liên kết này: nwdtheme.com/2018/06/21/ Khăn
Birjitsinh Zala 18/03/19
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.