Como obter a categoria pai principal do objeto de categoria atual?


14

Como posso obter a categoria pai de nível superior (logo após a Categoria padrão) do objeto de categoria atual? Quero que o Nome da categoria e o URL da categoria dessa categoria pai sejam exibidos nas subcategorias.

  • Categoria Padrão
    • Cat A
      • Cat B
        • Cat C

Como posso obter Cat Ao nome, o URL Cat Be os Cat Cobjetos?

Respostas:


22

$category->getPath()retornará os IDs de todas as categorias da raiz da árvore para a atual, separada por slash ( /). Aqui está um exemplo: 1/2/56/124/543. O primeiro é a "raiz das raízes". O segundo é a raiz do catálogo (categoria padrão). O restante deles são categorias simples. Então você pode fazer algo assim.

$path = $category->getPath();
$ids = explode('/', $path);
if (isset($ids[2])){
    $topParent = Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->load($ids[2]);
}
else{
    $topParent = null;//it means you are in one catalog root.
}

Agora você pode obter o nome e o URL assim:

if ($topParent){
    $name = $topParent->getName();
    $url = $topParent->getUrl();
}

Obrigado Marius! Houve um erro de digitação, getId()eu o corrigi. Está funcionando perfeitamente.
MagExt

legal. desculpe pelo erro de digitação. e obrigado pela correção.
Marius

Oi, alguém pode me indicar o documento oficial do magento para a árvore de categorias?
MengT 27/10/2014

@ Marius quando eu obtenho o caminho da categoria, toda a categoria diz 1/2 / <ID da categoria respectiva> Meu ID de categoria padrão é 2. Então, o que é esse 1?
Butterfly

1
@ Invisível você está certo.
Marius

15

Tente isto

$level = $this->getCurrentCategory()->getParentCategory()->getLevel();
if($level > 1){                 
    echo $this->getCurrentCategory()->getParentCategory()->getName();
    }
    else{
    echo $this->escapeHtml($_category->getName());
    }

Simplesmente copie e cole este código :)


Oi. Obrigado pela sua resposta, mas você é 5 meses de atraso :)
MagExt

9
Bem-vindo ao Magento Stack. Você tem razão em responder a uma pergunta antiga se tiver uma boa resposta que ainda não tenha sido abordada. As respostas são para o bem da comunidade e não apenas para o benefício do OP. Mantem! :)
McNab

Esta resposta estará errada se você estiver no nível 3 e mais profundo, pois retorna o primeiro Pai, enquanto a pergunta era sobre o primeiro.
gnysek

Embora essa não seja uma solução completa, pode-se fazer um loop até que o nível desejado seja alcançado. Me empurrou na direção certa.
Domino

4

Você pode usar getParentCategories () na categoria atual e, em seguida, chamar array_pop para obter o último elemento. Faça isso duas vezes para obter o segundo último elemento.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.