¿Existe una buena explicación y / o muestra de la configuración mínima básica necesaria para crear una cuadrícula de componentes de la interfaz de usuario en Magento 2?
Sé que hay innumerables componentes principales, como
./vendor/magento/module-catalog/view/adminhtml/ui_component/product_listing.xml
Sin embargo, estos archivos XML son expansivos y hay poca explicación sobre lo que hace cada nodo y cómo usaría esto para construir una cuadrícula desde cero.
También hay este módulo de muestra , pero
- Parece ser antes de un formulario
- Carece de contexto / explicación sobre lo que hace cada nodo
Estoy buscando la información de "inicio" que me permita crear una cuadrícula para mi propia colección de modelos CRUD.
magento2
php
layout
uicomponent
Alan Storm
fuente
fuente

Respuestas:
[EDITAR 3 de octubre de 2018]
Actualización para enlaces a devdocs: 2.0 - https://devdocs.magento.com/guides/v2.0/ui-components/ui-listing-grid.html y https://devdocs.magento.com/guides/v2. 0 / ui-components / ui -dary.html
2.1 - https://devdocs.magento.com/guides/v2.1/ui_comp_guide/components/ui-listing-grid.html
2.2 - https://devdocs.magento.com/guides/v2.2/ui_comp_guide/components/ui-listing-grid.html
[EDITAR 21 de enero de 2016]
A partir del 20/01/2016, los devdocs de magento2 se han actualizado con documentación ampliada de los componentes de la interfaz de usuario. No lo he revisado exhaustivamente, pero pueden contener más información que la respuesta que di hace unos días, por lo que, en interés de su tiempo, es posible que desee ver http://devdocs.magento.com/guides/v2.0/ui -library / ui-library -dary.html
[/EDITAR]
Llevo más de un mes trabajando con Magento2 y esto es lo que noté sobre la nueva forma de crear cuadrículas.
Componente de cuadrícula Magento 2 UI
1) el archivo de diseño dentro de la
Company/Module/view/adminhtml/layout/module_controller_action.xmlcuadrícula definida como uiComponent con:2) uiComponent se define en el
Company/Module/view/adminhtml/ui_component/listing_name.xmlarchivo. El nombre del archivo debe ser el mismo que el nombre del componente ui utilizado en el archivo de diseño. La estructura del archivo puede parecer bastante compleja a primera vista, pero como siempre, estos son algunos nodos repetidos. Para hacerlo simple, vamos a cortarlo. El nodo principal del archivo componente es<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">. Está arreglado y creo que requiere un atributo de ubicación de espacio de nombres. A continuación son típicamente 4 nodos dentro de<listing />nodo:<argument />,<dataSource />,<container />y<columns />. Sin embargo, esta no es una configuración estricta, ya que el<argument />nodo podría duplicarse para proporcionar más configuración o<container />como en la lista de páginas de cms que agrega un contenedor "fijo" por alguna razón.El primer nodo es
<argument />. Este nodo define datos para el componente. Por lo general, debe proporcionar algo como esto:<argument />El nodo requiere atributoname. En este casodatadefine información básica sobre el componente. Contiene múltiples<item />nodos para cada parte específica de la configuración.js_configle dice al componente dónde está el proveedor de los datos y las dependencias en la configuración xml de la lista (que creo que se convierte en hash de JavaScript).providerEl valor consiste en el nombre del listado utilizado en el archivo de diseño y el nombre de la fuente de datos uniqure que se usará más adelante. En esos listados revisé en magentoproviderydepsson lo mismo. No estoy seguro de qué sirve tener esto diferente.spinnertoma el nombre del nodo donde se definen las columnas de la cuadrícula.buttonspermite agregar botones a la parte superior de la cuadrícula. En la mayoría de los casos sería solo unAdd newbotón. Los botones tienen pocos elementos:nameusado como id de elemento,labeles lo que dice el botón,classes la clase de botón yurles el enlace al que apunta. Los asteriscos se reemplazan por la parte de la URL actual. Otros posibles<item />nodos de botón son:id,title,type(reset, botón de envío o),onclick(en lugar deurl, tiene precedencia),style,value,disabled. El elemento del botón se representa porMagento\Ui\Component\Control\Buttonclase.A continuación tenemos
<dataSource />nodo:nameusado en el<dataSource />nodo debe coincidir con el usado enargument/js_config/provideryargument/js_config/deps. El siguiente nodo define qué clase es responsable de preparar los datos para la cuadrícula.classEl argumento requiere un nombre único que coincidadi.xml.primaryFieldNamese relaciona con la columna primaria de la base de datos yrequestFieldNamecon la variable en las solicitudes http. Pueden ser iguales, pero no es necesario, la lista de páginas de CMS usapage_idasprimaryFieldNameyidasrequestFieldName.update_urlse refiere al punto de entrada donde se envían las llamadas ajax para filtrado y clasificación. El segundo argumento se<dataSource />refiere al archivo javascript que maneja js parte del envío y procesamiento de llamadas ajax para la cuadrícula. El archivo predeterminado esMagento/Ui/view/base/web/js/grid/provider.js.Otro nodo es
<container />.Como contiene muchos datos, permítanme dividirlos también. Sus hijos son las partes de toda la página. Primer hijo
<argument />:Define la plantilla de eliminación responsable de manejar el diseño y todas las acciones y, por defecto, apunta a
Magento/Ui/view/base/web/templates/grid/toolbar.htmlEl siguiente nodo es (o puede ser)
<bookmark />Este nodo agrega la función de marcador a la cuadrícula. Permite al administrador configurar diferentes "perfiles" de la cuadrícula que muestra diferentes columnas. Gracias a eso, puede agregar todas las columnas de la tabla a la cuadrícula y dejar que el usuario decida qué información es relevante para él.
namespacedebe coincidir con el nombre utilizado en el archivo de diseño.Otro nodo es
<component />Tenemos 3 valores para configurar aquí. Primero es el
providerque sigue el patrón [listing_name_from_layout]. [Listing_name_from_layout]. [Listing_columns_node_name] (como en el listado de nodos / argumento / spinner).componentse refiere al archivo js que muestra la cuadrícula y, de forma predeterminada, puntos a losMagento/Ui/view/base/web/js/grid/controls/columns.jsque se usa la plantillaMagento/Ui/view/base/web/templates/grid/controls/columns.html. El último elemento es eldisplayAreaque define dónde deben mostrarse los controles de columna. Se refiere algetRegion('dataGridActions')archivo definido encontainer/argument/config/template(predeterminado:)Magento/Ui/view/base/web/templates/grid/toolbar.html.El siguiente nodo es
<filterSearch />Este nodo agrega búsqueda de texto completo en la página. Se encuentra encima de la cuadrícula como campo de entrada de texto único con "Buscar por palabra clave" como marcador de posición. No estoy seguro de qué opciones son posibles aquí, ya que no jugué tanto, pero listing_filters_chips se refiere al
Magento/Ui/view/base/web/js/grid/filters/chips.jsarchivo.El siguiente nodo es
<filters />Este nodo define la configuración para el filtrado de columnas que es visible después de hacer clic en el botón "Filtros" en la esquina superior derecha encima de la cuadrícula.
columnsProvidersigue una estructura similar a los nodos anteriores, por lo que [listing_name_from_layout]. [listing_name_from_layout]. [listing_columns_node_name].storegeConfigva como [listing_name_from_layout]. [listing_name_from_layout]. [container_node_name] [bookmark_node_name]. Entemplatesel nodo del elemento, puede definir qué archivos se utilizan para representar opciones de filtro específicas. En este caso, solo se define select y se usaMagento/Ui/view/base/web/js/form/element/ui-select.jscomocomponentyMagento/Ui/view/base/web/templates/grid/filters/elements/ui-select.htmlcomo plantilla de eliminación. MiraMagento/Ui/view/base/web/js/form/elementpara ver otras posibilidades. Aquí solo se define select para anular los valores predeterminados:Magento/Ui/view/base/web/js/form/element/select.jsyMagento/Ui/view/base/web/templates/grid/filters/elements/select.html. Los valores predeterminados para filtros y otros nodos se definen enMagento/Ui/view/base/ui_component/etc/definition.xml.El siguiente nodo es
<massAction />y permite agregar acciones masivas seleccionadas a la cuadrículanameEl argumento debe ser único. El primer nodo hijo<argument />define datos básicos.providersigue la misma estructura que otros nodos y hace referencia al nombre del nodo de las columnas y su columna de identificadores. Esta columna mantendrá casillas de verificación con elementos seleccionados para que la acción masiva se procese.componentdefine qué archivo se usa para representar y manejar la acción en masa. El valor predeterminado esMagento_Ui/js/grid/massactions(apunta aMagento/Ui/view/base/web/js/grid/massactions.js). Puede usarMagento_Ui/js/grid/tree-massactionspara agregar estructura tipo árbol. En el caso anterior, lo uso para agregar la acción "Cambiar estado" que muestra las opciones "habilitar" y "deshabilitar". Después del<argument />nodo, puede agregar tantos<action />nodos como tantas acciones que desee tener. Cada<action />nodo sigue un esquema similar. En el primer caso (acción de eliminación), el nodo requiere un nombre único. Luegoargumentcontiene la configuración dondelabeles lo que está visible en la opción de selección,urlpunto final para enviar datos yconfirmagrega modal de confirmación antes de enviar. En caso de "Cambiar estado", se omite la acciónurlen el primerargumentnodo ya que las URL se proporcionan por estado por clase definida en el segundoargumentnodo. La clase debe implementar la interfaz Zend \ Stdlib \ JsonSerializable. VerificarMagento\Customer\Ui\Component\MassAction\Group\Optionscomo referencia.Finalmente en el
<container />nodo tenemos un<paging />nodo que define la paginación.Estructura para
provideryselectProviderdebe estar claro ahora.Y el último nodo para la cuadrícula básica es
<columns />. Contiene todas las definiciones de columnas que están disponibles para que las use el administrador. El nodo se define comoy el atributo de nombre se usa en otros nodos cuando se refiere a él. Primer hijo es
Lo que hice aquí fue solo proporcionar
providervalores correctos siguiendo el esquema utilizado en la lista.fieldActionEl nodo permite definir la acción que se dispara cuando se hace clic en la celda. Configuración predeterminada llamada acción de ediciónEl siguiente es
<selectionColumns />Este nodo define la columna con casillas de verificación para la acción masiva a utilizar. Su nombre se menciona después del punto en varios nodos descritos anteriormente.
Después de eso, puede agregar cualquier número de columnas en el mismo formato:
No todos los nodos de elementos más internos son necesarios. Ellos están definiendo:
filter- tipo de filtro de la columna. Esto se usa en el bloque de filtros. Los valores disponibles son: texto, select, dateRange. Si se usa select se usará<item name="options">...</item>como una clase que proporciona opciones para el filtro selectcomponent- define archivos js que se utilizan para representar la columna. Las opciones disponibles están enMagento/Ui/view/base/web/js/grid/columns/*. se proporciona seleccionar si el filtro está configurado para seleccionar. Para el filtro de texto, este valor no es obligatorio.dataType- proporciona información del tipo de datos utilizado para el valor de la columna. Para select use select también, para dateRange use datebodyTmpl: define el archivo html utilizado por knockout para representar la celda. Por defecto se usa ui / grid / cells / text (Magento/Ui/view/base/web/templates/grid/cells/text.html). Otras opciones se encuentran en elMagento/Ui/view/base/web/templates/grid/cells/*directorio.ui/grid/cells/htmlpermite usar contenido html en la celda.label- esto se mostrará en el encabezado de columna y el bloque de filtrosortOrder- pedidovisible- si se muestra o no la columna. Esto se puede utilizar para definir columnas para marcadores, pero no las muestra de forma predeterminada.Al final, puede agregar acciones a la columna de acciones de brujas disponibles para el elemento individual
indexFieldse refiere al nombre de la columna en la base de datos. La clase de acciones debe extenderMagento\Ui\Component\Listing\Columns\Columny definir elprepareDataSourcemétodo. VerMagento/Cms/Ui/Component/Listing/Column/PageActions.phpcomo referencia3) para terminar la grilla necesitamos definir algunos elementos en Company / Module / etc / di.xml
Primero definimos la clase de proveedor que se usó en el nodo
dataSource/classcollectionresuelve la clase de colección estándar yfilerPooldefine un nuevo elemento:Evidentemente, esto tiene que ver con el filtrado y la búsqueda. Por ahora siempre usé los valores predeterminados.
Ahora registramos nuestra fuente de datos:
En este caso, el nombre del nodo debe coincidir con el utilizado en el
<dataSource />nodo en la lista de xml y se resuelve no en la colección sino en la clase GridCollection. Debe extender la clase de colección regular e implementar adicionalmenteMagento\Framework\Api\Search\SearchResultInterface.Al final configuramos nuestra colección de grillas (los nombres de los argumentos son bastante obvios)
fuente
Para la grilla necesitamos dos archivos principales, uno es ui_component xml y el segundo es di.xml
Espero que sepa en el archivo xml de diseño que necesita agregar la etiqueta uiComponent, es decir,
ahora necesita crear una
test_lists_listing.xmlcarpeta ui_component.Por ejemplo, app \ code \ Sugarcode \ Test \ view \ adminhtml \ ui_component \ test_lists_listing.xml
Este archivo tiene varias etiquetas
<argument name="data" xsi:type="array">: - Necesito mencionar arugemnt como botón js etc.<dataSource name="test_lists_listing_data_source">: - este bloque se usa para proporcionar datos para cuadrículas en este uno de los argumentos<argument name="class" xsi:type="string">ListsGridDataProvider</argument>que debemos mencionardi.xml(explicado en la parte di.xml )<container name="listing_top">: - en este bloque mencionamos filtros, exportación, marcadores (que guardan datos en la tabla ui_bookmark), masajes, paginación y texto completo (para realizar una búsqueda de texto completo en la configuración o tabla, esa columna debe ser el índice de texto completo)<columns name="test_lists_columns">: - en esto necesitamos mencionar todas las columnasEl último está en di.xml
app \ code \ Sugarcode \ Test \ view \ adminhtml \ ui_component \ test_lists_listing.xml
fuente
El suplemento de la respuesta principal
La respuesta principal es excelente, la sigo para crear una página de listado. Pero tiene un problema :
Solución
En el
<dataSource />nodo, a continuación<item name="update_url" xsi:type="url" path="mui/index/render"/>, agregue el contenido:entity_ides la clave principal para la colección de listado.fuente
Encontré la respuesta de @ Zefiryn muy útil y una excelente manera de comenzar sin leer la documentación completa de Magento.
Dicho esto, no conseguí que las cosas funcionen del todo después de estas respuestas. Además, una vez que tenga una página de listado funcionando, inmediatamente querrá el resto de una interfaz CRUD.
Encontré un módulo de muestra en github . Comenzar con este hilo para orientación y luego portar / piratear el código del complemento de muestra resultó ser la forma más rápida de obtener una interfaz CRUD contra una tabla personalizada.
fuente