Quantcast
Channel: Magento українською
Viewing all articles
Browse latest Browse all 13

Magento Config – Allan Storm (переклад)

$
0
0

2

Конфігурування(config) є серцем Magento-системи. Цей опис, майже в цілому, буде навколо module/model/class/template/etc. Це рівень абстракції, з яким, більшість розробників PHP не звикли працювати. І хоча, він збільшує час розробки у вигляді безладу і заплутаності, він також дозволяє мати безпрецедентну гнучкість, перекриваючи базові функції системи власними, не втручаючись в ядро.

Почнемо з того, що ми створимо модуль Magento, котрий дозволить переглядати конфігурацію системи в вікні веб-браузера. Поки все, що вам потрібно запам’ятати, це копіювання і вставка, це дорога до комфортного освоєння технік роботи з Magento, так і до освоєння термінології.

Для нетерплячих, завершений модуль може бути завантажений тут: (http://alanstorm.com/2005/projects/MagentoConfigViewer.tar.gz).

Налаштування структури директорій модуля

Варто відзначити, що більша частина базової системи Magento побудована з використанням модульної  системи, яку ви будете використовувати. Якщо подивитеся в

app/code/core/Mage

Кожна папка представляє собою окремий модуль, побудований різними командами. Разом, ці модулі утворюють систему взаємодії, яку ви використовуєте. Ваші модулі, повинні бути поміщені в таку папку

app/code/local/Packagename

Packagename” повинен бути унікальним в комбінації Namespace/Package. Є неофіційне правило, що воно має містити назву вашої компанії. Ідея полягає у виборі комбінації назви, котру ніхто інший, у цілому світі, не буде використовувати.

app/code/local/Microsoft

Коли я працюю на своїх проектах Magento, я використовую версію мого доменного імені, “Alanstormdotcom“.

Таким чином, щоб додати модуль до вашої Magento-системи, створіть наступну структуру каталогів

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 його буде бачити. Щоб переконатися, у правильності Ваших дій

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

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

Створюємо Config модуля

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

  1. Переварювати існування змінної “showConfig” в рядку запиту
  2. Якщо “showConfig” в наявності, то показує нашу Magento-конфігурацію і зупиняє поточне виконання процесу
  3. Перевіряє в запиті, наявність додаткової змінної, 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, а потім завантажте будь який Magento-URL(запит) з доданим до нього рядком “showConfig=true”:

http://magento.example.com/?showConfig=true

На що я звертаю увагу?

Ви повинні глянути на гігантській XML файл. Це опис стану вашої Magento-системи. У ньому перераховані всі модулі, моделі, класи, обробники подій чи майже все, про що ви б могли подумати.

Для прикладу, розглянемо створений вище файл config.xml. Якщо ви шукаєте XML-файл у вашому браузері для тексту

Configviewer_Model_Observer

ви знайдете цей клас зарахованим у файл. Кожен модуль файлу config.xml розбирається Magento і включається в глобальну конфігурацію(global config).

Для чого це мені?

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

Невеличкий приклад, перед тим як ми перейдемо до більш практичних речей. Як розробник MVC, ви, ймовірно, працювали якимось допоміжними класами, екземплярами щось на зразок

$helper_sales = new HelperSales();

Одна з речей, яку зробив Magento – це абстрагування від декларативних класів PHP. У Magento, згаданий вище код, виглядає приблизно так

$helper_sales = Mage::helper('sales/data');

Простою мовою, цей статичний метод буде:

  1. Подивиться секцію <helpers />, в розділі Config .
  2. В <helpers />, подивіться секцію <sales />.
  3. В  секції <sales />  гляне на секцію <class />.
  4. Використає базове ім’я класу, знайдене в пункті #3 (Mage_Sales_Helper), щоб побудувати повне ім’я класу Mage_Sales_Helper_Data

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

Allan Storm ( http://alanstorm.com/magento_config )

Переклад: Ненько Сергій( snenko@gmail.com )



Viewing all articles
Browse latest Browse all 13

Latest Images

Trending Articles





Latest Images