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.
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/magento-1/recursividade-infinita-de-temas-e-pacotes-no-magento/"]