Estou tentando alterar a ordem das guias na página do produto no Magento 2. O padrão é Details|More Information|Reviews
.
Eu tentei:
Fornecedor / tema / Magento_Catalog / layout / 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>
Mas isso não funciona e é a maneira recomendada para mover elementos. Consegui mover as guias para fora da área e para outras áreas, além de adicionar novas guias, mas não consigo controlar a ordem das guias.
Meu palpite é que isso tem algo a ver com group="detailed_info"
; Parece que o Magento pega os elementos de layout com esse atributo no XML e percorre o caminho para criar as guias.
Existe uma maneira de alterar a ordem das guias sem reescrever o módulo?
Respostas:
Minha abordagem é um pouco diferente, mas provavelmente mais à prova do futuro, no caso de adicionar novas guias mais tarde e alterar a prioridade / ordem dessas guias.
Passei um argumento para cada guia via arquivo XML no arquivo XML dos meus temas
Então, meu arquivo XML de temas se parece com isso:
Mais ainda, temos que ajustar o
details.phtml
, então copie-o depara
Lembre-se de que o próprio
details.phtml
Magento pode ser alterado em versões ou patches futuras do Magento. Essas alterações também devem ser aplicadas ao conteúdo do seu tema.details.phtml
Agora precisamos obter a prioridade que passamos por meio do arquivo XML.
Então você vê: você só precisa adicionar algumas linhas e sempre pode alterar a prioridade / ordem das guias através do arquivo xml, não precisa mais alterar o
details.phtml
futuro.fonte
Para alterar a posição do Tabbing na página de detalhes, usando arquivo de configuração XML após ou antes atributo não ajuda neste caso.
Você precisa mudar do arquivo de modelo.
Copie o arquivo details.phtml do núcleo para o seu tema,
Dentro deste arquivo, você pode buscar o nome de todas as guias usando, print_r ($ detailInfoGroup) , para obter valor como,
Você deve definir de acordo com seus requisitos em uma nova matriz antes de cada arquivo,
adicionar
<?php foreach ($newOrderTab as $name):?>
,O código completo em details.phtml é como abaixo,
fonte
No Magento 2.3.1 ou acima, podemos usar o
sort_order
argumento em "app/design/frontend/Packagename/themename/Magento_Catalog/layout/catalog_product_view.xml
" xml configCertifique-se também de atualizar o método "
getGroupChildNames
" com "getGroupSortedChildNames
" no arquivo de modelo ( se você o estiver substituindo ) "app/design/frontend/Packagename/themename/Magento_Catalog/templates/product/view/details.phtml
".Método antigo
Método atualizado
Se você estiver substituindo a
Magento\Catalog\Block\Product\View\Details.php
classe de bloco, sua classe de bloco também deverá ter esse método "getGroupSortedChildNames
" atualizado .fonte
Outra maneira usando o argumento de ordem de classificação.
Caminho de arquivo -
app\design\frontend\<companyNAme>\<ThemeName>\Magento_Catalog\layout\catalog_product_view.xml
Adicione o argumento da ordem de classificação dentro do contêiner do bloco de referência product.info.details.
Código de exemplo
Altere o valor do argumento da ordem de classificação para 10, 20, 30 conforme seu pedido.
fonte
sort_order
foi importante para mim, +1 fez o meu dia :)Sei que houve outras respostas para essa pergunta, mas todas elas foram muito invasivas para o meu gosto. Analisando a questão, o Magento adiciona um atributo "group" separado a um elemento e adiciona filhos a esse atributo na ordem carregada no layout, completamente separado da matriz filho que contém a matriz classificada de elementos. Para corrigir isso, escrevi um plug-in simples que corrige a classificação ao recuperar filhos do grupo:
Agora, você poderá solicitar as guias usando o XML padrão
before
e osafter
atributos no layout, como seria de esperar, e provavelmente não precisará ser modificado em patches futuros do Magento.fonte
Eu acho que você precisa apenas adicioná-los na ordem de sua escolha. Para mim, estou usando 4 guias nesta ordem:
No meu módulo personalizado, criei este arquivo de layout: catalog_product_view.xml com este conteúdo:
Você pode ver que eu adicionei apenas 3 guias porque a guia detalhes já existe. Como resultado, tenho as guias nesta ordem:
O que não era o que eu queria, agora minha solução é adicionar também a guia Detalhes novamente, para que meu arquivo de layout fique assim:
Agora eu tenho a ordem que eu quero :)
fonte
A maneira mais fácil e melhor é, na minha opinião, a solução do LordZardeck com um plugin. Após atualizar o fornecedor / módulo / etc / frontend / di.xml
tudo funcionou como desejado.
Obrigado @LordZardeck pelo código limpo!
fonte
Aqui está a solução que eu usei. Ele trocará a guia de descrição e atributos, se ambos estiverem disponíveis. Isso está usando o tema Ultimo. Mas você entenderá. BEIJO.
fonte
Minha solução para o problema é modificar o template details.phtml para obter os blocos filhos do layout.
$blocks = $layout->getChildBlocks($block->getNameInLayout());
Ao fazê-lo desta maneira, ele respeita a ordem dada pelos modificadores depois e antes .
Eu ainda uso a matriz fornecida por getGroupChildNames para validar se o bloco pertence ao grupo.
if(in_array($child_block->getNameInLayout(),$detailedInfoGroup))
fonte
Eu não queria trabalhar no tema, queria modificar o comportamento do método 'getGroupChildNames'. Essa abordagem deve funcionar mesmo se o modelo for modificado.
Adicionei isso ao catalog_product_view.xml:
Em seguida, crie um bloco para alterar o comportamento 'getGroupChildNames':
Isso é tudo.
fonte
LordZardeck tem a melhor resposta, mas isso é basicamente um bug e deve ser corrigido no núcleo.
A solução mais simples para o problema que encontrei é a seguinte: Substitua o modelo Magento_Catalog :: product / view / details.phtml e após a primeira condição php na linha 10:
adicione o seguinte código para modificar a ordem:
isso mudará a ordem e empurrará todas as guias listadas em $ _prepend para o início da matriz na ordem definida.
fonte
Parece que tudo o que foi mencionado acima não é mais relevante. A partir do Magento 2.3.1, podemos usar
sort_order
argumentos em xml config.fonte
Um plugin é uma boa solução. Mas você ainda pode melhorar. Você não deseja escrever um plug-in diferente toda vez que precisar reordenar as guias. O que você deseja fazer é definir a ordem em xml. Como isso:
e então, em vez de modificar o modelo, crie um plugin que faça o Magento entender o
priority
argumento usado na configuração xml:E, finalmente, o plug-in deve ser aplicado à
Magento\Catalog\Block\Product\View\Description
classe no arquivo di.xml.fonte
Para o Magento 2, altere a ordem das guias na página do produto.
Você pode personalizar facilmente a ordem da guia de maneira simples.
Se o arquivo details.phtml já existir, atualize-o.
Código original:
Depois de adicionar o código:
E adicione uma guia personalizada na página do produto, verifique este link
Magento 2 - Criar guia de produto que exibe atributo personalizado
fonte