Я пытаюсь изменить порядок вкладок на странице продукта в Magento 2. По умолчанию Details|More Information|Reviews
.
Я старался:
Производитель / тема / Magento_Catalog / макет / catalog_product_view.xml
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<move element="product.info.description" destination="product.info.details" after="-" />
</body>
</page>
Но это не работает, и это рекомендуемый способ перемещения элементов. Мне удалось переместить вкладки из области вкладок в другие области, а также добавить новые вкладки, но я не могу контролировать порядок вкладок.
Я думаю, что это как-то связано group="detailed_info"
; Похоже, что Magento захватывает элементы макета с этим атрибутом в XML и перебирает его для создания вкладок.
Есть ли способ изменить порядок вкладок без переписывания модуля?
Ответы:
Мой подход немного отличается, но, вероятно, более перспективен на будущее, в случае добавления новых вкладок позже и изменения приоритета / порядка этих вкладок.
Я передал аргумент для каждой вкладки через XML-файл в моем XML-файле тем
Итак, мой XML-файл тем выглядит примерно так:
Более того, мы должны настроить его
details.phtml
, поэтому скопируйте его изв
Пожалуйста, имейте в виду, что собственный magento
details.phtml
может быть изменен в будущих версиях или исправлениях Magento. Эти изменения должны также применяться к вашей темеdetails.phtml
Теперь нам нужно получить приоритет, который мы передали через файл XML.
Итак, вы видите: вы просто должны добавить несколько строк и всегда можете изменить приоритет / порядок вкладок через файл XML, вам больше не нужно менять их
details.phtml
в будущем.источник
Для Изменить положение вкладки на странице сведений, Использование XML-файла конфигурации после или перед атрибутом не поможет в этом случае.
Вы должны изменить из файла шаблона.
Скопируйте файл details.phtml из ядра в вашу тему,
Внутри этого файла вы можете выбрать все имена вкладок, используя print_r ($ detailInfoGroup), вы должны получить значение, например,
Вы должны установить в соответствии с вашими требованиями в новом массиве перед foreach в файле,
добавить
<?php foreach ($newOrderTab as $name):?>
,Полный код в details.phtml, как показано ниже,
источник
В Magento 2.3.1 или выше мы можем использовать
sort_order
аргумент в "app/design/frontend/Packagename/themename/Magento_Catalog/layout/catalog_product_view.xml
" xml configТакже не забудьте обновить метод "
getGroupChildNames
" с "getGroupSortedChildNames
" в файле шаблона ( если вы переопределяете его ) "app/design/frontend/Packagename/themename/Magento_Catalog/templates/product/view/details.phtml
".Старый метод
Обновленный метод
Если вы переопределяете
Magento\Catalog\Block\Product\View\Details.php
класс блоков, то у вашего класса блоков также должен быть обновленный метод "getGroupSortedChildNames
".источник
Другой способ с использованием аргумента порядка сортировки.
Путь к файлу -
app\design\frontend\<companyNAme>\<ThemeName>\Magento_Catalog\layout\catalog_product_view.xml
Добавьте аргумент порядка сортировки в контейнер ссылочного блока product.info.details.
Пример кода
Измените значение аргумента порядка сортировки на 10, 20, 30 согласно вашему заказу.
источник
sort_order
для меня был важен идеальный ответ с примером , +1 сделал мой день :)Я знаю, что были и другие ответы на этот вопрос, но все они были слишком агрессивными на мой вкус. Рассматривая проблему, Magento добавляет отдельный атрибут «group» к элементу и добавляет дочерние элементы к этому атрибуту в порядке, загруженном в макет, полностью отдельно от массива дочерних элементов, который содержит отсортированный массив элементов. Чтобы это исправить, я написал простой плагин вокруг, который исправляет сортировку при получении дочерних групп:
Это теперь позволит вам упорядочить вкладки, используя стандартные
before
иafter
атрибуты в XML макета, как вы ожидаете, и, вероятно, не нужно будет изменять в будущих патчах Magento.источник
Я думаю, вам нужно просто добавить их в порядке вашего выбора. Для меня я использую 4 вкладки в следующем порядке:
В своем пользовательском модуле я создал этот файл макета: catalog_product_view.xml со следующим содержимым:
Вы можете видеть, что я добавил только 3 вкладки, потому что вкладка сведений уже существует. В результате я получил вкладки в следующем порядке:
Это не то, что я хотел, теперь мое решение состоит в том, чтобы снова добавить также вкладку Details, чтобы мой файл макета выглядел так:
Теперь у меня есть заказ, который я хочу :)
источник
Самый простой и лучший способ, на мой взгляд, это решение LordZardeck с плагином. После обновления вендор / модуль / etc / frontend / di.xml
все работало как хотелось.
Спасибо @LordZardeck за чистый код!
источник
Вот решение, которое я использовал. Это поменяет местами описание и вкладку атрибутов, если они оба доступны. Это использует тему Ultimo. Но вы получите суть. ПОЦЕЛУЙ.
источник
Мое решение проблемы состоит в том, чтобы изменить шаблон details.phtml, чтобы он получал дочерние блоки из макета.
$blocks = $layout->getChildBlocks($block->getNameInLayout());
Делая это таким образом, он уважает порядок, заданный модификаторами after и before .
Я все еще использую массив, предоставленный getGroupChildNames , чтобы проверить, принадлежит ли блок группе.
if(in_array($child_block->getNameInLayout(),$detailedInfoGroup))
источник
Я не хотел работать над темой, я хотел изменить поведение метода getGroupChildNames. Этот подход должен работать, даже если шаблон будет изменен.
Я добавил это в catalog_product_view.xml:
Затем создайте блок, чтобы изменить поведение getGroupChildNames:
Это все.
источник
У LordZardeck лучший ответ, но это, в основном, ошибка и должна быть исправлена в ядре.
Простейшее решение проблемы, которую я нашел, заключается в следующем: переопределить шаблон Magento_Catalog :: product / view / details.phtml и после первого условия php в строке 10:
Добавьте следующий код, чтобы изменить порядок:
это изменит порядок и переместит все вкладки, перечисленные в $ _prepend, в начало массива в указанном порядке.
источник
Похоже, все вышеперечисленное уже не актуально. Начиная с версии Magento 2.3.1 мы можем использовать
sort_order
аргумент в конфигурации xml.источник
Плагин - хорошее решение. Но вы все еще можете улучшить это. Вы не хотите писать новый плагин каждый раз, когда вам нужно изменить порядок вкладок. Что вы хотите сделать, это установить порядок в XML. Как это:
и затем, вместо изменения шаблона, создайте плагин, который позволит Magento понимать
priority
аргумент, используемый в конфигурации xml:И, наконец, плагин должен быть применен к
Magento\Catalog\Block\Product\View\Description
классу в файле di.xml.источник
Для Magento 2 измените порядок вкладок на странице товара.
Вы можете легко настроить порядок вкладок простым способом.
Если файл details.phtml уже существует, обновите его.
Оригинальный код:
После добавления кода:
И добавьте пользовательскую вкладку на странице продукта, проверьте эту ссылку
Magento 2 - Создать вкладку продукта, которая отображает пользовательский атрибут
источник