Перспективная переопределение Magento XML - PullRequest
1 голос
/ 13 мая 2011

Мне известно о шаблоне лучших практик Magento, который говорит, что если я хочу изменить один из основных файлов Magento, я должен скопировать файл (и соответствующую структуру дерева каталогов) из / app / code / core в / app/ code / local и измените копию так, чтобы она переопределяла оригинал.Мне нужно сделать это с одним из основных XML-файлов Magento - я изменил этот файл и хочу убедиться, что он не будет перезаписан позже при обновлении Magento.

Сейчас у меня естьизмененная версия /app/code/core/Mage/Page/etc/config.xml на месте - я отредактировал ее, чтобы добавить в конкретный макет страницы, который мне нужен для моего сайта.Теперь я хочу переместить мою модификацию из основных файлов.Нужно ли заново создавать весь XML-файл в /app/code/local/Mage/Page/etc/config.xml или мне нужно только поместить свои дополнения и изменения в локальный файл переопределения?

Если этопоследний, может кто-нибудь объяснить мне структуру этого, пожалуйста?

Ответы [ 2 ]

12 голосов
/ 13 мая 2011

Вы не можете точно "переопределить" файл config.xml таким образом.

Magento состоит из кодовых модулей .Mage_Page это один модуль.Модуль содержит файл config.xml и множество файлов PHP.

Вы можете переопределить определенные типы PHP файлов в Magento, поместив замену в

app/code/local/Package/Module/Path/To/File.php

Это потому, что __autoloader создает операторы включения, которые выглядят следующим образом

include('Package/Path/To/File.php')

, и PHP проверит каждый пул кода на наличие файла.

app/code/local
app/code/community
app/code/core

Поместив заменуВ локальном файле Magento сначала находит ваш файл и пропускает основной файл.

Вы не можете сделать то же самое с config.xml.Если вы поместите файл config.xml в

app/code/local/Mage/Page/etc/config.xml

, Magento проигнорирует его.Когда вы запрашиваете страницу в Magento, система создает список активных модулей (от app/modules/etc), а затем загружает файл config.xml каждого модуля.Вы не должны изменять основные файлы config.xml вообще.

Судя по вашему вопросу, похоже, что вы изменили этот config.xml файл, чтобы добавить дополнительный layout.xml файл.Если это так, то вам нужно сделать

  1. Добавить новый модуль в magento.
  2. В файле config.xml вашего нового модуля добавьте новый узел макета.

Эта страница (самостоятельная ссылка) содержит основные файлы, необходимые для установки нового модуля.Однако вместо добавления материала наблюдателя в config.xml добавьте новый узел макета вместо

<config>
    <frontend>
        <layout>
            <updates>
                <my_unique_node_name>
                    <file>foo.xml</file>
                </my_unique_node_name>
            </updates>
        </layout>
    </frontend>
</config>    
2 голосов
/ 13 мая 2011

Если это не слишком много xml, вы можете вставить его в app / etc / local.xml, что я обычно и делаю для пользовательских макетов.

например.

<config>
  <global>
    <!-- ... -->
    <page>
      <layouts>
        <three_columns_test module="page" translate="label">
          <label>3 Columns Test</label>
          <template>page/3columns-test.phtml</template>
          <layout_handle>page_three_columns_test</layout_handle>
        </three_columns_test>
        <new_homepage module="page" translate="label">
          <label>Homepage Layout</label>
          <template>page/homepage.phtml</template>
          <layout_handle>page_homepage</layout_handle>
        </new_homepage>
      </layouts>
    </page>
    <!-- ... -->
  </global>
</config>
...