Введение
В этом руководстве мы хотели бы рассмотреть структуру и показать основы использования osCommerce v.4.0.
Монтаж
Минимальное требование для этого проекта — чтобы ваш веб-сервер поддерживал PHP 7.0.
Обзор структуры
В первую очередь стоит выделить точки доступа к различным веб-приложениям. Несмотря на то, что код различных веб-приложений почти полностью будет находиться в каталоге lib, каталоги используются для доступа к различным частям системы. Это позволяет визуально разделить псевдонимы для пользователей системы.
.. - это папка лаунчера. Эта часть используется по умолчанию.
admin/ - папка бэкэнд-лаунчера. Путь будет следующим: your.site/admin/
Также вы можете столкнуться с другими подобными каталогами, например: pos, rest
Общая особенность, отличающая их, это наличие index.php и перенаправление трафика на этот файл.
Имена веб-приложений являются условными и могут быть переименованы.
Примечание . Создание страниц, соответствующих именам папок, может привести к их неработоспособности. Например, продукт и категория с SEO-именем «admin».
Каждое приложение имеет свои собственные папки ресурсов:
assets — в этом каталоге находятся результаты кеша, стили и js-скрипты, скомпилированные и готовые к использованию.
images — изображения, относящиеся к приложению, но не зависящие от темы.
include — устаревшая часть кода, примечательная вещь — размещение конфигурационного файла в подпапке local.
themes — части интерфейса, к ним относятся css, шрифты, изображения и javascript.
Примечание . Изображения продуктов и категорий размещаются в основном веб-приложении, но используются всеми приложениями.
lib/ — основная часть кода находится в этом каталоге. Содержимое разделено по содержанию:
common/ - общая функциональная часть. Он имеет код, который одинаково используется различными веб-приложениями.
api/ содержит высокоуровневые модели, позволяющие выполнять импорт/экспорт данных в различных форматах
classs/ содержит классы, используемые как в бэкэнде, так и во внешнем интерфейсе
components/ пользовательские компоненты
config/ содержит файлы конфигурации
extensions/ различные расширения, расширяющие возможности базовой версии. См. главу Расширения ниже.
forms/ позволяют вводить и отображать данные, обеспечивающие взаимодействие между пользователем и базой данных через модели
heplers/ набор классов, логически разделенных и содержащих статические функции
models/ содержит классы моделей, используемые как в бэкенде, так и во внешнем интерфейсе. См. главу «Модели» ниже.
modules/ включает в себя реализации различных частей взаимодействия с пользователем и внешним миром, таких как платежные системы и доставка. См. раздел «Модули» ниже.
models/ фрагменты кода с общей для разных контроллеров логикой выделяются в отдельные классы, называемые сервисами прикладного уровня
widgets/ позволяют быстро создавать компоненты HTML Bootstrap
Функциональная часть остальных веб-приложений размещена на уровне каталогов в следующих папках:
backend/ админ часть
frontend/ веб-приложение по умолчанию
pos/ дополнительное веб-приложение
rest/ дополнительное веб-приложение
Все они имеют однотипную внутреннюю структуру. Часть папок аналогична общей функциональной части:
components/
forms/
models/
services/
widgets/
а также некоторые папки, расширяющие функциональность веб-приложений
assets/ содержит активы приложения, такие как JavaScript и CSS
config/ расширенные файлы конфигурации
design/ блоки, представляющие расширенные виджеты
controllers/ содержит классы контроллеров
web/ содержит скрипт входа
views/ содержит файлы представлений по умолчанию для приложения, эта функциональность переопределяется темами/
themes/ расширение для представлений, позволяющее разделить шаблоны приложений на несколько тем
runtime/ содержит временные файлы, созданные во время выполнения команды (логирование, кеширование)
Консольное приложение играет отдельную роль: console/
config/ файлы консоли конфигурации
controllers/ содержит контроллеры, выполняющие роль команд
migrations/ миграции баз данных
models/ классы моделей для конкретных консолей
runtime/ содержит временные файлы, созданные во время выполнения команды (логирование, кеширование)
vendor/ - Основная часть внешних библиотек, включает в себя фреймворк, это основные:
yiisoft/ framework Yii2 – высокопроизводительный компонент PHP framework, предназначенный для быстрой разработки современных веб-приложений, на котором основана osCommerce v.4.0.
smarty/ шаблонизатор, используемый системой
imagine/ библиотека для работы с изображениями
mobiledetect/ Mobile Detect — это легкий PHP-класс для обнаружения мобильных устройств (включая планшеты).
eazyang/ Очиститель HTML
phpoffice/ , написанная на чистом PHP, предлагает набор классов, позволяющих читать и записывать файлы электронных таблиц различных форматов, таких как Excel и LibreOffice Calc.
tecnickcom/ библиотека для создания PDF-документов на лету.
Примечание . Самостоятельно изменять содержимое папки vendor не рекомендуется.
Принцип использования структуры MVC
Model-View-Controller — это схема разделения данных приложения и управляющей логики на 3 отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может выполняться независимо.
Контроллер интерпретирует действия пользователя, информируя модель о необходимости изменений.
Каждый контроллер будет иметь ряд действий. Вы должны придерживаться правила именования: все классы контроллеров должны заканчиваться на Controller, все устаревшие функции должны начинаться на action.
Из-за URL-маршрутизатора запросы в браузере будут интерпретироваться как вызов конкретного события.
Например, yoursite/account/login-me будет интерпретироваться как вызов функции actionLoginMe из контроллера AccountController веб-приложения по умолчанию [/lib/frontend/controllers].
Контроллер и событие имеют индекс состояния по умолчанию, который будет выполняться, если их инструкции отсутствуют.
Примечание. Избегайте толстых контроллеров и дублирования кода. Это облегчит дальнейшее развитие.
Модель представляет данные и реагирует на команды контроллера, изменяя свое состояние. Именно модель обеспечивает взаимодействие с базой данных.
Классы моделей создаются путем расширения базового класса yii\base\Model. Данные, считанные из базы данных, преобразуются в атрибуты и могут быть доступны как обычные свойства объекта или элементы массива.
При этом извлечение данных из базы данных будет выглядеть как инициализация объекта:
$customer = \common\models\Customers::findOne(1);
изменив значение объекта, можно сохранить данные в базе данных:
$customer->save();
Мы рассмотрим модели более подробно в отдельной главе.
Примечание. В коде вы можете встретить такие вызовы функций, как «tep_db_», которые устарели и не рекомендуются к использованию.
Представление отвечает за отображение данных модели пользователю, реагируя на изменения модели. В нашем случае в качестве обработчика используется шаблонизатор Smarty, заменяющий стандартный.
Где должен быть размещен файл шаблона? Это довольно просто. Запросив рендеринг файла у функции actionLoginMe в контроллере AccountController, упомянутом в примере выше:
$this→render('login-me');
мы должны поместить файл с именем index.tpl в соответствующую папку [/lib/frontend/themes/basic/account], где account — это индикатор имени нашего контроллера.
Модели
Модель — это базовый класс, расширенный из Active Record, и он предоставляет рабочие данные в атрибутах. Каждый атрибут представляет общедоступное свойство модели.
Для того, чтобы новый файл модели заработал, достаточно иметь соответствующую таблицу в базе данных. Название модели обычно дается в форме верблюда. Таким образом, таблица address_book будет иметь класс AddressBook. При правильном наследовании от ActiveRecord минимальным требованием к классу будет наличие функции tableName, возвращающей актуальное имя таблицы в БД.
Расположение модели может быть где угодно, но согласно принятой архитектуре общедоступные классы находятся в соответствующем подразделе общей папки [/lib/common/models].
Если таблица предназначена для использования только в одном веб-приложении, эта таблица должна быть помещена в папку моделей этого приложения.
Разрешается использовать собственные модели для расширений. В этом случае локальные модели могут находиться в подпапке models.
Модули
Модули разделены на несколько типов, а также разделены по подкатегориям. Рассмотрим основные подтипы:
label/ данный тип модели предназначен для доставки и отслеживания заказов, взаимодействие или его отсутствие с выбранным вариантом доставки осуществляется в настройках. В целом вы можете использовать один и тот же вариант доставки независимо от способа.
OrderPayment/ предназначен для выполнения пользовательских платежей. Это может быть как формальное (оффлайн), так и полное внедрение платежной системы.
orderShipping/ способы доставки, предоставленные пользователю. Фактически они представляют собой расчет стоимости доставки.
orderTotal/ этот тип делает настройки расчета стоимости более гибкими и управляемыми. Например, если общий модуль доставки отключен, он удаляет расчет доставки из расчета.
Расширения
Структура расширения строго не регулируется, но общая концепция заключается в том, чтобы придерживаться структуры веб-приложения. В первую очередь это следующие элементы:
classes/ содержит классы
helpers/ классы, включая статические функции
models/ содержит классы моделей
views/ шаблоны, используемые приложением
Bootstrap.php , если модуль поддерживает собственные контроллеры, он будет показан в этом файле.
И основной файл класса, имя которого должно совпадать с именем каталога модуля.