Jump to content

Bullio Engine - анонс


Recommended Posts

В этой теме я собираюсь повествовать народу, чем я решил серьезно заняться в ближайшее время.

А заняться я решил PHP разработкой. Первоначально я собирался написать систему мониторинга игровых серверов, но после решил взяться за более глобальную вещь. Пишется "чистая" система, на которую при помощи дополнительных приложений можно нарастить то, что вам нужно. В частности, тот же игровой мониторинг.

Но обо всем поподробнее.

Система построена с применением ООП, нет процедурного программирования и не планируется. Вывод отделен от обработки, некое подобие шаблона MVC (Модель -> Отображение -> Контроллер).

На данный момент, я закончил написание основной структуры системы.

Существует 3 главных класса скрипта - это Database (работа с базой данных), Registry (реестр данных) и Kernel (который объединяет в себе и подключает два предыдущих приложения).

Общую структуру работы можно представить так:

Предположим, мы хотим авторизовать пользователя по логину и паролю.

index.php -> Kernel -> Запуск приложения User -> Запуск действия login -> Получение данных от класса Database -> Класс Templater -> отображение вывода.

Теперь поподробнее.

Все запросы идут к главному файлу - index.php.

В нем подключается роутер запросов, который выполняет функцию "телефониста", он соединяет запрос с приложением.

Далее выполняется инициализация приложения Applications, которое управляет всеми приложениями системы.

Командой Applications->Run() запускается приложение User. Командой Applications->RunAction() запускается действие login.

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

Запрос для авторизации имеет вид:

Адрес_сайта/?/user/login/

Это универсальный вид, который будет работать на любом веб-сервере.

Для Apache с его Mod_rewrite вид запроса изменится:

Адрес_сайта/user/login/

Общая структура файлов системы такова:


- Data
-- Templates
- Applications // Приложения установленные пользователем
- System
-- Applications // Системные приложения
--- User // Не буду перечислять все, возьмем для примера User
---- Controllers
----- User_admin.php // Файл для Админ-Центра
----- User_public.php // Файл для посетителей
---- Templates // Шаблоны приложения
-- Kernel
--- Kernel
---- Kernel.php //ядро системы
--- Registry // Работа с реестром
--- Database // Работа с Базой Данных
Список системных приложений на данный момент (которые включены в систему):

Access Rights // права доступа пользователей
Applications // Работа с приложениями
Database // Работа с базой данных
Error // отображение критических ошибок системы
Router // Роутер запросов
Templater // Шаблонизатор
User // Пользователи
Web // подготовка сайта к выводу на экран
[/code]

Изначально задумывается, что все будет автоматизировано.

Допустим, мы хотим создать игровой мониторинг серверов.

Скачиваем основу - Bullio Engine, скачиваем приложение мониторинга.

Заходим в АЦ, там просто загружаем архив с приложением и оно само устанавливается. Никаких заморочек с файлами, как в DLE.

Вот в принципе все, что я хотел написать.

Зачем? Услышать ваше мнение об этом, если есть люди имеющие опыт в этом деле - буду рад получить советы и замечания от них :)

Link to comment
Share on other sites

Очень хорошая тема, буду следить за ней, _Dark_, а нет желания покопаться с системой IPB? Хуки или компоненты свои писать.. В дальнейшем тоже планирую с php плотно поработать.

Модель -> Отображение -> Контроллер

То есть выходит некий шаблон наподобие как в IPB? :

$this->registry->output->loadTemplate ();[/CODE]

˄ пример ˄

Link to comment
Share on other sites

Мне кажется, что мне еще рано лезть в IPB :)

Я пока чего-нибудь сам не сделаю, все равно не до конца буду понимать как все работает.

Приведу код из index.php.


