Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 15.03.2024)
428420
осіб
347
літаків
325
гелікоптерів
6758
танків
12949
ББМ
10580
артилерія
717
ППО
1017
РСЗВ
13993
машин
26
кораблі і катери
Magento для PHP MVC розробників (Alan Storm) – ч.1/11
Опубліковано Оновлено: 05.01.2018

Magento для PHP MVC розробників (Alan Storm) – ч.1/11

 

Частина 1. Конфігурування Magento. Створення модуля

 

Конфігурування є серцем 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 його вже буде бачити. Щоб переконатися у правильності своїх дій:

  • Очистіть кеш Magento
  • У меню адміністратора Magento перейдіть до Система -> Конфігурація -> Розширена (System -> Configuration -> Advanced)
  • Розгорніть вкладку “Відключити вивід модулів” (Disable modules output), якщо вона згорнута
  • Переконайтеся, що Alanstormdotcom_Configviewer з’явився у списку

 

Вітаємо, ви створили свій перший модуль Magento!

 

 

Створення файлу налаштувань модуля (config)

Звичайно, цей модуль ще нічого не робить. Але коли ми його закінчимо, — він буде:

  • Перевіряти наявність змінної “showConfig” в рядку запиту в браузері
  • Якщо запит “showConfig” є в наявності, тоді буде показувати всю конфігурацію двигуна Magento
  • Перевіряти в запиті наявність додаткової змінної, showConfigFormat, що дозволить нам визначати у якому форматі виводити результат – текстовому чи 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/>.
  • Використовувати базове ім’я класу, знайдене в пункті №3 (Mage_Sales_Helper), для побудови повного імені класу Mage_Sales_Helper_Data

 

Ключовою перевагою створеного модуля є можливість подивитись в конфігураційному файлі ім’я класів. Знаючи це, ми можемо за допомогою власного модуля перевизначити базову функціональність Magento без зміни або додавання до ядра системи додаткового коду. Такий рівень мета-програмування, як правило, не зустрічається в PHP, але він дозволяє акуратно розширити лише ті частини системи, які потрібно.

 

 

 

Автор: Alan Storm (http://alanstorm.com/magento_config/)

Переклад українською: Ненько Сергій

Адаптація перекладу: SebWeo

 

Всі статті даної серії:

  1. Magento для PHP MVC розробників (Alan Storm) – ч.1/11
  2. Magento для PHP MVC розробників – розбір Контролера (ч.2/11)
  3. Magento для PHP MVC розробників – Макети, Блоки та Шаблони (ч.3/11)
  4. Magento для PHP MVC розробників – Моделі та основи ORM (ч.4/11)
  5. Magento для PHP MVC розробників – Інсталювання Ресурсу (ч.5/11)
  6. Magento для PHP MVC розробників – Розширений ORM – EAV (ч.6/11)
  7. Magento для PHP MVC розробників – Особлива конфігурація системи (ч.7/11)
  8. Magento для PHP MVC розробників – Поглиблене налаштування системи (ч.8/11)
  9. Magento для PHP MVC розробників – Колекції Varien Data (ч.9/11)
  10. Magento для PHP MVC розробників – Перевизначення і оновлюваність системи (ч.10/11)
  11. Magento для PHP MVC розробників – Конфігурація системи за замовчуванням (ч.11/11)

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *