¿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.xml
cuadrícula definida como uiComponent con:2) uiComponent se define en el
Company/Module/view/adminhtml/ui_component/listing_name.xml
archivo. 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 casodata
define información básica sobre el componente. Contiene múltiples<item />
nodos para cada parte específica de la configuración.js_config
le 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).provider
El 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 magentoprovider
ydeps
son lo mismo. No estoy seguro de qué sirve tener esto diferente.spinner
toma el nombre del nodo donde se definen las columnas de la cuadrícula.buttons
permite agregar botones a la parte superior de la cuadrícula. En la mayoría de los casos sería solo unAdd new
botón. Los botones tienen pocos elementos:name
usado como id de elemento,label
es lo que dice el botón,class
es la clase de botón yurl
es 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\Button
clase.A continuación tenemos
<dataSource />
nodo:name
usado en el<dataSource />
nodo debe coincidir con el usado enargument/js_config/provider
yargument/js_config/deps
. El siguiente nodo define qué clase es responsable de preparar los datos para la cuadrícula.class
El argumento requiere un nombre único que coincidadi.xml
.primaryFieldName
se relaciona con la columna primaria de la base de datos yrequestFieldName
con la variable en las solicitudes http. Pueden ser iguales, pero no es necesario, la lista de páginas de CMS usapage_id
asprimaryFieldName
yid
asrequestFieldName
.update_url
se 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.html
El 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.
namespace
debe coincidir con el nombre utilizado en el archivo de diseño.Otro nodo es
<component />
Tenemos 3 valores para configurar aquí. Primero es el
provider
que sigue el patrón [listing_name_from_layout]. [Listing_name_from_layout]. [Listing_columns_node_name] (como en el listado de nodos / argumento / spinner).component
se refiere al archivo js que muestra la cuadrícula y, de forma predeterminada, puntos a losMagento/Ui/view/base/web/js/grid/controls/columns.js
que se usa la plantillaMagento/Ui/view/base/web/templates/grid/controls/columns.html
. El último elemento es eldisplayArea
que 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.js
archivo.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.
columnsProvider
sigue una estructura similar a los nodos anteriores, por lo que [listing_name_from_layout]. [listing_name_from_layout]. [listing_columns_node_name].storegeConfig
va como [listing_name_from_layout]. [listing_name_from_layout]. [container_node_name] [bookmark_node_name]. Entemplates
el 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.js
comocomponent
yMagento/Ui/view/base/web/templates/grid/filters/elements/ui-select.html
como plantilla de eliminación. MiraMagento/Ui/view/base/web/js/form/element
para ver otras posibilidades. Aquí solo se define select para anular los valores predeterminados:Magento/Ui/view/base/web/js/form/element/select.js
yMagento/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ículaname
El argumento debe ser único. El primer nodo hijo<argument />
define datos básicos.provider
sigue 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.component
define 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-massactions
para 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. Luegoargument
contiene la configuración dondelabel
es lo que está visible en la opción de selección,url
punto final para enviar datos yconfirm
agrega modal de confirmación antes de enviar. En caso de "Cambiar estado", se omite la acciónurl
en el primerargument
nodo ya que las URL se proporcionan por estado por clase definida en el segundoargument
nodo. La clase debe implementar la interfaz Zend \ Stdlib \ JsonSerializable. VerificarMagento\Customer\Ui\Component\MassAction\Group\Options
como referencia.Finalmente en el
<container />
nodo tenemos un<paging />
nodo que define la paginación.Estructura para
provider
yselectProvider
debe 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
provider
valores correctos siguiendo el esquema utilizado en la lista.fieldAction
El 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/html
permite 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
indexField
se refiere al nombre de la columna en la base de datos. La clase de acciones debe extenderMagento\Ui\Component\Listing\Columns\Column
y definir elprepareDataSource
método. VerMagento/Cms/Ui/Component/Listing/Column/PageActions.php
como 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/class
collection
resuelve la clase de colección estándar yfilerPool
define 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.xml
carpeta 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_id
es 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