2013-03-19 2 views
0

Когда расширение должно сделать обновление макета, следующий не работает для меня:Обновление макета удлинителя Magento: невозможно в config.xml?

пространство имен/модуль/и т.д./config.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <modules> 
     <Namespace_Modulename> 
      <version>0.0.1</version> 
     </Namespace_Modulename> 
    </modules> 
    <frontend> 
     <layout> 
      <updates> 
       <catalog_product_view> 
        <reference name="content"> 
         <remove name="product.info.upsell" /> 
        </reference> 
       </catalog_product_view> 
      </updates> 
     </layout> 
    </frontend> 
</config> 

Но это делает работу:

пространство имен/модуль/и т.д./config.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <modules> 
     <Namespace_Modulename> 
      <version>0.0.1</version> 
     </Namespace_Modulename> 
    </modules> 
    <frontend> 
     <layout> 
      <updates> 
       <Namespace_Modulename> 
        <file>modulename.xml</file> 
       </Namespace_Modulename> 
      </updates> 
     </layout> 
    </frontend> 
</config> 

А потом я просто поставить соответствующее обновление макета в: приложение/дизайн/интерфейс/базы/по умолчанию/макет/modulename.xml

Я мог бы поклясться, что я читал о подходе # 1 в учебнике некоторое время назад , но теперь я больше не могу его найти. Был ли этот урок неправильным и подходит ли №2 к правильному пути? Кажется, немного взломанным, чтобы поместить мой файл обновления макета в frontend/base ... Любые предложения?

+1

'config XML! = Layout XML' – benmarks

ответ

2

Если вы читали это либо

  1. Для древней версии Magento

  2. некорректной

Формуляр файлы обновление XML являются отдельной системой от глобального config.xml дерево конфигурации. Схема XML загружается в

#File: app/code/core/Mage/Core/Model/Layout/Update.php 
public function getFileLayoutUpdatesXml($area, $package, $theme, $storeId = null) 
{ 
    if (null === $storeId) { 
     $storeId = Mage::app()->getStore()->getId(); 
    } 
    /* @var $design Mage_Core_Model_Design_Package */ 
    $design = Mage::getSingleton('core/design_package'); 
    $layoutXml = null; 
    $elementClass = $this->getElementClass(); 
    $updatesRoot = Mage::app()->getConfig()->getNode($area.'/layout/updates'); 
    Mage::dispatchEvent('core_layout_update_updates_get_after', array('updates' => $updatesRoot)); 
    $updateFiles = array(); 
    foreach ($updatesRoot->children() as $updateNode) { 
     if ($updateNode->file) { 
      $module = $updateNode->getAttribute('module'); 
      if ($module && Mage::getStoreConfigFlag('advanced/modules_disable_output/' . $module, $storeId)) { 
       continue; 
      } 
      $updateFiles[] = (string)$updateNode->file; 
     } 
    } 
    // custom local layout updates file - load always last 
    $updateFiles[] = 'local.xml'; 
    $layoutStr = ''; 
    foreach ($updateFiles as $file) { 
     $filename = $design->getLayoutFilename($file, array(
      '_area' => $area, 
      '_package' => $package, 
      '_theme' => $theme 
     )); 
     if (!is_readable($filename)) { 
      continue; 
     } 
     $fileStr = file_get_contents($filename); 
     $fileStr = str_replace($this->_subst['from'], $this->_subst['to'], $fileStr); 
     $fileXml = simplexml_load_string($fileStr, $elementClass); 
     if (!$fileXml instanceof SimpleXMLElement) { 
      continue; 
     } 
     $layoutStr .= $fileXml->innerXml(); 
    } 
    $layoutXml = simplexml_load_string('<layouts>'.$layoutStr.'</layouts>', $elementClass); 
    return $layoutXml; 
} 

Хотя этот код действительно получить ссылку на <updates/> узел с

$updatesRoot = Mage::app()->getConfig()->getNode($area.'/layout/updates'); 

это используется только стянуть список файлов

foreach ($updatesRoot->children() as $updateNode) { 
    if ($updateNode->file) { 
     $module = $updateNode->getAttribute('module'); 
     if ($module && Mage::getStoreConfigFlag('advanced/modules_disable_output/' . $module, $storeId)) { 
      continue; 
     } 
     $updateFiles[] = (string)$updateNode->file; 
    } 
} 
+0

Ах, правильно, спасибо. Должно быть, я вспомнил неправильно. Но стоит ли правильно разместить обновления макета 'app/design/frontend/base/default/layout/modulename.xml'? –

+0

local.xml рекомендуется, если вы хотите изменить существующий подход макета else # 2 – oscprofessionals

+0

@LouisBataillard Правильно зависит от вашего контекста. Если вы изменяете макет и не перераспределяете модуль, 'local.xml' является лучшим/самым простым местом для этих обновлений. Если вы перераспределяете модуль и хотите, чтобы ваши обновления макета применялись ко всем темам, лучше всего использовать 'app/design/frontend/base/default/layout/modulename.xml'. –

Смежные вопросы