Magento 2以ui_component形式显示客户属性


14

我创建了ui_component表单。

在需要显示客户详细信息的地方,与客户编辑相同。

但是,我可以从customer_entity表中显示其数据。

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;
}

我已将customer_entity_text表与Factory一起加入以便显示status(客户属性)。

现在,我的第二个属性是filetype。在中customer_entity_varchar,首先我认为要添加另一个联接,但我认为这不是好方法。

那么,对此有什么解决方案吗?我需要Customer Attribute在表单中同时显示两者。

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)。上面的组件对状态有效,但对于图像类型的个人档案图像则无效。

<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>

即使我删除了一个具有相同名称的字段,form element它似乎也不起作用。

看看field这是名称value状态

如果我对图像字段使用相同的内容,则图像组件消失了。

注意:我不知道为什么Magento不允许使用名字作为value

因为我已经加入了集合,所以我要value作为数组键。

**问题:如何在不加入集合的情况下以这种形式获取客户属性?

另外,如果您有除大多数解决方案之外的其他解决方案,也非常欢迎。**


您可以检查正在使用的新属性是否在客户实体的“默认”属性集中吗?
晦涩的

您能再读一遍自己的问题:在阅读时,这个问题对我来说没有意义。因此,这对我们解决您的问题没有帮助吗?
Herve Tribouilloy

忘记其他事情了,如果您不能回答我如何在自定义ui表单中显示客户属性?一种是图像,另一种是文本。
TBS法师

您是在前端还是后端中构建表单的问题?
Herve Tribouilloy

Answers:


0

您需要使用安装程序脚本来创建与customer_entity表之间的关系的自定义表:

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

然后,您需要加载客户模型并在DataProvider.php的getData()函数中加入自定义表,如下所示:

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;
}

现在,您可以在ui_component中使用字段名称,如下所示:

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

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

希望此解决方案可以解决您的问题。


我需要帮助,请回答我的问题“ magento.stackexchange.com/questions/257577/…
Rv Singh,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.