W przypadku system.xml
plików nie działa tak jak w przypadku plików klas. Te system.xml
pliki są pobierane z aktywnych modułów Magento. Samo skopiowanie jednego z local
folderu nie oznacza, że znajduje się ono w module, ponieważ plik deklaracji modułu nadal mówi, że moduł należy do core
puli kodów.
Jeśli chcesz dodać nowe pola do sekcji lub zastąpić niektóre pola, musisz utworzyć własny moduł.
Oto przykład, jak dodać nowe pole w sekcji Catalog->Frontend
i jak zastąpić je w tej samej sekcji.
Powiedzmy, że Twój moduł został wywołany Easylife_Catalog
.
Potrzebne będą następujące pliki:
app/etc/modules/Easylife_Catalog.xml
- plik deklaracji
<?xml version="1.0"?>
<config>
<modules>
<Easylife_Catalog>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Catalog />
</depends>
</Easylife_Catalog>
</modules>
</config>
app/code/local/Easylife/Catalog/etc/config.xml
- plik konfiguracyjny
<?xml version="1.0"?>
<config>
<modules>
<Easylife_Catalog>
<version>0.0.1</version>
</Easylife_Catalog>
</modules>
</config>
app/etc/local/Easylife/Catalog/etc/system.xml
- system-> plik konfiguracyjny
Powiedzmy, że chcesz zmienić List Mode
pole, aby było dostępne tylko na poziomie globalnym (bez widoku witryny i sklepu). Ścieżka ustawień to catalog/frontend/list_mode
. Wtedy system.xml
będzie wyglądać tak:
<?xml version="1.0"?>
<config>
<sections>
<catalog><!-- first part of the path -->
<groups>
<frontend><!-- second part of the path -->
<fields>
<list_mode><!-- third part of the path -->
<show_in_website>0</show_in_website><!-- this will override the core value -->
<show_in_store>0</show_in_store><!-- this will override the core value -->
</list_mode>
</fields>
</frontend>
</groups>
</catalog>
</sections>
</config>
Powiedzmy, że chcesz dodać nowe pole o nazwie custom
w tej samej sekcji konfiguracji. Teraz powyższy xml staje się
<?xml version="1.0"?>
<config>
<sections>
<catalog><!-- first part of the path -->
<groups>
<frontend><!-- second part of the path -->
<fields>
<list_mode><!-- third part of the path -->
<show_in_website>0</show_in_website><!-- this will override the core value -->
<show_in_store>0</show_in_store><!-- this will override the core value -->
</list_mode>
<custom translate="label"><!-- your new field -->
<label>Custom</label>
<frontend_type>text</frontend_type>
<sort_order>1000</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</custom>
</fields>
</frontend>
</groups>
</catalog>
</sections>
</config>
Nie wiem, czy istnieje metoda usunięcia jakiegoś pola z konfiguracji za pomocą tej metody. Szukałem tego, ale nic nie znalazłem.
app/etc/modules
ładowane są wszystkie pliki deklaracji modułów ( ), następnie wszystkie<depends>
tagi są analizowane i ustanawiana jest hierarchia modułów. następnie moduły są ładowane w tej kolejności.