Просмотр поста

.
Screamer

Небольшой апдейт микроблога :-)
Перед тем как делать кодогенератор нужно сформировать структуру модуля.
В основе структуры будет типичный 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();

Далее рассмотрим системные файлы модуля и пожалуй хватит пока.