OpenCart 🇺🇦

Статья "Введение в архитектуру, реализация MVC"

Screenshot from 2014-07-10 00:25:39

Для начала, посмотрим на общую структуру каталогов OpenCart:
  •  У нас есть папки admin/, catalog/. Эти две папки содержат контроллеры, модели, представления для админки\фронтенда сайта (Да здравствует MVC! p.s. если кто не знает, что это такое, настоятельно рекоммендую курить доки). При разработке модулей для CMS разработчик зачастую делает правки только в пределах этих двух папок.
  • Папка image/ содержит загруженые фотографии (так-же их уменьшеные копии).
  • Папка system/ содержит собсно сам опенкарт во всей красе (различные классы движка).
  • Папка download/ — файлы для скачивания.
Начнем, пожалуй, с фронтэнда. Вот примерно такую структуру каталогов можно увидеть внутри папки catalog/ (что-то примерно такое-же будет и в папке admin/):
  1. language
    1. папки и .php файлы
  2. controller
    1. product
      1. category.php
      2. compare.php
      3. manufacturer.php
      4. product.php
    2. ...
  3. model
    1. catalog
      1. category.php
      2. manufacturer.php
      3. product.php
      4. review.php
    2. ...
  4. view
    1. javascript
      1. ...
    2. theme
      1. default
        1. image
        2. stylesheet
        3. template
          1. product
            1. category.tpl
            2. compare.tpl
            3. manufacturer_info.tpl
            4. manufacturer_list.tpl
            5. product.tpl
            6. ...
Что нам говорит эта структура?

Контроллер

Начнем с контроллеров: контроллер в опенкарт - это класс (php), который всегда содержит в названии путь к нему в файловой системе.
Например, контроллер catalog/product/category.php будет называться ControllerProductCategory.
Зачастую в контроллере один единственный метод - index(). Этот метод сначала обрабатывает запрос пользователя, затем делает выборки данных из бд с помощью моделей, а затем уже передает все данные в представление, где они будут красиво разложены по полочкам.

Модель

Модель в Opencart - это тоже php класс, который содержит в себе набор методов для извлечения данных из БД. Как и в случае с контроллерами, название класса будет зависеть от пути в файловой структуре. Модели в OpenCart сгруппированы по назначению. Например, модель ModelCatalogCategory содержит в себе методы для работы с категориями: getCategories(), getTotalCategoriesByCategoryId(), getCategoryLayoutId(), [...]

Представление

Представление (шаблоны) здесь устроены несколько иначе, нежели модели и контроллеры. Представление в OpenCart - .tpl файл с php вставками (шаблонизаторы типо smarty здесь не используются). Папка catalog/view/ содержит  в себе общие для всех тем javascript файлы (catalog/view/javascript/) и папку с темами (theme/). Что-бы, например, подредактировать страницу с товаром, можно делать правки в этом шаблоне: catalog/view/theme/default/template/product/product.tpl