Existe-t-il une bonne explication et / ou un échantillon de la configuration minimale minimale requise pour créer une grille de composants d'interface utilisateur dans Magento 2?
Je sais qu'il existe une myriade de composants de base, tels que
./vendor/magento/module-catalog/view/adminhtml/ui_component/product_listing.xml
Cependant, ces fichiers XML sont volumineux et il existe peu d'explications sur ce que fait chaque nœud et sur la façon dont vous l'utiliseriez pour créer une grille à partir de rien.
Il y a aussi cet exemple de module , mais il
- Semble être avant un formulaire
- Manque de contexte / explication sur ce que fait chaque nœud
Je suis à la recherche d'informations de "démarrage" qui me permettraient de construire une grille pour ma propre collection de modèles CRUD.
magento2
php
layout
uicomponent
Alan Storm
la source
la source
Réponses:
[EDIT 3 octobre 2018]
Mise à jour des liens vers devdocs: 2.0 - https://devdocs.magento.com/guides/v2.0/ui-components/ui-listing-grid.html et https://devdocs.magento.com/guides/v2. 0 / ui-components / ui-secondary.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 janvier 2016]
Depuis le 20/01/2016, magento2 devdocs a été mis à jour avec une documentation étendue sur les composants de l'interface utilisateur. Je ne l'ai pas vérifié de manière approfondie, mais ils peuvent contenir plus d'informations que la réponse que j'ai donnée il y a quelques jours. Dans l'intérêt de votre temps, vous souhaiterez peut-être consulter http://devdocs.magento.com/guides/v2.0/ui -library / ui-library-secondary.html
[/MODIFIER]
Je travaille avec Magento2 depuis plus d’un mois et c’est ce que j’ai remarqué à propos de la nouvelle façon de créer des grilles.
Composant de grille de l'interface utilisateur Magento 2
1) Le fichier de mise en page à l'intérieur
Company/Module/view/adminhtml/layout/module_controller_action.xml
définit la grille comme étant uiComponent avec:2) uiComponent est défini dans le
Company/Module/view/adminhtml/ui_component/listing_name.xml
fichier. Le nom du fichier doit être identique au nom uiComponent utilisé dans le fichier de mise en page. La structure du fichier peut sembler assez complexe à première vue mais, comme toujours, il s’agit de nœuds répétitifs. Pour faire simple, on le tranche. Le noeud principal du fichier de composant est<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
. Il est corrigé et je pense qu'il nécessite un attribut d'emplacement d'espace de nom. Il y a typiquement 4 nœuds à l' intérieur de<listing />
noeud:<argument />
,<dataSource />
,<container />
et<columns />
. Il ne s’agit toutefois pas d’une configuration stricte, car le<argument />
nœud peut être dupliqué pour fournir davantage de configuration ou<container />
comme dans la liste de pages cms qui ajoute un conteneur "collant" pour une raison quelconque.Le premier noeud est
<argument />
. Ce nœud définit les données pour le composant. Habituellement, vous devez fournir quelque chose comme ceci:<argument />
noeud requiert un attributname
. Dans ce cas,data
définit les informations de base sur le composant. Il contient plusieurs<item />
nœuds pour chaque partie spécifique de la configuration.js_config
indique au composant où se trouvent le fournisseur des données et des dépendances dans la configuration de liste XML (qui, à mon avis, est convertie en hachage javascript).provider
valeur consiste en un nom de liste utilisé dans le fichier de présentation et un nom de source de données unique qui sera utilisé ultérieurement. Dans ces listes, j'ai vérifié dans magentoprovider
etdeps
sont les mêmes. Je ne suis pas sûr de savoir à quoi sert d'avoir cela.spinner
prend le nom du nœud où les colonnes de la grille sont définies.buttons
permet d'ajouter des boutons en haut de la grille. Dans la plupart des cas, ce serait juste unAdd new
bouton. Les boutons ont peu d'éléments:name
Celabel
que le bouton dit, utilisé comme id d'élément ,class
est la classe de boutons eturl
le lien vers lequel il pointe. Asteriks est remplacé par la partie de l'URL actuelle. D' autres possibles<item />
noeuds pour bouton sont:id
,title
,type
(remise à zéro, soumettre ou bouton),onclick
( au lieu deurl
, il a priorité),style
,value
,disabled
. L'élément Button est rendu par laMagento\Ui\Component\Control\Button
classe.Ensuite nous avons le
<dataSource />
noeud:name
utilisé dans le<dataSource />
noeud doit correspondre à celui utilisé dansargument/js_config/provider
etargument/js_config/deps
. Le noeud suivant définit quelle classe est responsable de la préparation des données pour la grille.class
l'argument nécessite un nom unique qui sera mis en correspondance dansdi.xml
.primaryFieldName
concerne la colonne primaire de la base de données etrequestFieldName
la variable dans les requêtes http. Ils peuvent être égaux , mais ne doivent pas, l' inscription de la page CMS utilisepage_id
commeprimaryFieldName
etid
querequestFieldName
.update_url
fait référence au point d'entrée où les appels ajax pour le filtrage et le tri sont envoyés. Le deuxième argument de<dataSource />
référence fait référence au fichier javascript qui gère la partie js de l’envoi et du traitement des appels ajax pour la grille. Le fichier par défaut estMagento/Ui/view/base/web/js/grid/provider.js
.Un autre noeud est
<container />
.Comme il contient beaucoup de données, permettez-moi de le diviser également. Ses enfants sont les parties de la page entière. Premier enfant
<argument />
:Il définit le modèle de masquage responsable de la mise en page, de toutes les actions et, par défaut, pointe vers
Magento/Ui/view/base/web/templates/grid/toolbar.html
Le noeud suivant est (ou peut être)
<bookmark />
Ce nœud ajoute une fonctionnalité de signet à la grille. Il permet à l’administrateur de configurer différents "profils" de la grille qui affiche différentes colonnes. Grâce à cela, vous pouvez ajouter toutes les colonnes de la table à la grille et laisser l’utilisateur choisir les informations qui le concernent.
namespace
doit correspondre au nom utilisé dans le fichier de mise en page.Un autre noeud est
<component />
Nous avons 3 valeurs à configurer ici. La première est celle
provider
qui suit le modèle [nom_répertoire_from_layout]. [Nom_liste_from_layout]. [Nom_noeud_nomne_colonnes] (comme dans la liste de noeuds / argument / spinner).component
fait référence au fichier js qui affiche la grille et, par défaut, les points surMagento/Ui/view/base/web/js/grid/controls/columns.js
lesquels utilise le modèleMagento/Ui/view/base/web/templates/grid/controls/columns.html
. Le dernier élément est celuidisplayArea
qui définit où les contrôles de colonne doivent être affichés. Il fait référence àgetRegion('dataGridActions')
dans le fichier défini danscontainer/argument/config/template
(par défaut:)Magento/Ui/view/base/web/templates/grid/toolbar.html
.Le noeud suivant est
<filterSearch />
Ce nœud ajoute une recherche en texte intégral dans la page. Il se trouve au-dessus de la grille sous la forme d'un champ de saisie de texte avec "Recherche par mot-clé" comme espace réservé. Je ne suis pas sûr des options possibles ici, car je n’ai pas trop joué avec cela, mais listing_filters_chips fait référence à
Magento/Ui/view/base/web/js/grid/filters/chips.js
file.Le noeud suivant est
<filters />
Ce nœud définit la configuration du filtrage des colonnes qui est visible après avoir cliqué sur le bouton "Filtres" en haut à droite au-dessus de la grille.
columnsProvider
suit une structure similaire à celle des nœuds précédents, donc [listing_nom_from_layout]. [nom_langage_from_layout]. [nom_colonne_numeur].storegeConfig
va comme [nom_liste_from_layout]. [nom_liste_frame_layout]. [nom_noeud_conteneur] [nom_noeud_de_signet]. Dans letemplates
nœud de l'élément, vous pouvez définir les fichiers utilisés pour rendre des options de filtre spécifiques. Dans ce cas , ne sélectionnez est défini et utiliseMagento/Ui/view/base/web/js/form/element/ui-select.js
commecomponent
etMagento/Ui/view/base/web/templates/grid/filters/elements/ui-select.html
comme modèle de knock - out. Regardez dansMagento/Ui/view/base/web/js/form/element
pour voir d'autres possibilités. Seule la sélection est définie ici pour remplacer les valeurs par défaut:Magento/Ui/view/base/web/js/form/element/select.js
etMagento/Ui/view/base/web/templates/grid/filters/elements/select.html
. Les valeurs par défaut des filtres et des autres nœuds sont définies dansMagento/Ui/view/base/ui_component/etc/definition.xml
.Le noeud suivant est
<massAction />
et permet d’ajouter une action en masse select to the gridname
l'argument devrait être unique. Le premier noeud enfant<argument />
définit les données de base.provider
suit la même structure que les autres nœuds et fait référence aux colonnes nom de nœud et à sa colonne ids. Cette colonne contiendra les cases à cocher avec les éléments sélectionnés pour l'action en masse à traiter.component
définit quel fichier est utilisé pour rendre et gérer l'action de masse. La valeur par défaut estMagento_Ui/js/grid/massactions
(pointe surMagento/Ui/view/base/web/js/grid/massactions.js
). Vous pouvez utiliserMagento_Ui/js/grid/tree-massactions
pour ajouter une structure semblable à un arbre. Dans le cas ci-dessus, je l'utilise pour ajouter l'action "Change status" qui indique les options "enable" et "disable". Après<argument />
nœud, vous pouvez ajouter autant de<action />
nœuds que d’actions à effectuer. Chaque<action />
nœud suit un schéma similaire. Dans le premier cas (action de suppression), le noeud requiert un nom unique. Puisargument
contient la configuration oùlabel
est ce qui est visible dans l'option de sélection, leurl
point de terminaison pour envoyer des données etconfirm
ajoute une confirmation modale avant l'envoi. Dans le cas du "changement d'état", l'actionurl
sur le premierargument
nœud est omise car les URL sont fournies par état par classe définie dans le deuxièmeargument
nœud. La classe doit implémenter l'interface Zend \ Stdlib \ JsonSerializable. VérifiezMagento\Customer\Ui\Component\MassAction\Group\Options
comme une référence.Enfin, dans le
<container />
nœud, nous avons un<paging />
nœud qui définit la pagination.Structure pour
provider
etselectProvider
devrait être clair maintenant.Et le dernier noeud pour la grille de base est
<columns />
. Il contient toutes les définitions de colonnes pouvant être utilisées par l'administrateur. Le nœud est défini commeet l'attribut name est utilisé dans les autres nœuds lorsqu'il s'y réfère. Le premier enfant est
Ce que j'ai fait ici n'était que de fournir des
provider
valeurs correctes en suivant le schéma utilisé dans la liste.fieldAction
noeud permet de définir une action déclenchée lorsque vous cliquez sur la cellule. Les paramètres par défaut appellent l'action de modificationSuivant est
<selectionColumns />
Ce nœud définit la colonne avec les cases à cocher pour les actions en masse à utiliser. Ses noms sont mentionnés après le point dans plusieurs nœuds décrits ci-dessus.
Après cela, vous pouvez ajouter un nombre quelconque de colonnes dans le même format:
Tous les nœuds de la plupart des éléments internes ne sont pas nécessaires. Ils définissent:
filter
- type de filtre de la colonne. Ceci est utilisé dans le bloc de filtres. Les valeurs disponibles sont: text, select, dateRange. Si select est utilisé<item name="options">...</item>
sera utilisé en tant que classe fournissant des options pour le filtre selectcomponent
- définit les fichiers js utilisés pour rendre la colonne. Les options disponibles sont dansMagento/Ui/view/base/web/js/grid/columns/*
. select est fourni si le filtre est configuré pour select. Pour le filtre de texte, cette valeur n'est pas requise.dataType
- fournit des informations sur le type de données utilisé pour la valeur de la colonne. Pour select use, select aussi, pour dateRange, utilisation datebodyTmpl
- définit le fichier HTML utilisé par Knockout pour le rendu de la cellule. Par défaut, ui / grid / cells / text est utilisé (Magento/Ui/view/base/web/templates/grid/cells/text.html
). Les autres options sont situées dans leMagento/Ui/view/base/web/templates/grid/cells/*
répertoire.ui/grid/cells/html
permet d'utiliser le contenu HTML dans la cellule.label
- ceci sera affiché dans l'en-tête de colonne et le bloc de filtragesortOrder
- commandevisible
- afficher ou non la colonne. Cela peut être utilisé pour définir des colonnes pour les signets mais ne les affiche pas par défaut.A la fin, vous pouvez ajouter des actions à la colonne actions à effectuer pour un seul élément.
indexField
fait référence au nom de la colonne dans la base de données. La classe Actions devrait s'étendreMagento\Ui\Component\Listing\Columns\Column
et définir uneprepareDataSource
méthode. VoirMagento/Cms/Ui/Component/Listing/Column/PageActions.php
comme référence3) pour terminer la grille, nous devons définir certains éléments dans Company / Module / etc / di.xml
Nous définissons d’abord la classe de fournisseur utilisée dans le noeud
dataSource/class
collection
résout en classe de collection standard etfilerPool
définit un nouvel élément:Cela doit évidemment faire quelque chose avec le filtrage et la recherche. Pour l'instant j'ai toujours utilisé les valeurs par défaut.
Maintenant, nous enregistrons notre source de données:
Dans ce cas, le nom du nœud doit correspondre à celui utilisé dans le
<dataSource />
nœud de la liste xml et il ne résout pas la collecte mais la classe GridCollection. Il devrait étendre la classe de collection régulière et l'implémenter en plusMagento\Framework\Api\Search\SearchResultInterface
.A la fin, nous configurons notre collection de grille (les noms d'arguments sont plutôt évidents)
la source
Pour la grille, nous avons besoin de deux fichiers principaux, l'un est ui_component xml et le second est di.xml
J'espère que vous savez dans le fichier XML de mise en page que vous devez ajouter la balise uiComponent, c'est-à-dire -
Maintenant, vous devez créer un
test_lists_listing.xml
dossier dans ui_component.Par exemple, app \ code \ Sugarcode \ Test \ view \ adminhtml \ ui_component \ test_lists_listing.xml
Ce fichier a un nombre de balises
<argument name="data" xsi:type="array">
: - faut mentionner arugemnt comme le bouton js etc ..<dataSource name="test_lists_listing_data_source">
: - ce bloc est utilisé pour fournir des données pour des grilles dans celle-ci d'arguments<argument name="class" xsi:type="string">ListsGridDataProvider</argument>
que nous devons mentionner dansdi.xml
(expliqué dans la partie di.xml )<container name="listing_top">
: - dans ce bloc, nous mentionnons les filtres, l'exportation, les signets (qui sauvegardent les données dans la table ui_bookmark), massaction, la pagination et le texte intégral (pour effectuer une recherche de texte intégral dans la configuration ou dans la table, cette colonne doit être un index de texte intégral)<columns name="test_lists_columns">
: - en cela il faut mentionner toute la colonneLe dernier est en di.xml
app \ code \ Sugarcode \ Test \ view \ adminhtml \ ui_component \ test_lists_listing.xml
la source
Le supplément de la meilleure réponse
La réponse est excellente, je la suis pour créer une page de liste. Mais, il y a un problème :
Solution
Dans le
<dataSource />
nœud, ci<item name="update_url" xsi:type="url" path="mui/index/render"/>
- dessous , ajoutez le contenu:entity_id
est la clé primaire pour la collection de listage.la source
J'ai trouvé la réponse de @ Zefiryn très utile et un excellent moyen de commencer sans lire la documentation complète de Magento.
Cela dit, je n’ai pas bien fonctionné après ces réponses. De plus, une fois qu'une page de liste fonctionne, vous souhaitez immédiatement disposer du reste de l'interface CRUD.
J'ai trouvé un exemple de module sur github . Commencer par ce fil d’orientation, puis porter / hacker le code du plug-in exemple s’est avéré le moyen le plus rapide d’obtenir une interface CRUD par rapport à une table personnalisée.
la source