Magento 2でモーダル(モデルではない)の動作を変更しようとしています。
問題のモーダルはadvanced_inventory_modal
で宣言されていmodule-catalog-inventory/view/adminhtml/ui_component/product_form.xml
ます。
product-form-modifier-poolでModifierを使用できることがわかりました。
<virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool">
<arguments>
<argument name="modifiers" xsi:type="array">
<item name="hf_quantity" xsi:type="array">
<item name="class" xsi:type="string">Vendor\Module\Ui\DataProvider\Product\Form\Modifier\Quantity</item>
<item name="sortOrder" xsi:type="number">100</item>
</item>
</argument>
</arguments>
</virtualType>
...そしてmodifyMeta()
、修飾子で-method を使用してXML構成を操作しますが、何らかの理由で、ここで提供されるデータにインベントリモーダルが存在しません。またsortOrder
、私はすでにそのように高く設定しているので、関連する問題ではありません。sortOrder
-attributeはそれとは何かを持っているかもしれません。
それで何が得られますか?Magento 2の既存のモーダルのコンテンツを変更する適切な方法を教えてください。
編集:
私が達成しようとしていることを達成する方法に関する解決策または回避策を見つけました(まだわかりません)。10000に設定sortOrder
すると、使用可能なメソッドにデータが含まれていることがわかります。modifyMeta()
public function modifyMeta(array $meta)
{
if ($path = $this->arrayManager->findPath('quantity_and_stock_status_qty', $meta, null, 'children')) {
$this->arrayManager->remove(
$path . '/children/qty/arguments/data/config/validation/validate-digits',
$meta
);
}
if ($path = $this->arrayManager->findPath('advanced_inventory_modal', $meta)) {
$meta = $this->arrayManager->merge(
$path . '/children/stock_data/children/qty/arguments/data/config',
$meta,
['validation' => ['validate-digits' => false]]
);
}
return $meta;
}
Note that the `advanced_inventory_modal` node is not yet complete, but my best guess is that the later addition of the modal merges with these settings, but doesn't override it. Could be wrong though, perhaps someone could share some more light on how this mechanism works?