Jump to content

Featured Replies

Posted
comment_1462

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

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

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

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

comment_1466

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

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

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

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

˄ пример ˄

  • Author
comment_1472

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

comment_1473

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

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

  • Author
comment_1484

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

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

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

comment_1485

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

  • Author
comment_1486

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

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

  • Author
comment_1502

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

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

  • Author
comment_1503

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

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

  • Author
comment_1527

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

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

  • Author
comment_1547

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

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

  • Author
comment_1580

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

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

За сегодня:

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

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

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

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

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

Edited by _Dark_
Орфография :)

comment_1581

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

  • Author
comment_1586

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

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

comment_1591

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

comment_1592

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

  • Author
comment_1600

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

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

comment_1604

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

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]

  • Author
comment_1610

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

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

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

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

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

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...

Recently Browsing 0

  • No registered users viewing this page.