Корневые скрипты

Собственно, это то, с чего начинается магазин. Как правило, основной корневой скрипт называется index.php и вызывается автоматически, при открытии сайта. Впрочем, Вы можете изменить это используя файл настроек .htaccess. В исходной конфигурации, добавлены следующие корневые скрипты:

  • index.php - отправная точка для вызова соответствующего модуля/модулей формирующих витрину магазина.
  • lazy.php - типовой скрипт, для реализации метода "ленивой" или отложенной загрузки модуля. Используется, чтобы ускорить отображение страницы, когда она достаточно сложная и содержит внутри себя много разных модулей.
  • minify.php - служебный скрипт, который выполняет обфускацию скриптов. Задается в настройках "Среды разработки".
Про работу веб-модулей мы расскажем несколько позже, а пока остановимся на первом скрипте index.php. Давайте разберем его исходный код:

<?php
/***************************************************************************************************
 * 
 * index.php - index page
 * 
 ***************************************************************************************************
 * @version 6.3.0
 * @copyright 2019 Melbis Company
 * @link https://melbis.com
 * @author Dmitriy Kasyanoff
 **************************************************************************************************/ 

Заголовок скрипта - описание задач, имя автора и его реквизиты.

// Require
require_once('config.php');
require_once('units/melbis_inc.php');

В этой строке мы получаем переменные конфигурации и вызываем модуль-библиотеку melbis_inc. Этот модуль содержит стандартные действия, предшествующие работе любого скрипта. Этих действий немного, и Вы можете просмотреть и при желании переписать их по своему усмотрению. Так же этот модуль содержит ряд стандартных функций, которые могут вызываться из этого и других скриптов. Например, функция аварийного завершения работы: MELBIS_INC_halt. Еще этот модуль содержит специальную функцию __autoload, которая автоматически загружает PHP-классы, обеспечивающие работу ядра интернет-магазина.

// Create connect with DataBase
$gDb = new MySql('MELBIS_INC_halt');
$gDb->Connect(__FILE__, __LINE__);

Инициализация соединения с базой данных. Указатель соединения будет храниться в глобальной переменной $gDb. В качестве параметра передаем имя функции отвечающей за вывод сообщений об ошибках. По умолчанию это MELBIS_INC_halt.

// Create Parser
$gParser = new Parser('MELBIS_INC_halt', $gDb);

Инициализация парсера. Это Ваш главный инструмент для построения витрины. Именно используя его методы и свойства, Вы сможете оперировать с данными и формировать содержимое всех модулей в дальнейшем. Для параметров, вновь используем имя функции для сообщений об ошибках MELBIS_INC_halt и указатель соединения с базой данных $gDb.

// Define self constants
$gParser->DefineSelfConst();
Загрузка пользовательского набора "ключ -> значение" и определение их как констант. Для этого используется PHP-функция - define. Данные берутся из таблицы self_key_value. Список пользовательских констант определяется в разделе "Реестр настроек".

// Define session
$gSession = $gParser->DefineSession(DB_USER_NAME.'_MELBIS_SHOP');

Инициализация PHP-сессии. Указатель сессии будет храниться в глобальной переменной  $gSession. В данном случае, в качестве параметра для инициализации сессии используется только имя, но кроме этого здесь также можно указать и ряд других. Подробнее в описании API Parser.

// Define module
if ( isset($gGet['topic_id']) ) $gGet['mod'] = 'melbis_base_topic';
if ( !isset($gGet['mod']) ) $gGet['mod'] = 'melbis_base_index'; 

Определение модуля который будет вызван в дальнейшем. Как уже говорилось, основная задача корневого скрипта определить какая часть витрины магазина запрашивается и запустить соответствующий модуль. В данном примере, мы исходим из переменных $gGet['topic_id'] и $gGet['mod']. Массив $gGet был определен в модуле melbis_inc на основе системного $_GET.

// Parse
$gParser->Parse($gSitePath, $gTemplate, $gGet['mod'], [serialize($gGet), serialize($gPost)], $gUseCache, $gBuild);
Непосредственно запуск самого парсера на исполнение и формирования конечного HTML-кода страницы витрины магазина. В качестве параметров мы передаем следующие переменные:

  • $gSitePath - путь к магазину относительно домена сайта (задается в модуле melbis_inc)
  • $gTemplate - имя текущего набора шаблонов (задается в библиотеке melbis_inc, а определяется в разделе "Инсталляция")
  • $gGet['mod'] -  имя вызываемого модуля, который кстати должен быть разрешен для доступа из вне (подробнее чуть ниже)
  • [serialize($gGet), serialize($gPost)] - массив входных значений для вызываемого модуля. В данном случае передаем оба массива данных типа GET и POST
  • $gUseCache - флаг использования системы кеширования данных (задается в модуле melbis_inc)
  • $gBuild - номер текущей сборки магазина (используется для сброса кеша в браузерах для CSS и JavaScript-файлов и задается в модуле melbis_inc)

Обратите внимание, что вызываться модули могут по-разному. Первый вариант, Вы сейчас увидели, это с помощью метода парсера $gParser->Parse. Но кроме этого способа, модуль может вызывать другой модуль через HTML-шаблоны. При проектировании магазина или сайта, нам с Вами важно, чтобы не произошло его взлома и злоумышленник не смог вызвать любой модуль, который только пожелает. Поэтому, в разделе "Среда разработки" у каждого модуля есть опция "Доступен запуск извне", с помощью которой можно разрешить/запретить вызов модуля первым способом, то есть через index.php и команду $gParser->Parse (об этом подробнее будет рассказано в разделе "Модульные скрипты").

// Publish
$gParser->Publish();

// Possible report
$gParser->Report();

?>
Завершение работы скрипта и публикация сформированной страницы. Если включена опция печати статистики парсера, то она будет выведена после содержимого страницы. Вот собственно и все, как видите корневая страница это достаточно лаконичный скрипт, который выполняет инициализацию данных и определяет исходный модуль.