/* Подключаем базу данных...*/
require_once BULLIO_PATH.'/System/Applications/Database/Database.php';
/* ...реестр...*/
require_once BULLIO_PATH.'/System/Kernel/Registry/Registry.php';
/* ...и само ядро.*/
require_once BULLIO_PATH.'/System/Kernel/Kernel/Kernel.php';
/* Подключаем контроллер приложений...*/
require_once BULLIO_PATH.'/System/Applications/Applications/Applications.php';
/* ...и запускаем его. */
$apps = new Applications();
/* Запускаем шаблонизатор */
$tpl = $apps->Run('Templater', 'default'); // Первый параметр - название приложение, существует или нет - проверяется автоматически. Второй параметр - параметр для запуска, в данном случае название шаблона.
/* Запускаем приложение подготовки к выводу */
$web = $apps->Run('Web'); // В приложении Web определяется приложение по умолчанию, производятся с ним действия и отдаются шаблонизатору.
/* Рендерим страницу */
$tpl->render(); // Вывод страницы в браузер
Теперь насчет приложений, пример User_public.php:

class User extends Kernel { // Название класса "User" совпадает с названием файла и названием приложения. Все приложения, кроме первых двух - Database и Registry наследуют ядро
private $info = null;
private $banned = false;

function User($login, $password) { // Конструктор класса, ф-ия вызывается при запуске приложения
$this->_Kernel(); // Инициализация ядра, функция наследуется из Kernel
if($this->login($login, $password)) {
$this->setUserData();
$_SESSION['user_id'] = $this->info['id'];
$_SESSION['user_pass'] = $this->hash($this->info['password']);
}
else return FALSE;
}
[/code] После инициализации ядра ф-ей _Kernel(), в приложении автоматически инициализируются приложения Database и Registry. Например, если мы хотим узнать есть пользователь или нет с указанным логином и паролем, делаем так:
[code]$this->Database->query("SELECT * FROM `users` WHERE `id` = '$login' AND `password` = '$password'"); // Database - инициализируется в Kernel и наследуется приложением (extends Kernel)
if($this->Database->num_rows() == 1) { // Если количество полей равно одному, то будем считать, что мы авторизованы.
echo 'Авторизован!'
}[/code]
С реестром работать проще, в нем хранятся все настройки всех приложений. Общая структура реестра: Application -> Section -> Key = Value Например, нам необходимо получить настройку "site_title" из приложения Web. Настройка хранится в секции "site_settings", поэтому делается так:
[code]
$site_title = $this->Registry->get('Web', 'site_settings', 'site_title');
[/code]
Насчет самого шаблона как в IPB, я еще сам не до конца определил как все будет работать. Или само приложение будет производить вывод либо производить вывод будет приложение Web вместе с Tempater. Скорее всего второй вариант. Т.е., если нам надо отобразить форму логина, то мы сделаем так:
[CODE]$this->tpl->load_sub_template('login.phtml');[/code]

и на этом можно заканчивать.

Сам шаблонизатор загрузит шаблон, обработает его совместно с приложением Web и выведет его на экран.

Я сейчас ищу шаблон в качестве основного, мне подойдут шаблоны от DLE, так что если кто-нибудь знает хороший шаблон для DLE (любой версии), то дайте название, пожалуйста :)

И да, насчет названия: слово "Bullio" сгенерировано PHP скриптом :)

Link to comment
Share on other sites

Я сейчас ищу шаблон в качестве основного, мне подойдут шаблоны от DLE, так что если кто-нибудь знает хороший шаблон для DLE (любой версии), то дайте название, пожалуйста

Стандартный не катит?

Link to comment
Share on other sites

Стандартный не катит?

Это уже слишком нагло будет :)

Хотя у меня нет ни строчки кода от DLE, сайт будет похож на нее :)

Link to comment
Share on other sites

Не, конечно же переделать под себя, минимизировать дизайн и будет шик)

Я уже нашел один дизайнчик, подгоню под себя и потом буду думать какой дизайн в Админ-Центре делать :)

Link to comment
Share on other sites

Вот что я сделал за сегодняшний день:

Во-первых, переписал реестр. Теперь, чтобы все было аккуратней, все настройки всех приложений хранятся в таблице `app_НазваниеПриложения_settings`

Во-вторых, закончил шаблонизатор. Это простой нативный шаблонизатор, никаких тегов вида {var}, используется так:

