Posted March 20, 201212 yr 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. Вот в принципе все, что я хотел написать. Зачем? Услышать ваше мнение об этом, если есть люди имеющие опыт в этом деле - буду рад получить советы и замечания от них :)
March 20, 201212 yr comment_1465 Ничего если честно не понял , выглядит забавно, радует что загрузка автоматом :)
March 20, 201212 yr comment_1466 Очень хорошая тема, буду следить за ней, _Dark_, а нет желания покопаться с системой IPB? Хуки или компоненты свои писать.. В дальнейшем тоже планирую с php плотно поработать. Модель -> Отображение -> Контроллер То есть выходит некий шаблон наподобие как в IPB? : $this->registry->output->loadTemplate ();[/CODE] ˄ пример ˄
March 21, 201212 yr 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 скриптом :)
March 21, 201212 yr comment_1473 Я сейчас ищу шаблон в качестве основного, мне подойдут шаблоны от DLE, так что если кто-нибудь знает хороший шаблон для DLE (любой версии), то дайте название, пожалуйста Стандартный не катит?
March 21, 201212 yr Author comment_1484 Стандартный не катит? Это уже слишком нагло будет Хотя у меня нет ни строчки кода от DLE, сайт будет похож на нее :)
March 21, 201212 yr comment_1485 Не, конечно же переделать под себя, минимизировать дизайн и будет шик)
March 21, 201212 yr Author comment_1486 Не, конечно же переделать под себя, минимизировать дизайн и будет шик) Я уже нашел один дизайнчик, подгоню под себя и потом буду думать какой дизайн в Админ-Центре делать :)
March 21, 201212 yr Author comment_1502 Вот что я сделал за сегодняшний день: Во-первых, переписал реестр. Теперь, чтобы все было аккуратней, все настройки всех приложений хранятся в таблице `app_НазваниеПриложения_settings` Во-вторых, закончил шаблонизатор. Это простой нативный шаблонизатор, никаких тегов вида {var}, используется так: <?=$this->keys['НазваниеКлюча']?> Чистый PHP код. Я вначале хотел сделать со своим видом переменных, т.е. с { ... }, но: Это работает медленнее. Шаблон всегда будет обрабатываться дольше, если в нем есть {site_title}, вместо <?=$this->keys['site_title']?>. Во-первых, шаблон нужно загрузить в переменную. Во-вторых, нужно по заменять везде текст внутри фигурных скобочек на истинное содержимое. Это никому не нужно Лично я не вижу никакой разности и сложностей, писать <?=$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, а так же начать работы по созданию инсталлятора приложений :)
March 21, 201212 yr Author comment_1503 А, да, забыл Приложение Applications, которое управляет работой всех приложений, вошло в группу системных, теперь инициализуется один раз при старте скрипта и доступно из любого места скрипта.
March 22, 201212 yr Author comment_1527 За сегодня начать писать приложение Новостей не успел, но зато сделал: Систему регистрации / авторизации пользователей Написал приложение Permissions, которое будет управлять правами пользователей и гостей сайта
March 22, 201212 yr Author comment_1547 сделай интеграцию с openID и т.п. - для упрощения регистрации Возьму на заметку.
March 23, 201212 yr Author comment_1580 если что - обращайся, у меня всегда вагон идей различных есть))) Обращусь чуть попозже, я сейчас рельсы для вагона строю За сегодня: Модифицировал приложение Applications, изменен формат названий классов приложений Добавил новую функцию шаблонизатора - tpl_copy, которая нужна для вывода данных по одному шаблону, например, новостей. Начал писать приложение News, первое пользовательское приложение. На данный момент готов вывод новостей из базы данных. Теперь не очень приятная новость Я не смогу продолжить работу без Админ-центра, а для него нет дизайна, поэтому я не могу продолжить над ним работу, а без него я не смогу продолжить работу потому что нет дизайна, а без дизайна я не смогу [бесконечность повторений, само-рекурсия или замкнутый круг, по нашему ]. Короче говоря, мне придется изучать верстку дизайнов Если у кого есть какой-нибудь дизайн, который вы считаете может подойти для Админ-центра, пожалуйста, напишите информацию о нем суда Буду очень благодарен! Edited March 23, 201212 yr by _Dark_ Орфография :)
March 23, 201212 yr comment_1581 Нуу..дизайн, можно же обойтись и скелетом, т.е. просто использовать текстовые ссылки на модули и ф-ции
March 23, 201212 yr Author comment_1586 Нуу..дизайн, можно же обойтись и скелетом, т.е. просто использовать текстовые ссылки на модули и ф-ции Я так и сделаю наверно, но лучше было бы уже все вставлять в готовый шаблон, чем потом подгонять.
March 23, 201212 yr comment_1591 _Dark_, насчёт дизайна не парься, можно его определить в последнюю очередь...
March 23, 201212 yr comment_1592 Дизайн это не главное, это уже марафет, а так главное чтоб само ядро и остальное работало.
March 23, 201212 yr Author comment_1600 Можем админку от IPB отпилить, точнее шаблон ! Это уже наглость :)
March 24, 201212 yr 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]
March 24, 201212 yr Author comment_1610 Ого, я даже не додумался чего-то просто поискать шаблоны именно для админок... Большое спасибо! Проблема в том, что они платные В принципе это не проблема, там есть демо Так что если ничего другого не найду, буду рипать.
March 24, 201212 yr comment_1612 Я ссылки на скачку второй админки нашёл: ___bylix.com/templates/45147-themeforest-admin-control-panel-pro-cp-retail.html
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.