
magento 2
Precisa de um campo novo na aba do produto no admin e a primeira ideia é copiar o product_form.xml do Magento_Catalog pro seu módulo. Não copie: são centenas de linhas que viram dívida técnica no próximo upgrade. O caminho é uma classe modifier registrada no pool.
Vai no etc/adminhtml/di.xml do seu módulo, dentro da tag config. O core já declara esse virtualType em Magento_Catalog, então aqui você só acrescenta o seu item:
<virtualType name="MagentoCatalogUiDataProviderProductFormModifierPool">
<arguments>
<argument name="modifiers" xsi:type="array">
<item name="rt_entrega" xsi:type="array">
<item name="class" xsi:type="string">RtCatalogoUiDataProviderProductFormModifierEntrega</item>
<item name="sortOrder" xsi:type="number">200</item>
</item>
</argument>
</arguments>
</virtualType> O sortOrder não é enfeite: sem ele o Pool estoura na hora de montar o formulário dizendo que o parâmetro sortOrder está faltando. E o número decide quem ganha. O pool roda em ordem crescente e o modifier Eav do Magento_Catalog está com sortOrder 10, substituindo o children inteiro do grupo. Se você entrar abaixo dele, o campo desaparece. A lista do core termina em 160, por isso uso 200.
namespace RtCatalogoUiDataProviderProductFormModifier;
use MagentoCatalogUiDataProviderProductFormModifierAbstractModifier;
class Entrega extends AbstractModifier
{
public function modifyMeta(array $meta): array
{
$meta['product-details']['children']['rt_prazo']['arguments']['data']['config'] = [
'componentType' => 'field',
'formElement' => 'input',
'dataType' => 'text',
'label' => __('Prazo extra em dias'),
'dataScope' => 'rt_prazo',
'sortOrder' => 200,
];
return $meta;
}
public function modifyData(array $data): array
{
return $data;
}
} As duas são obrigatórias: AbstractModifier deixa modifyMeta e modifyData abstratas.
A armadilha que me custou uma tarde: o campo aparece bonitinho, você salva e o valor some. Desenhar o meta não cria coluna nenhuma. O rt_prazo precisa existir como atributo de produto, criado num data patch com EavSetup, ou você persiste na mão num plugin do save.
Depois de mexer no di.xml rode bin/magento cache:clean config, e em produção bin/magento setup:di:compile antes disso. Senão o pool compilado velho continua valendo e você jura que o modifier não foi registrado.
Se travou nisso e precisa de ajuda, me chama aqui.
Site abrindo em branco sem mensagem nenhuma? Leia o log do PHP-FPM, identifique o plugin que causou o fatal e…
Trocou DateTime por DateTimeImmutable e a data parou de andar? O modify devolve uma cópia nova em vez de alterar…
Use o parâmetro strategy do wp_enqueue_script para adiar o JavaScript do tema, sem plugin de otimização, e entenda por que…
O banner aparece, o visitante não clica em nada e o Analytics já gravou cookie. Veja como segurar o script…
Var_dump esquecido e senha de teste passam batido no commit. Um script PHP que lê o git diff --staged e…
O campo está no schema.graphqls e a API insiste em Cannot query field. Limpe o cache certo, recompile o generated…