<?=$this->keys['НазваниеКлюча']?>
Чистый PHP код. Я вначале хотел сделать со своим видом переменных, т.е. с { ... }, но:
  1. Это работает медленнее. Шаблон всегда будет обрабатываться дольше, если в нем есть {site_title}, вместо <?=$this->keys['site_title']?>. Во-первых, шаблон нужно загрузить в переменную. Во-вторых, нужно по заменять везде текст внутри фигурных скобочек на истинное содержимое.
  2. Это никому не нужно :) Лично я не вижу никакой разности и сложностей, писать <?=$this->keys[ ... ]?> вместо { ... }. Да, последний вариант короче. Но шаблон пишется всего один раз, а работает - тысячи.
Помимо этого, определена структура шаблона. А именно:

Название_шаблона
-Style
--CSS
--Images
-Applications
--User
---Form_login.phtml // форма логина
---Form_register.phtml // форма регистрации
--Web // Web - системное приложение, которое производит финальные действия над шаблоном перед его выводом на экран.
---page.phtml // главный шаблон страницы, все остальные вставляются в него
[/code]

В-третьих, подогнал какой-то шаблон от DLE "под себя" :) Сам я верстать дизайны пока не умею.

В-четвертых, закончил работу над роутером. Работает следующим образом:

Допустим, мы открываем ссылку site.ru/?/user/login (Если нет Mod_rewrite) или site.ru/user/login (Если он есть).

Роутер анализирует запрос.

Первая часть - название приложения, в данном случае "user".

Вторая часть - название действия, в нашем случае "login".

Действия вызываются из класса приложения.

Например, в классе приложение User есть метод

[i]action_login[/i]

который и будет вызван роутером.

Завтра планирую написать систему регистрации, авторизации, и написать первое не системное приложение - News, а так же начать работы по созданию инсталлятора приложений :)

Link to comment
Share on other sites

А, да, забыл :)

Приложение Applications, которое управляет работой всех приложений, вошло в группу системных, теперь инициализуется один раз при старте скрипта и доступно из любого места скрипта.

Link to comment
Share on other sites

За сегодня начать писать приложение Новостей не успел, но зато сделал:

  • Систему регистрации / авторизации пользователей
  • Написал приложение Permissions, которое будет управлять правами пользователей и гостей сайта

Link to comment
Share on other sites

если что - обращайся, у меня всегда вагон идей различных есть)))

Обращусь чуть попозже, я сейчас рельсы для вагона строю :)

За сегодня:

  • Модифицировал приложение Applications, изменен формат названий классов приложений
  • Добавил новую функцию шаблонизатора - tpl_copy, которая нужна для вывода данных по одному шаблону, например, новостей.
  • Начал писать приложение News, первое пользовательское приложение. На данный момент готов вывод новостей из базы данных.

Теперь не очень приятная новость :)

Я не смогу продолжить работу без Админ-центра, а для него нет дизайна, поэтому я не могу продолжить над ним работу, а без него я не смогу продолжить работу потому что нет дизайна, а без дизайна я не смогу [бесконечность повторений, само-рекурсия или замкнутый круг, по нашему :)].

Короче говоря, мне придется изучать верстку дизайнов :)

Если у кого есть какой-нибудь дизайн, который вы считаете может подойти для Админ-центра, пожалуйста, напишите информацию о нем суда :) Буду очень благодарен!

Edited by _Dark_
Орфография :)
Link to comment
Share on other sites

Нуу..дизайн, можно же обойтись и скелетом, т.е. просто использовать текстовые ссылки на модули и ф-ции

Link to comment
Share on other sites

Нуу..дизайн, можно же обойтись и скелетом, т.е. просто использовать текстовые ссылки на модули и ф-ции

Я так и сделаю наверно, но лучше было бы уже все вставлять в готовый шаблон, чем потом подгонять.

Link to comment
Share on other sites

Дарк, держи на выбор парочку админок:

1.

Demo:


__themeforest.net/item/xsystem-html5-and-css3-admin-template/1034149
2. Demo:

__themeforest.net/item/admin-control-panel-pro-cp/full_screen_preview/168266
[/code]

Link to comment
Share on other sites

Ого, я даже не додумался чего-то просто поискать шаблоны именно для админок...

Большое спасибо!

Проблема в том, что они платные :)

В принципе это не проблема, там есть демо :)

Так что если ничего другого не найду, буду рипать.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Ваша ссылка была автоматически строена.   Отображать как обычную ссылку

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...