Небольшой апдейт микроблога :-)
Перед тем как делать кодогенератор нужно сформировать структуру модуля.
В основе структуры будет типичный MVC
Рассматривать будем все напримере JohnCMS
Т.к. в нем для совместимости с предыдущими версиями были оставлены глобальные переменные то придется делать костыли.
Создаем в корне директорий module и в нем файл index.php
со следующей строкой
error_reporting(-1);Это будет нашей точкой входа.
в htaccess ничего писать не будем обойдемся глобальными переменными.
Начнем с определения констант.
define('_IN_JOHNCMS', 1);
/* Корневой директорий */
define('ROOTDIR', realpath($_SERVER['DOCUMENT_ROOT']). DIRECTORY_SEPARATOR);
/* Директорий системных файлов */
define('INCDIR', ROOTDIR . 'incfiles' . DIRECTORY_SEPARATOR);
/* Текущий директорий */
define('CURRENTDIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);Подключаем core.php и начинаем лепить костыль
require INCDIR . 'core.php';
/* Системные переменные */
$data = array(
'id' => $id,
'user' => $user,
'act' => $act,
'mod' => $mod,
'do' => $do,
'page' => $page,
'start' => $start,
'headmod' => $headmod,
'kmess' => $kmess,
'textl' => isset($textl) ? $textl : ''
);Подключаем системные файлы модуля
/* Загружаем системные файлы модуля */
loadFile('storage');
loadFile('controller');
loadFile('model');
loadFile('template');А вот и роутинг
/* Загружаем запрашиваемый контроллер */
$module = !empty($_GET['action']) ? $_GET['action'] : 'main';
if(!file_exists(CURRENTDIR . 'controller' . DIRECTORY_SEPARATOR . $module . '.php'))
{
header('Location: ' . core::$system_set['homeurl'] . '/?err');
}
loadFile($module, 'controller');
$module = 'Controller_' . $module;
if (!class_exists($module))
{
header('Location: ' . core::$system_set['homeurl'] . '/?err');
}
$module = new $module($data);
/* Выполняем запрашиваемый метод контроллера */
$mode = !empty($_GET['mode']) ? $_GET['mode'] : '_index';
if (!method_exists($module, $mode))
{
header('Location: ' . core::$system_set['homeurl'] . '/?err');
}
$module->$mode(); Далее рассмотрим системные файлы модуля и пожалуй хватит пока.