将自定义字段添加到 Adminhtml 表单并填写数据(Magento 2)
Add custom field to Adminhtml form and fill data (Magento 2)
我需要将 Entity_id 添加到评级编辑表单(商店 -> 评级 -> 编辑评级)。
我尝试用插件
来实现这个
Vendor/Module/etc/adminhtml/di.xml:
<type name="Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form">
<plugin name="add_entity_type_rating_form" type="Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab\Form" sortOrder="1"/>
</type>
和class Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab\Form:
<?php
namespace Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab;
class Form
{
public function aroundGetFormHtml(
\Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form $subject,
\Closure $proceed
) {
$form = $subject->getForm();
if (is_object($form)) {
$fieldset = $form->getElement('rating_form');
if ($fieldset) {
$fieldset->addField(
'entity_id',
'text',
[
'name' => 'entity_id',
'label' => __('Entity Type'),
'title' => __('Entity Type'),
]
);
}
}
return $proceed();
}
}
在后端我可以看到归档 'Entity Type',但它没有任何价值
我应该如何将数据传递到此字段 (entity_id)?
@Smirnov 我刚刚解决了一个类似的问题,你需要做的是在你的插件函数中再次将值设置为表单。结果应如下所示:
<?php
namespace Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab;
use Magento\Framework\Registry;
class Form
{
/**
* @var \Magento\Framework\Registry
*/
protected $registry;
/**
* @param \Magento\Framework\Registry $registry
*/
public function __construct(
Registry $registry
) {
$this->registry = $registry;
}
/**
* @param \Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form $subject
* @param \Closure $proceed
* @return \Closure $proceed
*/
public function aroundGetFormHtml(
\Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form $subject,
\Closure $proceed
) {
$form = $subject->getForm();
if (is_object($form)) {
$ratingData = $this->registry->registry('rating_data');
$fieldset = $form->getElement('rating_form');
if ($fieldset) {
$fieldset->addField(
'entity_id',
'text',
[
'name' => 'entity_id',
'label' => __('Entity Type'),
'title' => __('Entity Type'),
]
);
}
if ($ratingData) {
$form->setValues($ratingData);
}
}
return $proceed();
}
}
希望这可以帮助您解决您的需求。最好的。
我需要将 Entity_id 添加到评级编辑表单(商店 -> 评级 -> 编辑评级)。 我尝试用插件
来实现这个Vendor/Module/etc/adminhtml/di.xml:
<type name="Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form">
<plugin name="add_entity_type_rating_form" type="Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab\Form" sortOrder="1"/>
</type>
和class Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab\Form:
<?php
namespace Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab;
class Form
{
public function aroundGetFormHtml(
\Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form $subject,
\Closure $proceed
) {
$form = $subject->getForm();
if (is_object($form)) {
$fieldset = $form->getElement('rating_form');
if ($fieldset) {
$fieldset->addField(
'entity_id',
'text',
[
'name' => 'entity_id',
'label' => __('Entity Type'),
'title' => __('Entity Type'),
]
);
}
}
return $proceed();
}
}
在后端我可以看到归档 'Entity Type',但它没有任何价值
我应该如何将数据传递到此字段 (entity_id)?
@Smirnov 我刚刚解决了一个类似的问题,你需要做的是在你的插件函数中再次将值设置为表单。结果应如下所示:
<?php
namespace Vendor\Module\Plugin\Block\Adminhtml\Rating\Edit\Tab;
use Magento\Framework\Registry;
class Form
{
/**
* @var \Magento\Framework\Registry
*/
protected $registry;
/**
* @param \Magento\Framework\Registry $registry
*/
public function __construct(
Registry $registry
) {
$this->registry = $registry;
}
/**
* @param \Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form $subject
* @param \Closure $proceed
* @return \Closure $proceed
*/
public function aroundGetFormHtml(
\Magento\Review\Block\Adminhtml\Rating\Edit\Tab\Form $subject,
\Closure $proceed
) {
$form = $subject->getForm();
if (is_object($form)) {
$ratingData = $this->registry->registry('rating_data');
$fieldset = $form->getElement('rating_form');
if ($fieldset) {
$fieldset->addField(
'entity_id',
'text',
[
'name' => 'entity_id',
'label' => __('Entity Type'),
'title' => __('Entity Type'),
]
);
}
if ($ratingData) {
$form->setValues($ratingData);
}
}
return $proceed();
}
}
希望这可以帮助您解决您的需求。最好的。