Cursos Magento

Multiloja com Magento – Websites, Lojas e Visões de loja

, , , , ,

Atualizado em 11 de setembro de 2020

Um dos recursos mais bacanas do Magento é a possibilidade de trabalharmos com mais de um site na mesma instalação. Esta funcionalidade é constantemente chamada de multiwebsite, multiloja, multistore, e por aí vai.

Com ela podemos separar clientes, produtos, preços e diversas configurações. Tudo isso sem a necessidade de nenhum módulo adicional. Toda arquitetura do Magento foi planejada para isso desde suas primeiras versões.

Websites, Lojas e visões de loja

Além de podermos ter vários websites numa mesma instalação, cada website pode ter uma “store” e cada store pode ser uma ou mais visões de loja (ou store views).

Mas o que isso quer dizer na prática?

De forma geral, cada website no Magento corresponde a uma URL e cada visão de loja corresponde a um idioma da sua loja.

A hierarquia funcionaria assim:

  • Websites – Uma instalação do Magento tem ao menos um website (por padrão chamado de Main Website (Website Principal). Cada um deles possuí seu próprio IP e domínio.
    • Lojas – Um website pode ter várias lojas. Cada uma com um menu diferente. Embora elas compartilhem do mesmo catálogo, elas podem exibir uma variação de produtos diferentes. Todas as lojas dentro de um website compartilham o mesmo admin e checkout.
      • Visão de loja – cada loja tem uma visão de loja, mas pode ter outras oferecendo o site em outros idiomas ou com outras variações.

Exemplo prático #1

Por exemplo, se você vende equipamentos eletrônicos poderia ter uma hierarquia mais ou menos assim:

  • JoseEletronicos.com.br – website
    • Portugues – visão de loja
  • SmartphonesEmPromocao.com – website especializado em smartphones
    • Inglês – visão da loja de smartphones em Inglês
    • Português – visão da loja de smartphones em Inglês

Tudo isso na mesma instalação do Magento.

Exemplo prático #2 (Real)

Conforme comentei acima, as configurações de cada visão de loja e/ou website podem ser diferentes.

Quando criei o módulo PagSeguro para Magento, também criei uma loja de demonstração. Posteriormente adicionei novos websites e visões de loja.

Em cada website há um checkout diferente a fim de demonstrar a compatibilidade do módulo com eles. Tudo na mesma instalação do Magento. Embora o catálogo e clientes sejam compartilhados neste caso, o que muda é a configuração da loja. Em cada website um checkout diferente foi ativado nas configurações, e os demais desativados.

As lojas em questão são:

  • Checkout nativo – pagseguro-exemplo.ricardomartins.net.br
  • IWD Checkout – pagseguro-exemplo-iwd.ricardomartins.net.br
  • Firecheckout – pagseguro-exemplo-firecheckout.ricardomartins.net.br
  • e por aí vai

Cada uma delas configurada como um Website diferente, contendo uma Store e uma Visão de loja únicas, como mostrado na imagem abaixo.

Como a separação das configurações ocorrem?

As configurações podem ser definidas de forma global, mas sobrescritas quando alteradas em um nível mais baixo. Ou seja, configurações definidas no nível de visão de loja sobrescrevem configurações do nível de loja, que por sua vez sobrescrevem as do website, e assim por diante.

Hierarquia de lojas e configurações

Ao lado dos atributos de produtos, categorias ou configurações do Magento, é possível ver o nível mais baixo onde tal atributo está disponível.

A legenda em questão mostra que estas alterações podem ser alteradas a nível global, website, loja, ou visão. No Magento 2 ocorre da mesma forma.

O escopo de configuração, ou seja, o nível de configuração que estamos trabalhando é exibido no canto esquerdo da tela, como podemos ver no preview abaixo.

Carregando a loja e visão corretos automaticamente

Você provavelmente vai querer que o Magento carregue o website ou loja corretos com base no URL acessado.

Por padrão, tanto o Magento 1 como o Magento 2 leem os valores de configuração dentro de $_SERVER['MAGE_RUN_TYPE'] e $_SERVER['MAGE_RUN_CODE'], em busca do código da loja ou do website que queremos que seja executado.

Isso é informado no arquivo index.php da nossa loja, como mostrado abaixo:

No Magento 1:

/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);

No Magento 2:

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);

Normalmente queremos entregar a loja correspondente ao domínio que está sendo acessado. Idealmente devemos criar as regras para cada domínio e alterar as variáveis MAGE_RUN_CODE e MAGE_RUN_TYPE nas configurações do servidor. Desta forma não precisamos alterar um arquivo do core do Magento.

