Eu criei um módulo personalizado para exibir a guia personalizada no formulário do produto no back-end. Eu usei esta solução.
Agora, na guia, estou adicionando campos personalizados para salvar na tabela de banco de dados personalizada. dizer<input type="text" name="my_new_field" value="123">
Também criou um controlador personalizado para o produto admin, salvo como abaixo.
Em etc / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Controller\Adminhtml\Product\Save" type="Namespace\Module\Controller\Adminhtml\Rewrite\Product\Save" />
</config>
E em Controller / Adminhtml / Rewrite / Product / Save.php
<?php
namespace Namespace\Module\Controller\Adminhtml\Rewrite\Product;
class Save extends \Magento\Catalog\Controller\Adminhtml\Product\save
{
public function execute()
{
echo "hello"; print_r($_POST); die;
return parent::execute();
}
}
Agora, na execute
função, estou esperando o valor POST de my_new_field
. Mas eu não estou entendendo. Depois de obter isso, usarei consultas personalizadas para salvar dados na tabela personalizada.
O que estou fazendo de errado ou devo usar outro método?
Atualização: 26 de agosto
Eu usei o formulário Ajax para salvar dados da guia do produto, pois eu tinha restrições de tempo. Aceitei a resposta de @ william-oakley. Agora, como o @mageworx adicionou em sua resposta que essa não é uma maneira padrão de fazer isso.
Eu quero usar o uso padrão do formulário da interface do usuário em desenvolvimento adicional. Portanto, minha pergunta é como adicionar uma guia personalizada à edição do produto usando o padrão de formulário da interface do usuário e salvar campos personalizados na tabela personalizada ou de outra maneira.
fonte
Respostas:
Você pode simplesmente usar um campo de entrada "nu", basta adicionar o seguinte atributo:
então:
Você poderá obter os dados do POST para sua entrada.
fonte
A solução acima não está totalmente correta. Você está adicionando um campo como um elemento html "nu" e um formulário de produto é um formulário de interface do usuário com suas próprias peculiaridades. Uma classe especial (
vendor/magento/module-ui/view/base/web/js/form/form.js
) é responsável pela coleta de campos e sua validação quando um formulário é enviado. Além disso, essa classe deve perder os campos que não estão relacionados a este formulário da interface do usuário ou nãoadditional fields
são todos os seus campos. Você deve usar a seguinte nomeação para garantir que seu campo seja enviado ao controlador:input type="text" name="product[my_new_field]" value="123"
Mas isso não está completamente correto porque a solução correta não é se desviar dos padrões de uso do formulário da interface do usuário e utilizar seus elementos e componentes nativos. Nesse caso, você não deve se preocupar com isso, porque tudo será processado automaticamente.
Você pode verificar o principal método de armazenamento dos dados dos formulários da interface do usuário para entender o processo:
Como você pode ver neste código, um formulário html com todos os seus campos não é enviado. No entanto,
this.source
ethis.additionalFields
são enviados, mas seu elemento não está incluído porque é declarado incorretamente.ATUALIZAÇÃO DE 23.08.2016
Aqui está o exemplo de como adicionar um conjunto de campos do nosso blog. Você pode ler o artigo completo, usando o link abaixo:
Fonte: Uma maneira fácil de adicionar um conjunto de campos com campos ao formulário da interface do usuário :
fonte
Para salvar o campo do produto na tabela personalizada, você pode seguir a lógica do preço da camada. O Magento salvará o preço da camada com a ajuda do modelo personalizado de back-end do preço da camada. Podemos seguir a mesma lógica para o nosso campo / atributo personalizado. Para salvar o atributo na tabela customizada, você deve criar o atributo customizado e fornecer o modelo de back-end. O modelo de back-end irá validar, salvar e recuperar o atributo. Você pode seguir as etapas abaixo.
Etapa 1. Criar atributo do produto
Etapa 2. Crie um modelo de back-end para o atributo customizado do produto, que ajudará na validação e salvará e recuperará o valor do atributo
Etapa 2. Modelo de recurso para salvar e recuperar o valor do atributo da tabela customizada
fonte