He creado un módulo personalizado para mostrar la pestaña personalizada en el formulario del producto en el back-end. Usé esta solución.
Ahora en la pestaña, estoy agregando campos personalizados para guardar en la tabla de base de datos personalizada. decir<input type="text" name="my_new_field" value="123">
También creó un controlador personalizado para el producto de administración, como se muestra a continuación.
En 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>
Y en 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();
}
}
Ahora en execute
función, espero el valor POST de my_new_field
. Pero no lo entiendo. Después de obtener eso, usaré consultas personalizadas para guardar datos en una tabla personalizada.
¿Qué estoy haciendo mal o debo usar algún otro método?
Actualización: 26 de agosto.
He usado el formulario Ajax para guardar datos de la pestaña del producto ya que tenía restricciones de tiempo. He aceptado la respuesta de @ william-oakley. Ahora, como @mageworx agregó en su respuesta que esta no es una forma estándar de hacer esto.
Quiero usar el uso estándar de la interfaz de usuario en un mayor desarrollo. Entonces, mi pregunta es cómo agregar una pestaña personalizada a la edición del producto usando el estándar de formulario de IU y guardar campos personalizados en una tabla personalizada o de otra manera.
fuente
Respuestas:
Puede usar un campo de entrada "desnudo", solo tiene que agregar el siguiente atributo:
entonces:
Entonces podrá obtener los datos POST para su entrada.
fuente
La solución anterior no es completamente correcta. Está agregando un campo como elemento html "desnudo" y un formulario de producto es un formulario de interfaz de usuario con sus propias peculiaridades. Una clase especial (
vendor/magento/module-ui/view/base/web/js/form/form.js
) es responsable de la recopilación de campos y su validación cuando se envía un formulario. Además, esta clase debe omitir los campos que no están relacionados con este formulario de IU o que no sonadditional fields
similares a todos sus campos. Debe usar los siguientes nombres para asegurarse de que su campo se enviará al controlador:input type="text" name="product[my_new_field]" value="123"
Pero esto no es completamente correcto porque la solución correcta es no desviarse de los estándares de uso de formularios de IU y utilizar sus elementos y componentes nativos. En este caso, no debe preocuparse por tal cosa porque todo se procesará automáticamente.
Puede verificar el método principal para almacenar los datos de los formularios de la IU para comprender el proceso:
Como puede ver en este código, no se envía un formulario html con todos sus campos. Sin embargo,
this.source
ythis.additionalFields
se envían pero su elemento no está incluido en él porque se declara incorrectamente.ACTUALIZACIÓN DEL 23.08.2016
Aquí está el ejemplo sobre cómo agregar un conjunto de campos desde nuestro blog. Puede leer el artículo completo, utilizando el siguiente enlace:
Fuente: Una forma fácil de agregar un conjunto de campos con campos al formulario de IU :
fuente
Para guardar el campo del producto en una tabla personalizada, puede seguir la lógica del precio del nivel. Magento ahorrará el precio de nivel con la ayuda del modelo de back-end personalizado del precio de nivel. Podemos seguir la misma lógica para nuestro campo / atributo personalizado. Para guardar un atributo en una tabla personalizada, debe crear el atributo personalizado y proporcionarle el modelo de fondo. El modelo de backend valdiará y guardará y recuperará el atributo. Puedes seguir los pasos a continuación.
Paso 1. Crear atributo de producto
Paso 2. Cree un modelo de fondo para el atributo personalizado del producto que ayudará a la validación y guardará y recuperará el valor del atributo
Paso 2. Modelo de recurso para guardar y recuperar el valor del atributo de la tabla personalizada
fuente