ลำดับการเรียงคอลัมน์คอลัมน์แบบกำหนดเองของ Magento 2


20

ฉันทำกริดแบบกำหนดเองในผู้ดูแลระบบ Magento โดยใช้คอมโพเนนต์ UI โดยทั่วไปทุกอย่างทำงานได้ดีนอกเหนือจากลำดับของคอลัมน์ที่ไม่แสดงขวา ป้อนคำอธิบายรูปภาพที่นี่

  • ในขณะที่คุณสามารถดูคอลัมน์การกระทำที่ถูกต้องที่จุดเริ่มต้นและหนึ่งคอลัมน์ที่เลือกอยู่ในตอนท้าย
  • เมื่อฉันสร้างคอลัมน์ใน XML ฉันคำนึงถึงsortOrderคุณลักษณะสำหรับแต่ละคอลัมน์ แต่อย่างใดลำดับไม่ได้เป็นสิ่งที่ฉันตั้งให้

รหัสจากlisting.xmlคือต่อไปนี้

<columns name="inactive_columns" class="Module\MyModule\Ui\Component\Listing\Columns">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="storageConfig" xsi:type="array">
                <item name="provider" xsi:type="string">inactive_listing.inactive_listing.listing_top.bookmarks</item>
                <item name="namespace" xsi:type="string">current</item>
            </item>
            <item name="editorConfig" xsi:type="array">
                <item name="selectProvider" xsi:type="string">inactive_listing.inactive_listing.inactive_columns.ids</item>
                <item name="enabled" xsi:type="boolean">true</item>
                <item name="indexField" xsi:type="string">entity_id</item>
                <item name="clientConfig" xsi:type="array">
                    <item name="saveUrl" xsi:type="url" path="customer/index/inlineEdit"/>
                    <item name="validateBeforeSave" xsi:type="boolean">false</item>
                </item>
            </item>
            <item name="childDefaults" xsi:type="array">
                <item name="fieldAction" xsi:type="array">
                    <item name="provider" xsi:type="string">inactive_listing.inactive_listing.inactive_columns_editor</item>
                    <item name="target" xsi:type="string">startEdit</item>
                    <item name="params" xsi:type="array">
                        <item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
                        <item name="1" xsi:type="boolean">true</item>
                    </item>
                </item>
                <item name="storageConfig" xsi:type="array">
                    <item name="provider" xsi:type="string">inactive_listing.inactive_listing.listing_top.bookmarks</item>
                    <item name="root" xsi:type="string">columns.${ $.index }</item>
                    <item name="namespace" xsi:type="string">current.${ $.storageConfig.root }</item>
                </item>
            </item>
        </item>
    </argument>
    <selectionsColumn name="ids">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="indexField" xsi:type="string">entity_id</item>
                <item name="sortOrder" xsi:type="number">0</item>
            </item>
        </argument>
    </selectionsColumn>
    <column name="entity_id">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">textRange</item>
                <item name="sorting" xsi:type="string">asc</item>
                <item name="label" xsi:type="string" translate="true">ID</item>
                <item name="sortOrder" xsi:type="number">20</item>
            </item>
        </argument>
    </column>
    <column name="firstname">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">text</item>
                <item name="label" xsi:type="string" translate="true">Firstname</item>
                <item name="editor" xsi:type="string">text</item>
                <item name="sortOrder" xsi:type="number">40</item>
            </item>
        </argument>
    </column>
    <column name="lastname">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">text</item>
                <item name="label" xsi:type="string" translate="true">Lastname</item>
                <item name="editor" xsi:type="string">text</item>
                <item name="sortOrder" xsi:type="number">50</item>
            </item>
        </argument>
    </column>
    <column name="email">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">text</item>
                <item name="editor" xsi:type="string">text</item>
                <item name="label" xsi:type="string" translate="true">Email Cacat</item>
                <item name="sortOrder" xsi:type="number">30</item>
            </item>
        </argument>
    </column>
    <column name="group_id">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">select</item>
                <item name="editor" xsi:type="string">select</item>
                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                <item name="dataType" xsi:type="string">select</item>
                <item name="label" xsi:type="string" translate="true">Group</item>
                <item name="sortOrder" xsi:type="number">90</item>
            </item>
        </argument>
    </column>
    <column name="billing_telephone">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">text</item>
                <item name="editor" xsi:type="string">text</item>
                <item name="label" xsi:type="string" translate="true">Phone</item>
                <item name="sortOrder" xsi:type="number">100</item>
            </item>
        </argument>
    </column>
    <column name="created_at" class="Magento\Ui\Component\Listing\Columns\Date">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">dateRange</item>
                <item name="dataType" xsi:type="string">date</item>
                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                <item name="label" xsi:type="string" translate="true">Customer Since</item>
                <item name="sortOrder" xsi:type="number">110</item>
            </item>
        </argument>
    </column>
    <column name="last_visit_at" class="Magento\Ui\Component\Listing\Columns\Date">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                <item name="filter" xsi:type="string">dateRange</item>
                <item name="visible" xsi:type="boolean">false</item>
                <item name="dataType" xsi:type="string">date</item>
                <item name="label" xsi:type="string" translate="true">Last Logged In</item>
                <item name="sortOrder" xsi:type="number">120</item>
            </item>
        </argument>
    </column>
    <column name="created_in">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="visible" xsi:type="boolean">false</item>
                <item name="label" xsi:type="string" translate="true">Account Created in</item>
                <item name="sortOrder" xsi:type="number">140</item>
            </item>
        </argument>
    </column>
    <column name="kpi_views_customer">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">text</item>
                <item name="label" xsi:type="string" translate="true">Kpi Views</item>
                <item name="sortOrder" xsi:type="number">60</item>
            </item>
        </argument>
    </column>
    <column name="customer_membership">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">text</item>
                <item name="label" xsi:type="string" translate="true">Customer Membership</item>
                <item name="sortOrder" xsi:type="number">70</item>
            </item>
        </argument>
    </column>
    <column name="customer_access">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="filter" xsi:type="string">text</item>
                <item name="label" xsi:type="string" translate="true">Customer Access</item>
                <item name="sortOrder" xsi:type="number">80</item>
            </item>
        </argument>
    </column>
    <actionsColumn name="actions" class="Magento\Customer\Ui\Component\Listing\Column\Actions">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="indexField" xsi:type="string">entity_id</item>
                <item name="sortOrder" xsi:type="number">222</item>
            </item>
        </argument>
    </actionsColumn>
