Recursividade infinita de temas e pacotes no Magento. Já ouviu falar?
Desenvolvimento, Front End, Magento 1
Atualizado em 16 de fevereiro de 2022
Ninguém nega que o Magento evoluiu muito ao longo dos anos. Quando comecei a desenvolver para Magento, ainda no Magento 1.4, era muito comum e recomendado que ao iniciar um novo tema, ou um novo pacote, que copiássemos os arquivos de tema e layout blank, tema existente dentro do pacote default de qualquer instalação.
O tempo passou, um monte de coisa mudou, e no Magento 1.9 veio o package responsivo rwd, equipado com Sass para pré-processamento de CSS, jQuery para as customizações JavaScript do tema.
Com isso, muita gente começou a duplicar o conteúdo do rwd em outro pacote, afinal não é possível estender um tema de outro pacote, exceto o base/default que é onde tudo termina, certo?
Com a chegada do Magento 1.9, veio também uma mudança importante no sistema de fallback de temas e pacotes., que vem sendo ignorada há muito tempo.

Ao criar um novopacote qualquer arquivo que não exista em app/design/frontend/[layout|template]/novopacote/default seria redirecionado para o tema base/default.
A partir da versão 1.9, você pode ter um nível antes de chegar lá. Para isso, basta adicionar um arquivo chamado theme.xml na pasta etc do seu template, da seguinte forma:
<?xml version="1.0"?>
<theme>
<parent>rwd/default</parent>
</theme>
E salvar em app/design/frontend/novopacote/default/etc/theme.xml
Desta forma, antes de seguir para o base/default, o Magento agora procura por herdeiros, conforme podemos constatar em app/code/core/Mage/Core/Model/Design/Config.php.
if (!$this->loadCache()) {
$this->loadString('<theme />');
$path = str_replace('/', DS, $this->_designRoot . '/*/*/*/etc/theme.xml');
$files = glob($path);
foreach ($files as $file) {
$config = new Varien_Simplexml_Config();
$config->loadFile($file);
list($area, $package, $theme) = $this->_getThemePathSegments($file);
$this->setNode($area . '/' . $package . '/' . $theme, null);
$this->getNode($area . '/' . $package . '/' . $theme)->extend($config->getNode());
}
$this->saveCache();
}
Ao debugar os arquivos que estão sendo lidos ($files) temos:
$files = {array} [8]
0 = "/var/www/magento1923/app/design/adminhtml/default/default/etc/theme.xml"
1 = "/var/www/magento1923/app/design/frontend/base/default/etc/theme.xml"
2 = "/var/www/magento1923/app/design/frontend/default/blank/etc/theme.xml"
3 = "/var/www/magento1923/app/design/frontend/default/default/etc/theme.xml"
4 = "/var/www/magento1923/app/design/frontend/default/iphone/etc/theme.xml"
5 = "/var/www/magento1923/app/design/frontend/default/modern/etc/theme.xml"
6 = "/var/www/magento1923/app/design/frontend/rwd/default/etc/theme.xml"
7 = "/var/www/magento1923/app/design/install/default/default/etc/theme.xml"
E ao acrescentarmos o theme.xml como mostrado acima, temos:
$files = {array} [9]
0 = "/var/www/magento1923/app/design/adminhtml/default/default/etc/theme.xml"
1 = "/var/www/magento1923/app/design/frontend/base/default/etc/theme.xml"
2 = "/var/www/magento1923/app/design/frontend/default/blank/etc/theme.xml"
3 = "/var/www/magento1923/app/design/frontend/default/default/etc/theme.xml"
4 = "/var/www/magento1923/app/design/frontend/default/iphone/etc/theme.xml"
5 = "/var/www/magento1923/app/design/frontend/default/modern/etc/theme.xml"
6 = "/var/www/magento1923/app/design/frontend/<strong>novopacote</strong>/default/etc/theme.xml"
7 = "/var/www/magento1923/app/design/frontend/rwd/default/etc/theme.xml"
8 = "/var/www/magento1923/app/design/install/default/default/etc/theme.xml"
Desta forma, podemos ir estendendo nossos templates como quisermos e com um fallback praticamente infinito, sem ter que ficar duplicando código.
Veja isso e muito mais no meu curso de Criação de Temas e Desenvolvimento Frontend Para Magento 1.x.
- Guest checkout bloqueado na API REST do Magento 2? Confira isso. - 7 de julho de 2026
- Você precisa testar esta plataforma de e-commerce - 9 de fevereiro de 2026
- A hora de montar o seu OnlyFans chegou! Veja 8 ideias pra começar o seu. - 4 de dezembro de 2024
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-1/recursividade-infinita-de-temas-e-pacotes-no-magento/"]