В чем разница между веб-сайтом/шаблоном и веб-сайтом/шаблонами
Я заметил, что в ядре используются как web/template
, так и web/templates
:
vendor/magento/module-ui/view/frontend/web/templates/group/group.html
vendor/magento/module-ui/view/frontend/web/template/messages.html
Это ошибка или есть причина, по которой существуют два разных каталога?
2 answers
Единственное число template
- это стандартный каталог.
Несмотря на количество файлов в каталоге Magento_Ui templates
, этот случай представляется уникальным экземпляром, и мне не ясно, почему это было сделано таким образом. Модуль Magento_Ui, по-видимому, является единственным модулем, который использует web/templates
вместо web/template
. Существует запись requirejs-config
, которая сопоставляет template
с templates
примерно так:
'ui/template': 'Magento_Ui/templates'
(источник: module-ui/view/base/requirejs-config.js
).
Файл (module-ui/view/base/web/js/lib/knockout/template/loader.js
), который обрабатывает асинхронные запросы для шаблонов, содержит formatPath
метод, который возвращает:
return result.replace(/^([^\/]+)/g, '$1/template')
Следовательно, если вы используете template
в качестве каталога, вы можете быть менее явными при загрузке HTML-шаблонов или должны сопоставить его.
Для конкретного примера базового модуля, использующего каталог template
, обратитесь к модулю Magento_Checkout
, который содержит большое количество шаблонов .html
в каталоге web/template
.
Карта была частью одного из первых коммитов: https://github.com/magento/magento2/blame/0865a13d4785221cec11f343ddc3452a77014951/app/code/Magento/Ui/view/base/requirejs-config.js. Меня бы не удивило, если бы template
был стандартизирован, а Magento_Ui никогда не обновлялся.
Это не ошибка, они намеренно разместили обе папки, по умолчанию, как мы видели для других модулей, используется "шаблон", однако они сопоставили папку "шаблоны" в vendor/magento/module-ui/view/base/requirejs-config.js
следующим образом:
paths: {
'ui/template': 'Magento_Ui/templates'
}
И они использовали этот отображенный путь следующим образом:
'text!ui/template/tooltip/tooltip.html'
В vendor/magento/module-ui/view/base/web/js/lib/knockout/bindings/tooltip.js
в строке 11 в определенном разделе.
Другой способ доступа к файлам шаблонов из папки "шаблоны" можно увидеть в vendor/magento/module-ui/view/base/web/js/grid/columns/thumbnail.js
в строке 13 как 'text!Magento_ui/templates/grid/cells/thumbnail/preview.html'
Также, пожалуйста, обратите внимание, что шаблон файлы из этой папки фактически используются для отображения html, поэтому их можно использовать, например, для отображения отображаемого html во всплывающей модели. Визуализация достигается путем передачи шаблона и его переменных в качестве аргументов классу mage/template
.