</columns> 

และโมดูล \ MyModule \ Ui \ Component \ Listing \ Column ระดับคือ

class Columns extends \Magento\Ui\Component\Listing\Columns
{

/**
 * @var \KPIs\CustomerReports\Model\Customer\Attribute\Repository\AttributeRepository $attributeRepository
 */
protected $attributeRepository;

protected $manageAttributes;

/** @var int */
protected $columnSortOrder;

public function __construct(
    ContextInterface $context,
    ColumnFactory $columnFactory,
    AttributeRepository $attributeRepository,
    ManageAttributes $manageAttributes,
    InlineEditUpdater $inlineEditor,
    array $components = [],
    array $data = []
)
{
    parent::__construct($context, $components, $data);
    $this->columnFactory = $columnFactory;
    $this->attributeRepository = $attributeRepository;
    $this->manageAttributes = $manageAttributes;
    $this->inlineEditUpdater = $inlineEditor;
}

public function prepareDataSource(array $dataSource)
{
    $customerAccessOptions = $this->attributeRepository->get(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, "customer_access")->getOptions();
    $customerMembershipOptions = $this->attributeRepository->get(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, "customer_membership")->getOptions();
    if (isset($dataSource['data']['items'])) {
        foreach ($dataSource['data']['items'] as & $item) {
            if (isset($item["customer_access"])) {
                $item["customer_access"][0] = $customerAccessOptions[$item["customer_access"][0]]->getLabel();
            }
            if (isset($item["customer_membership"])) {
                $item["customer_membership"] = $customerMembershipOptions[$item["customer_membership"][0]]->getLabel();
            }
        }
    }
    return $dataSource;
}
}
  • อย่างที่คุณเห็นในชั้นเรียนฉันไม่ได้ทำอะไรเรียงลำดับที่เกี่ยวข้อง :) ดังนั้นมันควรจะเป็นพฤติกรรมเริ่มต้น
  • นอกจากนี้คอลัมน์การกระทำและการเลือกไม่สามารถลากและวางได้ (เท่าที่ฉันเห็น)

