Tengo un componente de interfaz de usuario de cuadrícula que está dentro del conjunto de campos de alguna forma editada. Necesito pasar un entity_id
formulario de edición a la cuadrícula donde puedo filtrar la colección de algunos elementos por algún valor, y la cuadrícula mostrará el resultado apropiado. Creé el componente de cuadrícula usando un componente insertListing.
<insertListing name="slide_grid">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="autoRender" xsi:type="boolean">true</item>
<item name="source" xsi:type="string">slide</item>
<item name="loading" xsi:type="boolean">true</item>
<item name="dataScope" xsi:type="string">some_slider_slide_listing</item>
<item name="externalProvider" xsi:type="string">${ $.ns }.some_slider_slide_listing_data_source</item>
<item name="ns" xsi:type="string">some_slider_slide_listing</item>
<item name="externalData" xsi:type="string">id</item>
<item name="imports" xsi:type="array">
<item name="slider_id" xsi:type="string">${ $.provider }:data.entity_id</item>
</item>
<item name="exports" xsi:type="array">
<item name="slider_id" xsi:type="string">${ $.externalProvider }:params.slider_id</item>
</item>
</item>
</argument>
</insertListing>
Para transferir datos a un proveedor externo de datos que estoy usando
<item name="exports" xsi:type="array">
<item name="slider_id" xsi:type="string">${ $.externalProvider }:params.slider_id</item>
</item>
Dentro de mi proveedor de datos externo, estoy tratando de obtener los datos a través de una solicitud.
$this->request->getParam('slider_id');
Pero nada. En la interfaz, encontré que Magento enviaba una solicitud ajax con mi parámetro, pero no puedo captar esto en mi DataProvider y filtrar la colección.
magento2
uicomponent
data-provider
Misterio
fuente
fuente
Respuestas:
Para agregar un listado de inserción por parámetro del componente ui principal, podemos usar el siguiente código.
Aquí la
externalProvider
etiqueta es para agregar el proveedor de origen de la lista que estamos insertando.Aquí la
imports
etiqueta se usa para importar parámetros del origen de datos del formulario actualAquí, la
exports
etiqueta se utiliza para exportar los parámetros de datos del formulario actual a la lista que se va a insertar.Agregue unir con la columna relevante a la colección actual para que se use de dos maneras:
Para obtener más detalles, consulte el siguiente código:
En el proveedor de datos, agregue el filtro para este parámetro:
Me gusta seguir la opción 1.
fuente
Después de leer y depurar los archivos principales de Magento 2, he encontrado una solución limpia y simple sobre este problema. Pasar datos de un formulario personalizado a una cuadrícula personalizada usando UIComponent insertListing es realmente difícil y no está documentado en absoluto.
El objeto InsertListing tiene dos parámetros debajo de la etiqueta: exportaciones e importaciones que he usado en mi listado:
y después de horas de entender y encontrar una solución en la web, ¡no he encontrado ninguna pista!
Entonces, leí el archivo Magento Core y descubrí que Magento combina la forma de crear las cuadrículas de listado anidadas en el proyecto. En algún momento utiliza el antiguo método de inserción de bloque y pocas veces el nuevo método de listado UIComponent.
He encontrado la cuadrícula de listado de direcciones de clientes en customer_address_listing.xml (/vendor/magento/module-customer/view/adminhtml/ui_component/customer_address_listing.xml) y obtiene la variable parent_id definida en customer_form.xml (/ vendor / magento /module-customer/view/base/ui_component/customer_form.xml) pero la pregunta es:
¿Cómo pasa Magento los datos del formulario a la cuadrícula de listado anidado?
¡Magento pasa los datos por el PARÁMETRO QUERYSTRING!
Si lee el archivo DataProvider.php, se sorprenderá porque ¡QUERYSTRING obtiene la variable parent_id (customer)! Mire /vendor/magento/module-customer/Ui/Component/Listing/Address/DataProvider.php línea 58:
pero ¿cómo configuro el parámetro en la URL de grid de listado? ¡He encontrado el parámetro filterUrlParams pero también hay un problema extraño aquí! Echemos un vistazo a este código recortado de dataSource:
He configurado ticket_id con un comodín (*) que significa: ¡obtenga todos los tickets! pero si no configura ningún ID en filterUrlParams, la URL insertListing NO TIENE NINGÚN ticket_id SET! ¡¿Entonces por qué?!
La solución ofrecida por @ hashish-raj no funciona para mí.
Estas son todas las publicaciones que he leído sobre este tema:
Al final, encontré una solución temporal usando la sesión principal y almaceno el parámetro ticket_id en la sesión. Luego, en el proveedor de datos personalizado, lo he verificado y lo he aplicado a la colección:
Si tiene una solución alternativa o ha entendido cómo Magento maneja esta relación entre el componente UIC , ¡comparta su conocimiento!
He abierto una "recompensa" aquí: https://magento.stackexchange.com/a/306537/2004
fuente