суббота, 29 декабря 2012 г.

OpenCart: А внутре у ей неонка

Решил немного поковыряться во внутренностях OpenCart. Должен сказать что начало меня радует. Не то чтобы сходу все понятно, но тем не менее код очень легко читается и анализируется по сравнению с теми монстрами в которых мне доводилось ковыряться раньше.

Все запросы к магазину с помощью .htaccess направляются на index.php. Кроме админки и установки. Для них в соответствующих каталогах (admin и install) предусмотрена своя точка входа. Логично – админка и установка имеют свой интерфейс имеющий мало общего с магазином и стало быть не зачем мешать их в кучу. Их я пока не касаюсь, ниже пойдет речь только о магазине.

Итак, что у нас в index.php:

1. Загружаем config.php

Он был создан при установке, в нем определены глобальные переменные, которые указывают где что лежит и как достучаться до БД. Если выясняется что установка еще не производилась (отсутствует DIR_APPLICATION), то производится перенаправление на install/index.php

2. Подгружаются разные всякие библиотеки необходимые для работы

В system/startup.php вынесена загрузка библиотек “низкого” уровня, высокоуровневые библиотеки загружаются в index.php. Думаю такое разделение связано с тем что первые изначально унаследованы от какой-то другой системы, а вторые в те далекие времена и составляли собственно OpenCart. Обычная практика.

3 Создаются экземпляры классов Registry, Loader, Config, DB

Все названия что называется говорят сами за себя. Я пока не совсем понимаю чем занимается Loader, со всеми остальными вопросов не возникает

DB инкапсулирует операции с базой данных, в конфиг чуть позже будут загружены всевозможные настройки,  хранимые в БД, а Registry – это сборная солянка, реестр, который содержит в себе ссылки на всё что только можно. Тем самым мы избавляемся от глобальных переменных, но при необходимости может вытащить все что угодно из реестра. Все упомянутые здесь и ниже объекты заталкиваются в реестр.

4. По URL определяем магазин – ведь в базе у нас их может быть несколько

5. Загружаем из БД настройки магазина, при необходимости распаковываем сериализованные.

6. Устанавливаем обработчик ошибок

Хм… т.е. если ошибка произойдет раньше, то в лог магазина ничего не запишется, разве только в лог сервера. Это нужно помнить и контролировать и то и другое. Хотя на мой взгляд лучшее решение – вынести настройки логирования в config.php, а установку обработчика ошибок перенести ближе к началу файла.

7. Готовим объекты Request, Responce, Cache и Session

Не знаю пока что там у нас кэшируется, но выходит что 2 запроса к БД выполняются до того как мы вообще вспоминаем про кэширование. И такое впечатление что и дальше как минимум один запрос также выполняется без кэширования. Т.е. любая страница – это уже минимум три запроса к БД. Причем все три абсолютно одинаковые для всех страниц. Результат одного из них не меняется вообще никогда. А результаты двух меняются крайне редко – мы же не каждый день меняем настройки, а языки добавляем и того реже.

8. Определяем язык в соответствии с настройками браузера и данными сессии

Т.е. изначально язык выбирается по настройкам браузера, потом пользователь может выбрать свой, отличный от этих настроек и его выбор имеет приоритет.

9. Создаются объекты Document, Customer, Affiliate, Currency, Tax, Weight, Length, Cart, Encryption

Назначение большей части из них достаточно очевидно.

10. Создается и настраивается  контролер входа (Front controller), выбирается маршрут (route)

Маршрут содержится в URL.  Если нет – используется маршрут по умолчанию “common/home”

11. Контроллер осуществляет разбор полетов в соответствии с маршрутом . На случай если что-то пойдет не так, ему передается запасной маршрут “error/not_found”

12. Результат выводится

 

З.Ы. Все это несколько сумбурно и невразумительно. Поэтому интересующимся я настоятельно рекомендую для начала почитать вот это.

Комментариев нет:

Отправить комментарий