ไม่มีใครมีความคิดใด ๆ ฉันจะเรียงลำดับคอลัมน์จาก XML หรือจากรหัสได้อย่างไร การดำเนินการควรเป็นคอลัมน์สุดท้ายและการเลือกรายการแรก ขอบคุณ! :)


2
ลองลากและวางคอลัมน์ในกริด
Keyur Shah

ฉันลองแล้วมันไม่ได้ทำงานกับคอลัมน์การกระทำและการเลือก
Dragos

คำตอบ:


53

ลองวิธีนี้

  1. ใช้บรรทัดด้านล่างเพื่อจัดเรียงคอลัมน์ในตาราง

    <item name="sortOrder" xsi:type="number">6</item>
  2. คุณเปิดฐานข้อมูลตารางui_bookmark

  3. ค้นหาชื่อของ UIComponent ของคุณจากnamespceคอลัมน์ของ ตาราง ui_bookmark คุณสามารถตรวจสอบชื่อ uiComponent จากเค้าโครง xml ที่เกี่ยวข้อง ด้านล่างเป็นเพียงตัวอย่างเส้นทาง

    /app/code/Vendor/Module/view/adminhtml/layout/module__controller_index.xml
  4. ตอนนี้ลบระเบียนที่คุณค้นหาจากตารางui_bookmark

  5. ล้างแคช

    php bin/magento cache:flush
    
    php bin/magento cache:clean

นั่นคือทั้งหมด สนุก!


ใช่นั่นคือคำตอบที่ถูกต้อง ขอบคุณ! :)
Dragos

7
ใช้งานได้ แต่น่าจะรู้วิธีรีเฟรชโดยไม่ต้องจัดการฐานข้อมูลโดยตรง
Volvox

งานนี้เหมือนมิ้นต์ :)
Praveen Negimani

5

คอลัมน์สั่งให้ตาราง ui ใน Magento2 ถูกเก็บไว้ในตาราง ui_bookmark

สำหรับคอลัมน์ที่namespaceเท่ากันคุณชื่อกริดและตัวระบุ = currentคุณควรเปลี่ยนconfigค่าคอลัมน์ คุณสามารถค้นหาคอลัมน์ที่มีในแถวท้ายทุกแถวพารามิเตอร์ "ตำแหน่ง": {}


ช่วยเต็มที่จริงๆสำหรับฉัน! มันเป็นทางออกการทำงาน ฉันได้ลบทั้งมุมมองปัจจุบันและมุมมองเริ่มต้นดังนั้นตอนนี้มันทำงานได้ดีตามที่ฉันต้องการ
Bhupendra Jadeja

2

คุณต้องตรวจสอบก่อน "module.xml" ของคุณและค้นหารหัส ตัวอย่าง:

และตรวจสอบคำสั่งของโมดูลของคุณจะต้องโหลดหลังจากหรือก่อนที่จะขึ้นอยู่กับการสั่งซื้อโมดูลโหลดหรือตรวจสอบให้แน่ใจโหลดโมดูลของคุณตามความต้องการของคุณ

คุณสามารถตรวจสอบโหลดโมดูลของคุณ ฯลฯ -> ไฟล์ config.xml

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.