Identificar Categoria

Esse post não é uma aula sobre categorias, mas vou aproveitar pra deixar algumas dicas para que você não venha a criar códigos desnecessários no frontend, refazendo funções nativas que o sistema já oferece.
Então é muito importante que você conheça bem o sistema antes de sair criando módulos e funções que já existem.

Configurações em backend

Quando você acessa uma categoria, existem dezenas de informações que podem ser configuradas, excluindo assim a necessidade de criar códigos para verificar (se for categoria X faça isso, se for categoria Y troca aquilo).

Coisas que são possíveis fazer pelo backend:

- Retirar a categoria do menu de navegação mas manter ativo no sistema;
- Deixar cada categoria de uma cor (alterando o design);
- Incluir blocos customizados (como banners);
- Alterar a ordem de exibição dos produtos na listagem;
- Adicionar (ou remover) blocos dinâmicos (como carrinho ou newsletter) do template;
- Adicionar uma imgem para a categoria (normal e miniatura);
- Customizar o SEO indidivualmente (por categoria);

Claro que é possível fazer outras coisas também, mas essas são algumas que você pode configurar sem precisar inserir uma única linha de código no template.

Modificando outros elementos

Vamos supor que você queira modificar um elemento muito específico da página quando acessar determinada categoria. (é difícil arrumar um bom exemplo, pois quase tudo pode ser feito pelo backend).

Quando você acessar uma categoria, o sistema registra na inicialização desta categoria algumas informações, como você pode ver em:

app > code > core > Mage > Catalog > controllers > CategoryController.php

Dentro do método _initCatagory() o código que registra a variável possui informações sobre a categoria:

Mage::register('current_category', $category);

Então no seu template você consegue recuperar essas informações com o código:

Mage::registry('current_category')->getName();

Esse código pode ser útil quando você precisa coincidir diversas condições ao mesmo tempo, por exemplo: se a categoria for X, e o carrinho estiver com Y produtos, e o cliente for do grupo W, então a página deve ter Z.

Outras informações que você poderia obter do registro:

- getDescription();
- getName();
- getUrlPath();
... eu contei 33 atributos disponíveis ...

Em páginas que não são do tipo categoria, esse código não funciona (retorno null).

E quando não tem register?

Mas nem todas as páginas possuem um register na inicialização da classe. Então como podemos recuperar a categoria dos produtos na listagem da página inicial?

Vamos ver um exemplo, para isso abra o arquivo phtml responsável por carregar sua listagem de produtos – se você não sabe qual é o arquivo que esta utilizando, leia o post: Debug em Frontend.

Se você não sabe como listar produtos na página inicial leia o post: Produtos em Destaque na Página Inicial. Neste exemplo usarei o arquivo new.phtml que fica em:

app > design > frontend > base > default > template > catalog > product > new.phtml

Lembre-se de não alterar arquivos em base/default, faça sempre uma cópia para default/default ou para seu template/tema customizado.

Nesse caso usaremos a associação que existe entre produtos e categorias (que é N para N). E enquanto o código percorre produto por produto para exibir na tela, vamos aproveitar para recuperar a categoria de cada produto listado.

/* carrega todas as categorias a q este produto pertence */
$cats = Mage::getModel('catalog/product')->load($_product->getId())->getCategoryIds();
/* carrega o nome da categoria informando o id da categoria q foi carregado pelo produto */
echo Mage::getModel('catalog/category')->load($cats[1])->getName();

Basta adicionar esse código php dentro do foreach, logo abaixo do nome do produto e você vai ver o resultado.

Exemplo

Então com o código acima você tem um ponto de partida para muitas variações, você pode jogar o nome da categoria em uma variável para fazer comparações e tomar decisões de apresentação conforme a categoria.

Um produto pode estar associado a diversas categorias, por isso o getCategoryIds() retorna um array de objetos, e cabe você decidir qual categoria deseja carregar.

Qualquer dúvida basta usar o fórum Bragento.

Sucesso!

O Autor

Mario SAM

Desenvolvedor Magento com certificação M1 Developer e M1 FrontEnd Developer. Graduado em Web Design e Programação, pós-graduado em Gestão de Projetos e TI. Não sou matemático mas estou aqui para somar.