Existe uma boa explicação e / ou amostra da configuração mínima necessária para criar uma grade de componentes de interface do usuário no Magento 2?
Eu sei que existem inúmeros componentes principais, como
./vendor/magento/module-catalog/view/adminhtml/ui_component/product_listing.xml
No entanto, esses arquivos XML são amplos, e há poucas explicações sobre o que cada nó faz e como você usaria isso para criar uma grade do zero.
Há também este módulo de amostra , mas
- Parece estar diante de um formulário
- Falta qualquer contexto / explicação sobre o que cada nó faz
Estou procurando as informações de "introdução" que me permitiriam criar uma grade para minha própria coleção de modelos CRUD.
magento2
php
layout
uicomponent
Alan Storm
fonte
fonte
Respostas:
[EDITAR em 3 de outubro de 2018]
Atualização para links para o devdocs: 2.0 - https://devdocs.magento.com/guides/v2.0/ui-components/ui-listing-grid.html e https://devdocs.magento.com/guides/v2. 0 / ui-components / ui-second.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
[EDIT 21 de janeiro de 2016]
A partir de 20/01/2016, o magento2 devdocs foi atualizado com a documentação estendida dos componentes da interface do usuário. Eu não o verifiquei extensivamente, mas elas podem conter mais informações do que a resposta que eu dei há alguns dias. Portanto, no interesse do seu tempo, você pode querer ver http://devdocs.magento.com/guides/v2.0/ui -library / ui-library-second.html
[/EDITAR]
Estou trabalhando com o Magento2 há mais de um mês e foi isso que notei sobre a nova maneira de criar grades.
Componente de grade da interface do Magento 2
1) arquivo de layout dentro de
Company/Module/view/adminhtml/layout/module_controller_action.xml
definir grade como uiComponent com:2) uiComponent é definido no
Company/Module/view/adminhtml/ui_component/listing_name.xml
arquivo. O nome do arquivo deve ser igual ao nome do uiComponent usado no arquivo de layout. A estrutura do arquivo pode parecer bastante complexa à primeira vista, mas como sempre, esses são alguns nós repetidos. Para simplificar, vamos cortá-lo. O nó principal do arquivo de componente é<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
. É fixo e acredito que requer o atributo de localização do espaço para nome. A seguir são tipicamente 4 nós dentro<listing />
nó:<argument />
,<dataSource />
,<container />
e<columns />
. Entretanto, essa não é uma configuração rigorosa, pois o<argument />
nó pode ser duplicado para fornecer mais configuração ou<container />
na listagem de páginas do cms que adiciona contêiner "pegajoso" por algum motivo.O primeiro nó é
<argument />
. Este nó define os dados para o componente. Geralmente você precisa fornecer algo como isto:<argument />
nó requer atributoname
. Nesse caso,data
define informações básicas sobre o componente. Ele contém vários<item />
nós para cada parte específica da configuração.js_config
informa ao componente onde é o provedor dos dados e dependências na configuração xml da listagem (que eu acho que é convertida em hash javascript).provider
O valor consiste no nome da listagem usado no arquivo de layout e no nome exclusivo da fonte de dados que será usado posteriormente. Nessas listagens, verifiquei o magentoprovider
edeps
são as mesmas. Não tenho certeza do que adianta ter isso diferente.spinner
leva o nome do nó em que as colunas da grade são definidas.buttons
permite adicionar botões ao topo da grade. Na maioria dos casos, seria apenas oAdd new
botão. Os botões possuem alguns elementos:name
usado como identificação do elemento,label
é o que diz o botão,class
é a classe de botão eurl
é o link para o qual aponta. Asteriks é substituído pela parte do URL atual. Outros possíveis<item />
nós de botão são:id
,title
,type
(reiniciar, enviar ou botão),onclick
(em vez deurl
, ele tem precedência),style
,value
,disabled
. O elemento Button é renderizado porMagento\Ui\Component\Control\Button
classe.Em seguida, temos o
<dataSource />
nó:name
usado no<dataSource />
nó deve corresponder ao usado emargument/js_config/provider
eargument/js_config/deps
. O próximo nó define qual classe é responsável pela preparação dos dados para a grade.class
O argumento requer um nome exclusivo que corresponderádi.xml
.primaryFieldName
refere-se à coluna principal do banco de dados erequestFieldName
à variável nas solicitações http. Eles podem ser iguais, mas não precisam, a listagem de páginas do CMS usapage_id
comoprimaryFieldName
eid
comorequestFieldName
.update_url
refere-se ao ponto de entrada para o qual as chamadas do ajax para filtragem e classificação são enviadas. O segundo argumento em<dataSource />
refere-se ao arquivo javascript que lida com js parte do envio e processamento de chamadas ajax para a grade. O arquivo padrão éMagento/Ui/view/base/web/js/grid/provider.js
.Outro nó é
<container />
.Como ele contém muitos dados, deixe-os dividir também. Seus filhos são as partes da página inteira. Primeiro filho
<argument />
:Ele define o modelo de knockout responsável por manipular o layout e todas as ações e, por padrão, aponta para
Magento/Ui/view/base/web/templates/grid/toolbar.html
O próximo nó é (ou pode ser)
<bookmark />
Este nó adiciona recurso de marcador à grade. Ele permite ao administrador configurar diferentes "perfis" da grade que exibe colunas diferentes. Graças a isso, você pode adicionar todas as colunas da tabela à grade e deixar que o usuário decida quais informações são relevantes para ele.
namespace
deve corresponder ao nome usado no arquivo de layout.Outro nó é
<component />
Temos 3 valores para configurar aqui. Primeiro é o
provider
que segue o padrão [nome_da_listagem_do_layout]. [Nome_da_listagem_do_layout]. [Nome_da_coluna_nome_da_coluna] (como na listagem / argumento / spinner do nó).component
refere-se ao arquivo js que exibe grade e, por padrão, pontos para osMagento/Ui/view/base/web/js/grid/controls/columns.js
quais usa modeloMagento/Ui/view/base/web/templates/grid/controls/columns.html
. O último item é odisplayArea
que define onde os controles da coluna precisam ser exibidos. Refere-se aogetRegion('dataGridActions')
arquivo definido emcontainer/argument/config/template
(padrãoMagento/Ui/view/base/web/templates/grid/toolbar.html
:).O próximo nó é
<filterSearch />
Este nó adiciona uma pesquisa de texto completo à página. Ele está localizado acima da grade como um campo de entrada de texto único, com "Pesquisar por palavra-chave" como espaço reservado. Não tenho certeza de quais opções são possíveis aqui, pois não brinquei muito com isso, mas o list_filters_chips se refere ao
Magento/Ui/view/base/web/js/grid/filters/chips.js
arquivo.O próximo nó é
<filters />
Este nó define a configuração da filtragem de colunas que é visível após clicar no botão "Filtros" na parte superior direita acima da grade.
columnsProvider
segue uma estrutura semelhante aos nós anteriores, portanto, [nome_da_listagem_do_layout]. [nome_da_listagem_do_layout]. [nome_da_coluna_nome_da_coluna].storegeConfig
vai como [nome_da_listagem_do_layout]. [nome_da_listagem_do_layout]. [nome_do_nó_pacote] [nome_do_do_marcador_do_marcador]. Notemplates
nó do item, você pode definir quais arquivos são usados para renderizar opções de filtro específicas. Nesse caso, apenas selecionar é definido e usaMagento/Ui/view/base/web/js/form/element/ui-select.js
comocomponent
eMagento/Ui/view/base/web/templates/grid/filters/elements/ui-select.html
como modelo de nocaute. OlheMagento/Ui/view/base/web/js/form/element
para ver outras possibilidades. Somente select é definido aqui para substituir os valores padrão:Magento/Ui/view/base/web/js/form/element/select.js
eMagento/Ui/view/base/web/templates/grid/filters/elements/select.html
. Os valores padrão para filtros e outros nós são definidos emMagento/Ui/view/base/ui_component/etc/definition.xml
.O próximo nó é
<massAction />
e permite adicionar ação em massa, selecionar à gradename
argumento deve ser único. O primeiro nó filho<argument />
define dados básicos.provider
segue a mesma estrutura que outros nós e refere-se às colunas nome do nó e sua coluna de IDs. Esta coluna conterá caixas de seleção com itens selecionados para a ação em massa a ser processada.component
define qual arquivo é usado para renderizar e manipular a ação em massa. O valor padrão éMagento_Ui/js/grid/massactions
(aponta paraMagento/Ui/view/base/web/js/grid/massactions.js
). Você pode usarMagento_Ui/js/grid/tree-massactions
para adicionar estrutura em árvore. No caso acima, eu o uso para adicionar a ação "Alterar status", que mostra as opções "ativar" e "desativar". Após o<argument />
nó, você pode adicionar quantos<action />
nós quantas ações desejar. Cada<action />
nó segue um esquema semelhante. No primeiro caso (ação de exclusão), o nó requer um nome exclusivo. Em seguida,argument
contém a configuração em quelabel
é o que é visível na opção de seleção,url
ponto final para enviar dados econfirm
adiciona o modal de confirmação antes do envio. No caso de "Alterar status", a açãourl
no primeiroargument
nó é omitida, pois os URLs são fornecidos por status, por classe definida no segundoargument
nó. A classe deve implementar a interface Zend \ Stdlib \ JsonSerializable. VerifiqueMagento\Customer\Ui\Component\MassAction\Group\Options
como referência.Finalmente, no
<container />
nó, temos o<paging />
nó que define a paginação.Estrutura para
provider
eselectProvider
deve ficar clara agora.E o último nó da grade básica é
<columns />
. Ele contém todas as definições de colunas disponíveis para uso pelo administrador. O nó é definido comoe o atributo name é usado em outros nós quando se refere a ele. O primeiro filho é
O que fiz aqui foi fornecer apenas os
provider
valores corretos seguindo o esquema usado na listagem.fieldAction
O nó permite definir a ação que é acionada quando clicada na célula. As configurações padrão chamam a ação de ediçãoProximo é
<selectionColumns />
Este nó define a coluna com caixas de seleção para ação em massa a ser usada. Seus nomes são referidos após o ponto em vários nós descritos acima.
Depois disso, você pode adicionar qualquer número de colunas no mesmo formato:
Nem todos os nós dos itens internos são necessários. Eles estão definindo:
filter
- tipo de filtro da coluna. Isso é usado no bloco de filtros. Os valores disponíveis são: texto, seleção, dateRange. Se a seleção for usada<item name="options">...</item>
, será usada como uma classe que fornece opções para a seleção de filtro.component
- define os arquivos js que são usados para renderizar a coluna. As opções disponíveis são emMagento/Ui/view/base/web/js/grid/columns/*
. selecionar é fornecido, o filtro está definido para selecionar. Para filtro de texto, esse valor não é necessário.dataType
- fornece informações do tipo de dados usado para o valor da coluna. Para select use select também, for dateRange use datebodyTmpl
- define o arquivo html usado pelo knockout para renderizar a célula. Por padrão, interface do usuário / grade / células / texto é usado (Magento/Ui/view/base/web/templates/grid/cells/text.html
). Outras opções estão localizadas noMagento/Ui/view/base/web/templates/grid/cells/*
diretórioui/grid/cells/html
permite usar o conteúdo html na célula.label
- isso será exibido no cabeçalho da coluna e no bloco de filtrosortOrder
- encomendavisible
- exibir ou não a coluna. Isso pode ser usado para definir colunas para marcadores, mas não as mostra por padrão.No final, você pode adicionar uma coluna de ações, que pode ser usada para o item único
indexField
refere-se ao nome da coluna no banco de dados. A classe Actions deve estenderMagento\Ui\Component\Listing\Columns\Column
e definir oprepareDataSource
método. VejaMagento/Cms/Ui/Component/Listing/Column/PageActions.php
como referência3) para finalizar a grade, precisamos definir alguns elementos em Company / Module / etc / di.xml
Primeiro, definimos a classe do provedor que foi usada no nó
dataSource/class
collection
resolve para a classe de coleção padrão efilerPool
define novo elemento:Evidentemente, isso tem a ver com filtragem e pesquisa. Por enquanto, eu sempre usei os valores padrão.
Agora registramos nossa fonte de dados:
Nesse caso, o nome do nó deve corresponder ao usado no
<dataSource />
nó na listagem de xml e resolve não a coleção, mas a classe GridCollection. Ele deve estender a classe de coleção regular e implementar adicionalmenteMagento\Framework\Api\Search\SearchResultInterface
.No final, configuramos nossa coleção de grades (os nomes dos argumentos são bastante óbvios)
fonte
Para a grade, precisamos de dois arquivos principais: um é ui_component xml e o segundo é di.xml
Espero que você saiba no arquivo xml de layout que você precisa adicionar a tag uiComponent, ou seja -
agora você precisa criar uma
test_lists_listing.xml
pasta na ui_component.Por exemplo, app \ code \ Sugarcode \ Test \ view \ adminhtml \ ui_component \ test_lists_listing.xml
Este arquivo tem um número de tags
<argument name="data" xsi:type="array">
: - preciso mencionar arugemnt como botão js etc.<dataSource name="test_lists_listing_data_source">
: - este bloco é usado para fornecer dados para grades neste argumento<argument name="class" xsi:type="string">ListsGridDataProvider</argument>
que é necessário mencionardi.xml
(explicado na parte di.xml )<container name="listing_top">
: - neste bloco, mencionamos filtros, exportação, indicadores (que salvam dados na tabela ui_bookmark), compactação, paginação e texto completo (para fazer pesquisa de texto completo na configuração ou tabela nessa coluna que deve ser índice de texto completo)<columns name="test_lists_columns">
: - nisso precisamos mencionar todas as colunasO último está em di.xml
app \ code \ Sugarcode \ Test \ view \ adminhtml \ ui_component \ test_lists_listing.xml
fonte
O suplemento da resposta principal
A resposta superior é ótima, eu sigo para criar uma página de listagem. Mas, tem um problema :
Solução
No
<dataSource />
nó, abaixo<item name="update_url" xsi:type="url" path="mui/index/render"/>
, adicione o conteúdo:entity_id
é a chave principal da coleção de listagens.fonte
Achei a resposta do @ Zefiryn muito útil e uma ótima maneira de começar sem ler a documentação completa do Magento.
Dito isto, não consegui que as coisas funcionassem bem após essas respostas. Além disso, depois que uma página de listagem estiver funcionando, você desejará imediatamente o restante de uma interface CRUD.
Encontrei um módulo de amostra no github . Começando com este encadeamento para orientação, em seguida, portar / invadir código do plug-in de amostra acabou sendo a maneira mais rápida de obter uma interface CRUD em uma tabela personalizada.
fonte