Estou migrando minha loja Magento 1.9 para o Magento 2.1.
Ainda sou bastante novo no Magento 2.1 e não consigo encontrar algumas coisas.
Alguma orientação sobre como substituir o comutador de loja de texto por sinalizadores?
Eu estava lutando com o mesmo problema há algum tempo e finalmente consegui resolvê-lo. Talvez você já tenha resolvido o problema agora, mas pode definitivamente ser útil para outros.
O código necessário pode ser encontrado no final deste post.
/var/www/magento/app/design/frontend/{namespace}/{name}/Magento_Store/templates/switch
language.phtml
e adicione-o a esta pasta/var/www/magento/app/code/{theme_dir}/Magento_Theme/view/frontend/layout/default_head_blocks.xml
. /var/www/magento/vendor/magento/module-theme/view/frontend/layout/default_head_blocks.xml
<css src="css/languageSwitcher.css"/>
languageSwitcher.css
e adicione-o à pasta/var/www/magento/app/design/frontend/{namespace}/{name}/web/css
/var/www/magento/app/design/frontend/{namespace}/{name}/web/images/flags
e adicione sinalizadores com a convenção de nomenclatura, flag_{country_ID}.png
por exemplo flag_en.png
. Todas as imagens precisam ter a mesma resolução.Primeiro, você precisa descobrir qual modelo é responsável pelo alternador de idiomas. Portanto, vá para o site de administração da sua instalação do Magento, vá para Store > Configuration > Advanced > Developer > Debug > Enabled Template Path Hints for Storefront > Yes
. Agora recarregue a página da sua loja e você verá muitas caixas vermelhas com nomes. A caixa que contém o alternador de idiomas suspenso tem um caminho como:
/var/www/magento/vendor/magento/module-store/view/frontend/templates/switch/languages.phtml
.
O que você deseja fazer é criar seu próprio modelo e adicionar as alterações desejadas. Portanto, NUNCA altere o modelo mencionado acima. Não é seguro porque todas as atualizações do Magento sobrescrevem as alterações (e talvez algo mais faça o mesmo ....). A maneira recomendada é:
Copie o modelo para o caminho:
/var/www/magento/app/design/frontend/{namespace}/{name}/{vendor_name}_{module_name}/templates/{path_to_template}/template.phtml
.
{namespace} = o namespace do módulo (por exemplo, sua empresa / domínio / ...)
{name} = nome do módulo
{vendor_name} = o nome do fornecedor que forneceu o modelo
{module_name} = o módulo no qual o modelo encontra-se
{path_to_template} = o caminho à direita datemplates
No nosso caso, isso resulta em:
/var/www/magento/app/design/frontend/{namespace}/{name}/Magento_Store/templates/switch/languages.phtml
Agora, isso já deve funcionar, se você fizer algumas alterações na cópia, elas deverão aparecer no site.
CSS
Na minha solução, também usei um arquivo css para estilizar o modelo. Portanto, precisamos adicionar o caminho para o arquivo default_head_blocks.xml
. O arquivo padrão está emapp/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml
Para fazer alterações nesse arquivo, copie-o para a pasta correspondente e adicione o caminho ao arquivo css. Caminho:
/var/www/magento/app/code/{theme_dir}/{Magento_Theme}/view/frontend/layout
Aí você também pode adicionar arquivos * .js extras e outras fontes .... adicionar esta linha ao final do default_head_blocks.xml (mas dentro das <head>
etiquetas): <css src="css/languageSwitcher.css"/>
.
Navegue até a pasta /var/www/magento/app/design/frontend/{namespace}/{name}/web/css
e adicione o languageSwitcher.css
.
Em seguida, vá para .../web/images
e crie a pasta flags
. Adicionar imagens para a pasta com a convenção de nomenclatura: flag_{country_ID}.png
. Por exemplo, para uso em inglês flag_en.png
. Todos eles precisam ter a mesma resolução.
languages.phtml
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
?>
<?php
/**
* Language switcher template
*/
?>
<?php if(count($this->getStores())>1): ?>
<div class="langs-wrapper">
<?php foreach ($this->getStores() as $_lang): ?>
<?php if ($_lang->getCode() != 'default'): ?>
<a class="lang-flag" href="<?php echo $this->getCurrentUrl() . '?___store=' . $_lang->getCode();?>"><img src="<?php echo $this->getViewFileUrl('images/flags/flag_' . $_lang->getCode() . '.png');?>" alt="<?php echo 'could not find image for ' . $_lang->getName() ?>"/></a>
<?php endif;?>
<?php endforeach;?>
</div>
<?php endif;?>
languageSwitcher.css
.langs-wrapper {
height: 15px;
}
.lang-flag {
width: 55px;
height: 32.5px;
float: left;
margin-left: 10px;
border: 1px solid transparent;
}
.lang-flag:hover {
border: 2.5px solid #FFF;
}
Crie um arquivo no seu tema /app/design/frontend/Vendor/Theme/Magento_Store/templates/switch/languages.phtml
<?php
/**
* Language switcher template
*/
if (count($this->getStores())) { ?>
<div class="langs-wrapper">
<?php foreach ($this->getStores() as $_lang) { ?>
<a class="lang-flag" href="#" data-post='<?php echo $block->getTargetStorePostData($_lang); ?>'><img src="<?php echo $this->getViewFileUrl('images/flags/' . $_lang->getCode() . '.png');?>" alt="<?php echo $_lang->getName(); ?>" /></a>
<?php } ?>
</div>
<?php
}
Isso fará com que a troca de idioma persista usando uma sessão, em vez de apenas trocar o idioma na página específica e descartá-la na próxima.