Есть ли хорошее объяснение и / или пример минимальной конфигурации, необходимой для создания UI Component Grid в Magento 2?
Я знаю, что есть множество основных компонентов, таких как
./vendor/magento/module-catalog/view/adminhtml/ui_component/product_listing.xml
Тем не менее, эти XML-файлы являются обширными, и есть мало объяснений о том, что делает каждый узел, и как вы будете использовать это для создания сетки с нуля.
Там также этот пример модуля , но это
- Кажется, что перед формой
- Отсутствует какой-либо контекст / объяснение того, что делает каждый узел
Я ищу информацию о начале работы, которая позволила бы мне построить сетку для моей собственной коллекции моделей CRUD.
magento2
php
layout
uicomponent
Алан Сторм
источник
источник
Ответы:
[РЕДАКТИРОВАТЬ 3 октября 2018 г.]
Обновление ссылок на devdocs: 2.0 - https://devdocs.magento.com/guides/v2.0/ui-components/ui-listing-grid.html и https://devdocs.magento.com/guides/v2. 0 / 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
[ПРАВКА 21 января 2016 г.]
По состоянию на 20.01.2016 в magento2 devdocs добавлена расширенная документация по компонентам пользовательского интерфейса. Я не проверял это подробно, но они могут содержать больше информации, чем ответ, который я дал несколько дней назад, поэтому в интересах вашего времени вы можете захотеть увидеть http://devdocs.magento.com/guides/v2.0/ui -library / щ-библиотека-secondary.html
[/РЕДАКТИРОВАТЬ]
Я работаю с Magento2 уже более месяца, и это то, что я заметил, о новом способе создания сеток.
Компонент сетки пользовательского интерфейса Magento 2
1) файл макета внутри
Company/Module/view/adminhtml/layout/module_controller_action.xml
определить сетку как uiComponent с:2) uiComponent определяется в
Company/Module/view/adminhtml/ui_component/listing_name.xml
файле. Имя файла должно совпадать с именем uiComponent, используемым в файле макета. Структура файла может показаться довольно сложной на первый взгляд, но, как всегда, это несколько повторяющихся узлов. Чтобы сделать это простым, давайте нарежем его. Основным узлом файла компонента является<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
. Это исправлено, и я считаю, что это требует атрибута пространства имен. Далее , как правило , существует 4 узла внутри<listing />
узла:<argument />
,<dataSource />
,<container />
и<columns />
. Это, однако, не является строгой настройкой, поскольку<argument />
узел может быть продублирован для обеспечения большей конфигурации или<container />
как в листинге cms-страницы, который по какой-то причине добавляет «липкий» контейнер.Первый узел есть
<argument />
. Этот узел определяет данные для компонента. Обычно вам нужно предоставить что-то вроде этого:<argument />
узел требует атрибутаname
. В этом случаеdata
определяются основные сведения о компоненте. Он содержит несколько<item />
узлов для каждой конкретной части конфигурации.js_config
говорит компоненту, где находятся поставщик данных и зависимостей в конфигурации XML-списка (который, я думаю, преобразуется в хэш javascript).provider
значение состоит из имени списка, используемого в файле макета, и уникального имени источника данных, которое будет использоваться позже. В тех списках я проверил в magentoprovider
иdeps
одинаковы. Я не уверен, какой смысл иметь это по-другому.spinner
принимает имя узла, в котором определены столбцы сетки.buttons
позволяет добавлять кнопки в верхнюю часть сетки. В большинстве случаев это будет простоAdd new
кнопка. Кнопки имеют несколько элементов:name
используется как идентификатор элемента,label
то, что говорит кнопка,class
это класс кнопки иurl
ссылка, на которую она указывает. Астерикс заменяется на часть текущего URL. Другие возможные<item />
узлы для кнопки являются:id
,title
,type
(сброс, передают или кнопку),onclick
(вместоurl
, оно имеет преимущество),style
,value
,disabled
. Элемент кнопки отображаетсяMagento\Ui\Component\Control\Button
классом.Далее у нас есть
<dataSource />
узел:name
используемый в<dataSource />
узле должен совпадать с тем, который используется вargument/js_config/provider
иargument/js_config/deps
. Следующий узел определяет, какой класс отвечает за подготовку данных для сетки.class
Аргумент требует уникальное имя, которое будет соответствоватьdi.xml
.primaryFieldName
относится к первичному столбцу базы данных иrequestFieldName
к переменной в запросах http. Они могут быть равны, но не обязательно, листинг CMS используетpage_id
какprimaryFieldName
иid
какrequestFieldName
.update_url
относится к точке входа, куда отправляются вызовы ajax для фильтрации и сортировки. Второй аргумент в<dataSource />
относится к файлу javascript, который обрабатывает js часть отправки и обработки вызовов ajax для сетки. Файл по умолчаниюMagento/Ui/view/base/web/js/grid/provider.js
.Еще один узел есть
<container />
.Поскольку он содержит много данных, позвольте мне также разделить его. Его дети являются частями всей страницы. Первый ребенок
<argument />
:Он определяет шаблон вывода, отвечающий за обработку макета и всех действий, и по умолчанию указывает на
Magento/Ui/view/base/web/templates/grid/toolbar.html
Следующий узел есть (или может быть)
<bookmark />
Этот узел добавляет функцию закладки в сетку. Это позволяет администратору устанавливать различные «профили» сетки, которая отображает различные столбцы. Благодаря этому вы можете добавить все столбцы таблицы в таблицу и позволить пользователю решать, какая информация ему важна.
namespace
должен соответствовать имя, используемое в файле макета.Другой узел
<component />
У нас есть 3 значения для настройки здесь. Первый,
provider
который следует шаблону [list_name_from_layout]. [List_name_from_layout]. [Перечисление_columns_node_name] (как в листинге узла / аргумент / спиннер).component
ссылается на файл js, который отображает сетку и по умолчанию указывает наMagento/Ui/view/base/web/js/grid/controls/columns.js
который используется шаблонMagento/Ui/view/base/web/templates/grid/controls/columns.html
. Последний элементdisplayArea
определяет, где должны отображаться элементы управления столбцами. Это относится кgetRegion('dataGridActions')
файлу, определенному вcontainer/argument/config/template
(по умолчанию:)Magento/Ui/view/base/web/templates/grid/toolbar.html
.Следующий узел
<filterSearch />
Этот узел добавляет полнотекстовый поиск на страницу. Он расположен над сеткой в виде единого текстового поля ввода с заполнением «Поиск по ключевому слову». Я не уверен, какие варианты возможны здесь, поскольку я не играл с этим много, но перечисление_filters_chips обращается к
Magento/Ui/view/base/web/js/grid/filters/chips.js
файлу.Следующий узел
<filters />
Этот узел определяет конфигурацию для фильтрации столбцов, которая отображается после нажатия кнопки «Фильтры» в правом верхнем углу над сеткой.
columnsProvider
следует структуре, аналогичной предыдущим узлам, поэтому [list_name_from_layout]. [list_name_from_layout]. [перечисление_columns_node_name].storegeConfig
выглядит как [имя_файла_ перечисления]. [имя_файла_ перечисления]. [имя_контейнера_символа] [имя_узла_маркинга]. Вtemplates
узле элемента вы можете определить, какие файлы используются для визуализации определенных параметров фильтра. В этом случае определяется только select, и он используетMagento/Ui/view/base/web/js/form/element/ui-select.js
какcomponent
иMagento/Ui/view/base/web/templates/grid/filters/elements/ui-select.html
как шаблон выбивки. Посмотрите,Magento/Ui/view/base/web/js/form/element
чтобы увидеть другие возможности. Здесь определен только выбор для переопределения значений по умолчанию:Magento/Ui/view/base/web/js/form/element/select.js
иMagento/Ui/view/base/web/templates/grid/filters/elements/select.html
. Значения по умолчанию для фильтров и других узлов определены вMagento/Ui/view/base/ui_component/etc/definition.xml
.Следующий узел есть
<massAction />
и позволяет добавить массовое действие в сетку.name
Аргумент должен быть уникальным. Первый дочерний узел<argument />
определяет основные данные.provider
следует той же структуре, что и другие узлы, и ссылается на имя узла столбцов и его столбец идентификаторов. Этот столбец будет содержать флажки с выбранными элементами для массового действия для обработки.component
определяет, какой файл используется для визуализации и обработки массового действия. Значение по умолчаниюMagento_Ui/js/grid/massactions
(указывает наMagento/Ui/view/base/web/js/grid/massactions.js
). Вы можете использовать,Magento_Ui/js/grid/tree-massactions
чтобы добавить древовидную структуру. В приведенном выше случае я использую его, чтобы добавить действие «Изменить статус», которое показывает опции «включить» и «отключить». После<argument />
узла вы можете добавить столько<action />
узлов, сколько действий вы хотите иметь. Каждый<action />
узел следует аналогичной схеме. В первом случае (удаление действия) узел требует уникального имени. Затемargument
содержит конфигурацию, гдеlabel
это то, что видно в опции выбора,url
конечной точке для отправки данных иconfirm
добавляет модальное подтверждение перед отправкой. В случае «Изменить статус» действиеurl
в первомargument
узле не указывается, поскольку URL-адреса предоставляются для каждого статуса классом, определенным во второмargument
узле. Класс должен реализовывать интерфейс Zend \ Stdlib \ JsonSerializable. ПроверьтеMagento\Customer\Ui\Component\MassAction\Group\Options
как ссылку.Наконец, в
<container />
узле у нас есть<paging />
узел, который определяет нумерацию страниц.Структура
provider
иselectProvider
должна быть понятна сейчас.И последний узел для базовой сетки
<columns />
. Он содержит все определения столбцов, которые доступны для использования администратором. Узел определяется каки атрибут name используется в других узлах, когда ссылается на него. Первый ребенок
То, что я сделал здесь, было только предоставить правильные
provider
значения по схеме, использованной в листинге.fieldAction
узел позволяет определить действие, которое запускается при нажатии на ячейку. Стандартные настройки вызова, действие редактированияДалее это
<selectionColumns />
Этот узел определяет столбец с флажками для массового действия для использования. Это имена упоминаются после точки в нескольких узлах, описанных выше.
После этого вы можете добавить любое количество столбцов в одном формате:
Не все узлы самых внутренних предметов необходимы. Они определяют:
filter
- тип фильтра столбца. Используется в блоке фильтров. Доступны следующие значения: text, select, dateRange. Если используется select,<item name="options">...</item>
будет использоваться как класс, который предоставляет опции для фильтра selectcomponent
- определяет файлы js, которые используются для визуализации столбца. Доступные варианты вMagento/Ui/view/base/web/js/grid/columns/*
. Выбор предоставляется, если фильтр установлен для выбора. Для текстового фильтра это значение не требуется.dataType
- предоставляет информацию о типе данных, используемом для значения столбца. Для select use select также, для dateRange use datebodyTmpl
- определяет html-файл, используемый knockout для визуализации ячейки. По умолчанию используется пользовательский интерфейс / сетка / ячейки / текст (Magento/Ui/view/base/web/templates/grid/cells/text.html
). Другие варианты находятся вMagento/Ui/view/base/web/templates/grid/cells/*
каталоге.ui/grid/cells/html
позволяет использовать HTML-контент в ячейке.label
- это будет отображаться в заголовке столбца и блоке фильтраsortOrder
- заказvisible
- отображать или нет столбец. Это можно использовать для определения столбцов для закладок, но не показывать их по умолчанию.В конце вы можете добавить столбец действий с действиями, доступными для одного элемента.
indexField
ссылается на имя столбца в базе данных. Класс действий должен расширятьсяMagento\Ui\Component\Listing\Columns\Column
и определятьprepareDataSource
метод. СмотритеMagento/Cms/Ui/Component/Listing/Column/PageActions.php
как ссылку3) чтобы закончить сетку, нам нужно определить некоторые элементы в Company / Module / etc / di.xml
Сначала мы определяем класс провайдера, который использовался в узле
dataSource/class
collection
разрешает к стандартному классу коллекции иfilerPool
определяет новый элемент:Это, очевидно, связано с фильтрацией и поиском. На данный момент я всегда использовал значения по умолчанию.
Теперь мы регистрируем наш источник данных:
В этом случае имя узла должно совпадать с тем, которое используется в
<dataSource />
узле в листинге xml, и оно разрешается не для коллекции, а для класса GridCollection. Следует расширить класс регулярной коллекции и дополнительно реализоватьMagento\Framework\Api\Search\SearchResultInterface
.В конце мы настраиваем нашу сетку (имена аргументов довольно очевидны)
источник
Для сетки нам нужны два основных файла: один - ui_component xml, а второй - di.xml.
Я надеюсь, что вы знаете, в макете XML-файла, вам нужно добавить тег uiComponent, т.е.
Теперь вам нужно создать
test_lists_listing.xml
в папке ui_component.Например, приложение \ code \ Sugarcode \ Test \ view \ adminhtml \ ui_component \ test_lists_listing.xml
Этот файл имеет количество тегов
<argument name="data" xsi:type="array">
: - нужно упомянуть arugemnt, как кнопка JS и т.д ..<dataSource name="test_lists_listing_data_source">
: - этот блок используется для предоставления данных для сеток в этом одном из аргументов, о<argument name="class" xsi:type="string">ListsGridDataProvider</argument>
котором мы должны упомянутьdi.xml
(объяснено в части di.xml )<container name="listing_top">
: - в этом блоке мы упоминаем фильтры, экспорт, закладки (которые сохраняют данные в таблице ui_bookmark), массовые операции, разбиение на страницы и полнотекст (для полнотекстового поиска в настройках или в таблице этот столбец должен быть полнотекстовым индексом)<columns name="test_lists_columns">
: - в этом нам нужно упомянуть все колонкиПоследний находится в di.xml
Приложение \ код \ Sugarcode \ Test \ вид \ adminhtml \ ui_component \ test_lists_listing.xml
источник
Дополнение Топ Ответа
Верхний ответ отличный, я следую за ним, чтобы создать страницу со списком. Но есть проблема :
Решение
В
<dataSource />
узле ниже<item name="update_url" xsi:type="url" path="mui/index/render"/>
добавьте содержимое:entity_id
является первичным ключом для коллекции списков.источник
Я нашел ответ @ Zefiryn очень полезным и отличным способом начать работу, не читая полную документацию от Magento.
Это сказало, что я не получал вещи, вполне работающие после этих ответов. Более того, если у вас есть работающая страница со списком, вам сразу же понадобится остальная часть интерфейса CRUD.
Я нашел образец модуля на GitHub . Начиная с этой темы для ориентации, затем перенос / взлом кода из примера плагина оказался самым быстрым способом получить интерфейс CRUD для пользовательской таблицы.
источник