Конфігурування є серцем Magento-системи. Тож в цьому описові майже вся увага буде зосереджена на конфігурації модуля (module/etc). Це рівень абстракції, з яким більшість PHP-розробників не звикли працювати. І хоча така логіка збільшує час розробки через безлад і заплутаність на початку, вона також надає безпрецедентну гнучкість та можливість переписувати базові функції системи своїми власними (не втручаючись в саме ядро).
Почнемо з того, що ми створимо модуль Magento, котрий дозволить переглядати всю конфігурацію системи у вікні веб-браузера. На початковій стадії від вас вимагається лише вміти копіювати та вставляти шматки коду. Трохи згодом ви вже й самі будете знати без пояснень, що той чи інший код робить.
Варто відзначити, що більша частина базової системи Magento побудована з використанням модульної системи. Якщо ви подивитеся в app/code/core/Mage
, то побачите, що кожна папка представляє собою окремий модуль, кожен з яких розроблявся різними командами програмістів компанії. Усі разом ці модулі утворюють загальну систему двигуна (ядро).
Ваші власні модулі повинні розміщуватись в цьому каталогові: app/code/local/Packagename
.
“Packagename” (назва пакету модулів) повинен бути унікальним в комбінації Namespace/Package
(простір імен/пакет). Це неофіційне правило, і воно заключається в тому, що назва пакету модулів повинна включати назву вашої компанії (або особисті ініціали). Ідея полягає в тому, щоб назва модулів була унікальна і не збігалася із наявними у цілому світі.
Коли я працюю над своїми проектами з Magento, я використовую версію мого доменного імені (Alanstormdotcom). Ви повинні ж використовувати власний простір імен.
Таким чином, щоб додати новий модуль до вашої Magento-системи, створіть наступну структуру каталогів. Зверніть увагу, що використовується локальне середовище розробки (local
), тобто ми не змінюємо код ядра (core
). Alanstormdotcom
– це назва пакету модулів (використовуйте власну назву), а Configviewer
– це назва модуля.
app/code/local/Alanstormdotcom/Configviewer/Block app/code/local/Alanstormdotcom/Configviewer/controllers app/code/local/Alanstormdotcom/Configviewer/etc app/code/local/Alanstormdotcom/Configviewer/Helper app/code/local/Alanstormdotcom/Configviewer/Model app/code/local/Alanstormdotcom/Configviewer/sql
Вам можуть і не знадобитися всі ці папки в кожному модулі, але їх розгортання – це гарна ідея.
Далі, потрібно створити два файла. По-перше, це config.xml
. Його зберігаємо у папці
app/code/local/Alanstormdotcom/Configviewer/etc/config.xml
Другий файл (Alanstormdotcom_Configviewer.xml
) повинен бути створений за адресою
app/etc/modules/Alanstormdotcom_Configviewer.xml
Домовлено, що іменуватись ці файли мають у вигляді Packagename_Modulename.xml
(Назва пакету модулів_Назва модуля). Вони відповідають за включення/відключення модулів у системі.
Файл config.xml
повинен містити наступну XML структуру (не турбуйтеся надто сильно про те, що робить весь цей код, про нього ми дізнаємось найближчим часом).
<config> <modules> <Alanstormdotcom_Configviewer> <version>0.1.0</version> </Alanstormdotcom_Configviewer> </modules> </config>
А файл Alanstormdotcom_Configviewer.xml
повинен містити наступну XML структуру.
<config> <modules> <Alanstormdotcom_Configviewer> <active>true</active> <codePool>local</codePool> </Alanstormdotcom_Configviewer> </modules> </config>
От і все, тепер у вас є голий кістяк модуля, який не буде робити нічого, але Magento його вже буде бачити. Щоб переконатися у правильності своїх дій:
Alanstormdotcom_Configviewer
з’явився у списку
Вітаємо, ви створили свій перший модуль Magento!
Звичайно, цей модуль ще нічого не робить. Але коли ми його закінчимо, — він буде:
showConfig
” в рядку запиту в браузеріshowConfig
” є в наявності, тоді буде показувати всю конфігурацію двигуна MagentoshowConfigFormat
, що дозволить нам визначати у якому форматі виводити результат – текстовому чи XML.
По-перше, до нашого config.xml
файлу додамо розділ <global>
:
<config> <modules>...</modules> <global> <events> <controller_front_init_routers> <observers> <alanstormdotcom_configviewer_model_observer> <type>singleton</type> <class>Alanstormdotcom_Configviewer_Model_Observer</class> <method>checkForConfigRequest</method> </alanstormdotcom_configviewer_model_observer> </observers> </controller_front_init_routers> </events> </global> </config>
Потім створюємо файл ../Alanstormdotcom/Configviewer/Model/Observer.php
і розміщуємо в ньому наступний код:
<?php class Alanstormdotcom_Configviewer_Model_Observer { const FLAG_SHOW_CONFIG = 'showConfig'; const FLAG_SHOW_CONFIG_FORMAT = 'showConfigFormat'; private $request; public function checkForConfigRequest($observer) { $this->request = $observer->getEvent()->getData('front')->getRequest(); if($this->request->{self::FLAG_SHOW_CONFIG} === 'true'){ $this->setHeader(); $this->outputConfig(); } } private function setHeader() { $format = isset($this->request->{self::FLAG_SHOW_CONFIG_FORMAT}) ? $this->request->{self::FLAG_SHOW_CONFIG_FORMAT} : 'xml'; switch($format){ case 'text': header("Content-Type: text/plain"); break; default: header("Content-Type: text/xml"); } } private function outputConfig() { die(Mage::app()->getConfig()->getNode()->asXML()); } }
Ось і все. Очистіть кеш Magento, а потім завантажте будь який URL свого сайту на Magento з доданим в кінці рядком ?showConfig=true
vash-domen/?showConfig=true
На що звернути увагу?
Перейшовши за таким лінком ви побачите гігантській XML файл. Це повний опис стану поточної Magento-системи. У ньому перераховані всі модулі, моделі, класи, обробники подій та майже все, що вам може знадобитись при розробці.
Для прикладу, розглянемо створений вище файл config.xml
. Якщо ви скористаєтесь пошуком у браузері (Ctrl+F
) і перевірите наявність рядка Configviewer_Model_Observer
, то ви знайдете цей клас у описі системи. Кожен файл config.xml
модуля обробляється Magento і включається в глобальну конфігурацію (global config).
Яка мені від цього користь?
Зараз це може здатися дивним, але ця конфігурація є ключем до розуміння двигуна Magento. Кожен модуль, який ви будете створювати, буде доданий до цієї конфігурації, а доступ до всіх налаштувань системи дуже часто стає розробникам в нагоді.
Розглянемо невеличкий приклад, перед тим як перейдемо до більш практичних речей. Як розробник MVC ви, ймовірно, використовували певні хелпери, робивши екземпляр класу на зразок
$helper_sales = new HelperSales();
Magento абстрагувався від використання декларативних класів PHP. У Magento, згаданий вище код, виглядає приблизно так:
$helper_sales = Mage::helper('sales/data');
Простою мовою, цей статичний метод буде:
<helpers/>
в налаштуваннях (Config)<helpers/>
оглядати секцію <sales/>
.<sales/>
оглядати секцію <class/>
.Mage_Sales_Helper
), для побудови повного імені класу Mage_Sales_Helper_Data
Ключовою перевагою створеного модуля є можливість подивитись в конфігураційному файлі ім’я класів. Знаючи це, ми можемо за допомогою власного модуля перевизначити базову функціональність Magento без зміни або додавання до ядра системи додаткового коду. Такий рівень мета-програмування, як правило, не зустрічається в PHP, але він дозволяє акуратно розширити лише ті частини системи, які потрібно.
Автор: Alan Storm (http://alanstorm.com/magento_config/)
Переклад українською: Ненько Сергій
Адаптація перекладу: SebWeo
Якщо ви плануєте розмістити веб-сайт в мережі Інтернет, дуже важливо знайти для нього швидкий і…
Навчання за кордоном вже давно асоціюється з якісною освітою, новими можливостями та безліччю перспектив. Але…
Вибір майстра для ремонту та перетяжки меблів – завдання, яке потребує вдумливого підходу. Адже від…
Вибір ідеального хостингу під свій сайт може бути досить заплутаною справою, особливо коли існує багато…
Щоб уникати помилок, потрібно набиратися досвіду; щоб набиратися досвіду, потрібно робити помилки Лоуренс Пітер
Коротке визначення Чорного SEO Чорне СЕО (або Чорна оптимізація) — це будь-яка практика, метою якої…