Введение

В этом руководстве мы хотели бы рассмотреть структуру и показать основы использования 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 , если модуль поддерживает собственные контроллеры, он будет показан в этом файле.

И основной файл класса, имя которого должно совпадать с именем каталога модуля.


Предыдущая статья:

Методология расширений

Следующая статья:

Интеграция PayPal с osCommerce