Na prática, a maioria das implementações que vi até hoje, fazem a alteração diretamente no arquivo index.php, evitando que o site errado seja carregado por conta de alguma má configuração no servidor, e tornando o setup mais simples nos ambientes de desenvolvimento. A única ressalva neste caso, é que você sempre se lembre de conferir se o seu arquivo index.php foi alterado nas atualizações futuras do Magento.

Encontrando o código do site que queremos executar

Antes de mais nada, precisamos saber qual o código do website que queremos executar. Para isso…

No Magento 1:

Navegue até Sistema > Gerenciar Lojas, e passe o mouse sob o website que deseja para visualizar seu ID.

No Magento 2:

Navegue até Lojas > Ajustes > Todas as Lojas, e observe o ID do website que deseja utilizar ao copiar o link.

Executando a loja correta e automaticamente

Tudo que precisamos fazer agora é alterar o valor de $_SERVER['MAGE_RUN_TYPE'] e $_SERVER['MAGE_RUN_CODE'] no servidor ou no index.php de acordo com nossa necessidade.

No exemplo abaixo (Magento 1) mostro como identifico o domínio da loja e carrego o website correspondente de acordo.

$host = $_SERVER['HTTP_HOST'];
switch ($host){
    case strpos($host, 'osc') !== false:
        $mageRunCode = 4;
        $mageRunType = 'website';
        break;
    case strpos($host, 'firecheckout') !== false:
        $mageRunCode = 5;
        $mageRunType = 'website';
        break;
    case strpos($host, 'iwd') !== false:
        $mageRunCode = 6;
        $mageRunType = 'website';
        break;
}

Este código seria adicionado antes de Mage::run($mageRunCode, $mageRunType); no Magento 1.

No Magento 2 não é muito diferente. Veja no exemplo abaixo:

$params = $_SERVER;
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website_code';
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);

A título de observação, as constantes acima representam MAGE_RUN_CODE e MAGE_RUN_TYPE. Ou seja, a mesma coisa que no Magento 1.

Separação de clientes e catálogo

Você pode compartilhar clientes e catálogo ou separá-los a nível de website.

No caso de clientes, isto é feito em Sistema > Configurações > Clientes > Configurações > Opções de compartilhamento.

Opções de compartilhamento de clientes no Magento 1

Já no caso do catálogo de produtos isso ocorre na criação da Loja (Store) ainda em Sistema > Gerenciar Lojas. Lá podemos especificar a categoria padrão de cada loja.

Durante o cadastro de um produto, especificamos em quais websites tal produto estará disponível, além de poder realizar alterações a nível de Website e Visão de loja da mesma forma.

A esquerda, o mesmo menu de escopo. E à direita as opções indicando em quais websites tal produto estará disponível.

Preço por website

Da mesma forma como fizemos com os clientes, você também pode ter preços diferentes por website.

Configuração de escopo de preço

Tal configuração pode ser encontrada em Sistema > Configurações> Catálogo > Catálogo > Preço > Escopo e Preços de Catálogo no Magento 1.

No Magento 2, é encontrada em Lojas > Configurações > Catálogo > Catálogo > Preço.

Configurações de escopo de preço no Magento 2

Conclusão

Tanto no Magento 1 como no Magento 2 podemos definir configurações diferentes e trabalhar com múltiplas visões de loja, lojas e websites.

A configuração de qual website ou loja, em ambas as versões ocorre por meio das variáveis $_SERVER['MAGE_RUN_CODE'] e $_SERVER['MAGE_RUN_TYPE'], sendo que a segunda pode ter o valor website ou store. Ou seja, você pode especificar o código de uma loja (store) ou de um website. No exemplo acima usamos o do website.

Explorando mais o Magento

O Magento é provavelmente a melhor plataforma open source pois foi feito para comércio eletrônico. Conhecer, saber explorar seus recursos e investir tempo nesse aprendizado pode ser um divisor de águas no sucesso que obterá nesta plataforma.

No curso de administração de lojas para Magento 2 abordamos centenas de recursos nativos da plataforma que são pouco explorados pela maioria de seus usuários.

Temos ainda cursos de Magento 1 e cursos de Magento 2 focados na área administrativa, integrações com APIs e de desenvolvimento de componentes e temas. Encontre seu curso, faça a diferença e junte-se aos mais de 14 mil alunos dos meus cursos Magento.

Te encontro nas aulas!

Links relacionados

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/para-magenteiros/multiloja-com-magento/"]