Magento 2 Hiển thị thuộc tính khách hàng ở dạng ui_component


14

Tôi đã tạo ui_component biểu mẫu .

Nơi tôi cần hiển thị chi tiết khách hàng, Giống như Chỉnh sửa khách hàng .

Nhưng, tôi có thể hiển thị dữ liệu của họ từ customer_entitybảng.

DataProvider.php

public function getData()
{
    if (isset($this->loadedData)) {
        return $this->loadedData;
    }

    // {Vendor}\{Module}\Model\GridFactory 
    // Returns Customer Resource Model
    $items = $this->gridFactory->create()->getCollection();

   $items->getSelect()->join('customer_entity_text as second', 'main_table.entity_id = second.entity_id');
    //print_r($items->getData()); exit;
    foreach($items as $contact){
        $this->loadedData[$contact->getEntityId()]['contact'] = $contact->getData();
    }

    return $this->loadedData;
}

Tôi đã tham gia customer_entity_textbàn với Nhà máy của tôi để hiển thịstatus (Thuộc tính khách hàng).

Bây giờ thuộc tính thứ hai của tôi là fileloại. Đó là customer_entity_varchar, Đầu tiên tôi nghĩ rằng để thêm một tham gia khác nhưng tôi nghĩ đó không phải là cách tốt.

Vì vậy, có giải pháp nào cho việc này? Tôi cần hiển thị cả Customer Attributetrong hình thức của tôi.

ui_component

<field name="value">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string">Status</item>
                <item name="visible" xsi:type="boolean">true</item>
                <item name="dataType" xsi:type="string">text</item>
                <item name="formElement" xsi:type="string">input</item>
                <item name="source" xsi:type="string">contact</item>
            </item>
        </argument>
    </field>

1). Thành phần trên hoạt động tốt cho Status nhưng không phải cho Image Image là loại Image.

<field name="value">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string">Profile Image</item>
                <item name="visible" xsi:type="boolean">true</item>
                <item name="formElement" xsi:type="string">fileUploader</item>
                <item name="uploaderConfig" xsi:type="array">
                    <item name="url" xsi:type="url" path="path_controller"/>
                </item>
            </item>
        </argument>
    </field>

Ngay cả khi tôi xóa một trường có cùng tên form elementthì nó dường như không hoạt động.

Hãy xem fieldtên valuedành cho Status .

Nếu tôi sử dụng điều tương tự cho hình ảnh hiện trường hơn phần hình ảnh được biến mất.

Lưu ý : Tôi không biết tại sao Magento không cho phép sử dụng tên như value.

Vì tôi đã tham gia vào bộ sưu tập nên tôi nhận được valuelà khóa mảng.

** Câu hỏi: Làm thế nào tôi có thể có được các thuộc tính khách hàng trong biểu mẫu này mà không tham gia vào bộ sưu tập?

Ngoài ra nếu bạn có giải pháp khác ngoài hầu hết cũng được chào đón. **


Bạn có thể kiểm tra xem (các) thuộc tính mới mà bạn đang sử dụng có trong tập thuộc tính Mặc định của thực thể khách hàng không?
che khuất

Bạn có thể đọc lại câu hỏi của mình không: câu hỏi không có ý nghĩa với tôi khi đọc nó. Và do đó nó không giúp chúng tôi giải quyết vấn đề của bạn?
Herve Tribouilloy

Quên phần còn lại của mọi thứ, Nếu bạn có thể trả lời hơn làm thế nào tôi có thể hiển thị các thuộc tính khách hàng trong biểu mẫu ui tùy chỉnh của tôi? một là với hình ảnh và một là với văn bản.
sư TBS

câu hỏi của bạn để xây dựng một hình thức trong frontend hoặc phụ trợ?
Herve Tribouilloy 17/11/18

Câu trả lời:


0

Bạn cần tạo bảng tùy chỉnh của mình với mối quan hệ của bảng customer_entity bằng cách sử dụng tập lệnh thiết lập như sau:

$relationalTable = 'custom_table';  
$table = $setup->getConnection()
    ->newTable($setup->getTable($relationalTable))
    // --- Add your other columns here ---
    ->addColumn('customer_id', Table::TYPE_INTEGER, 10, ['nullable' => false, 'unsigned' => true],
            'Customer Id')
    ->addForeignKey(
        $setup->getFkName(
            $relationalTable,           // priTableName
            'customer_id',              // priColumnName
            'customer_entity',          // refTableName
            'entity_id'                 // refColumnName
        ),
        'customer_id',                  // column
        $setup->getTable('customer_entity'),    
        'entity_id',                    // refColumn
        Table::ACTION_CASCADE           // onDelete
    )
    ->setComment('Customer relation table');

$setup->getConnection()->createTable($table);

Sau đó, bạn cần tải mô hình khách hàng và tham gia bảng tùy chỉnh của mình trong hàm getData () của DataProvider.php như sau:

protected $_customerModel;

public function __construct(
    \Magento\Customer\Model\CustomerFactory $customerModel
) {
    $this->_customerModel = $customerModel;
}

public function getData()
{
    if (isset($this->loadedData)) {
        return $this->loadedData;
    }

   $customer = $this->_customerModel->create();
    $collection = $customer->getCollection();
    $collection->getSelect()->join(
        ['custom' => $this->_resource->getTableName('custom_table')],
        'e.entity_id = custom.customer_id'
    );

    foreach($collection as $item){
        $this->loadedData[$item->getId()]['contact'] = $item->getData();
        // Using $item->getData(), you can get customer object with custom attributes as $item->getStatus() or $item->getProfileImage()
    }

    return $this->loadedData;
}

Bây giờ bạn có thể sử dụng tên trường trong ui_component như sau:

<field name="status"> <!-- your custom attribute code as field name -->
...
</field>

<field name="profile_image"> <!-- your custom attribute code as field name -->
...
</field>

Hy vọng giải pháp này có thể giải quyết vấn đề của bạn.


Tôi cần giúp đỡ xin vui lòng đi qua câu hỏi của tôi " magento.stackexchange.com/questions/257577/iêu "
Rv Singh
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.