Перейти к содержанию

Bullio Engine - анонс


_Dark_

Рекомендуемые сообщения

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

А заняться я решил 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.

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

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

Ссылка на комментарий
Поделиться на другие сайты

Ничего если честно не понял :), выглядит забавно, радует что загрузка автоматом :)

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

˄ пример ˄

Ссылка на комментарий
Поделиться на другие сайты

Мне кажется, что мне еще рано лезть в 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 скриптом :)

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Во-первых, переписал реестр. Теперь, чтобы все было аккуратней, все настройки всех приложений хранятся в таблице `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, а так же начать работы по созданию инсталлятора приложений :)

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

сделай интеграцию с openID и т.п. - для упрощения регистрации

Ссылка на комментарий
Поделиться на другие сайты

сделай интеграцию с openID и т.п. - для упрощения регистрации

Возьму на заметку.

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

За сегодня:

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

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

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

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

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

Изменено пользователем _Dark_
Орфография :)
Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

_Dark_, насчёт дизайна не парься, можно его определить в последнюю очередь...

Ссылка на комментарий
Поделиться на другие сайты

Дизайн это не главное, это уже марафет, а так главное чтоб само ядро и остальное работало.

Ссылка на комментарий
Поделиться на другие сайты

Можем админку от IPB отпилить, точнее шаблон :)!

Ссылка на комментарий
Поделиться на другие сайты

Можем админку от IPB отпилить, точнее шаблон :)!

Это уже наглость :)

Ссылка на комментарий
Поделиться на другие сайты

Это уже наглость :)

:) НУ я даже...не знаю..))

Ссылка на комментарий
Поделиться на другие сайты

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

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]

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Я ссылки на скачку второй админки нашёл: ___bylix.com/templates/45147-themeforest-admin-control-panel-pro-cp-retail.html

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

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

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...