Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 06.10.2022)
61330
солдат
264
самолетов
225
вертолетов
2449
танков
5064
ББМ
1424
артиллерия
176
ПВО
344
РСЗО
3854
машин
15
корабли и катера
Magento для PHP MVC разработчиков (Alan Storm) – ч.1/11

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)

 

 

Добавить комментарий

Ваш адрес email не будет опубликован.