======Создание собственной CMS======
В этой статье мы рассмотрим создание собственной cms с инсталятором, регистрацией пользователей и шаблонами сайта. При этом это будет общая cms-шаблон, для которой будет возможность создавать темы и плагины. Поэтому нам понадобиться время и все наше усердие. Предпалогается, что модулями выступят: сайт блога, видеохостинг, букхостинг и небольшая социальная сеть с возможностью личных сообщений. \\
А начнем мы с самого простого, с видеохостинга, так как блог- это совсем просто. И что нам понадобиться? Правильно сервер с установленным ПО. \\
В моем случае:
* [[software:linux_server:apache_http_server|Apache]] [[software:development:web:docs:glossary:server|HTTP Server]]
* база данных [[software:development:web:docs:glossary:mariadb_10|MariaDB]]
Позже сдетаем тоже самое с файловой базой для домашнего использования.
Основное рукописание в Notepad++ на:
* [[software:development:web:docs:glossary:php|PHP]]
* [[software:development:web:docs:glossary:mysql|MySQL]]
* [[software:development:web:docs:glossary:css|CSS]]
* [[software:development:web:docs:glossary:javascript|JavaScript]]
* [[software:development:web:docs:glossary:html|HTML]]
=====Подготовка к работе=====
====Рабочая станция====
Мною будет использоваться Apache/2.4.58 (Unix) на [[software:nas:synology_diskstation_ds218|Synology NAS]] c PHP: 8.2.21 и [[software:development:web:docs:glossary:mariadb_10|MariaDB 10]], но можно для простоты использовать локальный сервер, например [[software:denwer:denwer|Denwer]]
* Устанавливаем [[software:nas:putty|Putty]] - клиентскую программу для работы с сетевым протоколом SSH, SFTP и генерации цифровых SSH-ключей, которая является свободным приложением с открытым исходным кодом и распространяется под [[https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F_MIT|Open Source лицензией MIT]].
* Устанавливаем редактор [[https://notepad-plus-plus.org/|Notepad++]] - бесплатный текстовой редактор исходного кода. Работая в среде MS Windows, его использование регулируется [[https://ru.wikipedia.org/wiki/GNU_General_Public_License|GNU General Public License]].
====Планирование====
Расмотрим примерную структуру нашего приложения (названия директорий произвольное, но проще использовать понятные или традиционные, чтобы не запутаться, например: user - в переводе "пользователь", install - "установка", readme - "прочти меня", user_login - "пользователь_авторизация" и т.д.). Ниже приведен предварительной проект директорий нашей будущей CMS.
|AAA||||||AAA{text-align:left;border-color:white}={{fa>folder?}} "./ucms/"
|)|EEE|||||EEE{text-align:left;border-color:white}={{fa>folder?}} users
|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} admin
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} account_admin
|!|!|!|`|BBB||BBB{text-align:left;border-color:white}={{fa>file}} admin_setting.php
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} admin_nav.php
|!|!|`|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} admin.php
|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} user
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} account_user
|!|!|!|)|BBB||BBB{text-align:left;border-color:white}={{fa>file}} user_login.php
|!|!|!|)|BBB||BBB{text-align:left;border-color:white}={{fa>file}} user_logout.php
|!|!|!|`|BBB||BBB{text-align:left;border-color:white}={{fa>file}} user_signup.php
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} messages
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} user_edit.php
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} user_nav.php
|!|!|`|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} user.php
|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} install
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} account_settings.php
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} database_options.php
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} installation_progress.php
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} options.php
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} setting.php
|!|!|`|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} install.php
|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>file?}} ghost.php
|!|`|CCC|||||CCC{text-align:left;border-color:white}={{fa>file?}} administrator.php
|)|BBB|||||BBB{text-align:left;border-color:white}={{fa>folder?}} content
|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} data
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} books
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} images
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} media
|!|!|)|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} music
|!|!|`|BBB||||BBB{text-align:left;border-color:white}={{fa>folder?}} media
|!|`|BBB|||BBB{text-align:left;border-color:white}={{fa>file?}} cont.php
|)|DDD|||DDD{text-align:left;border-color:white}={{fa>folder?}} includes
|!|)|DDD||DDD{text-align:left;border-color:white}={{fa>file?}} config.php
|!|)|DDD||DDD{text-align:left;border-color:white}={{fa>file?}} db.php
|!|)|DDD||DDD{text-align:left;border-color:white}={{fa>file?}} mail.php
|!|)|DDD||DDD{text-align:left;border-color:white}={{fa>file?}} lang.php
|!|)|DDD||DDD{text-align:left;border-color:white}={{fa>file?}} function.php
|!|`|DDD|||DDD{text-align:left;border-color:white}={{fa>file?}} search.php
|)|CCC|||CCC{text-align:left;border-color:white}={{fa>folder?}} library
|!|)|CCC||CCC{text-align:left;border-color:white}={{fa>folder?}} template
|!|!|)|CCC||CCC{text-align:left;border-color:white}={{fa>folder?}} vcms
|!|!|!|)|CCC|CCC{text-align:left;border-color:white}={{fa>folder?}} css
|!|!|!|!|)|CCC|||CCC{text-align:left;border-color:white}={{fa>file?}} main.css
|!|!|!|!|`|CCC|||CCC{text-align:left;border-color:white}={{fa>file?}} nav.css
|!|!|!|)|CCC|CCC{text-align:left;border-color:white}={{fa>folder?}} js
|!|!|!|!|)|CCC|||CCC{text-align:left;border-color:white}={{fa>file?}} main.js
|!|!|!|!|`|CCC|||CCC{text-align:left;border-color:white}={{fa>file?}} nav.js
|!|!|!|)|CCC|CCC{text-align:left;border-color:white}={{fa>folder?}} img
|!|!|!|)|CCC|CCC{text-align:left;border-color:white}={{fa>folder?}} fonts
|!|!|!|!|`|CCC|||CCC{text-align:left;border-color:white}={{fa>file?}} style.ini
|!|!|!|)|CCC||CCC{text-align:left;border-color:white}={{fa>file}} tpl_main.php
|!|!|!|)|CCC||CCC{text-align:left;border-color:white}={{fa>file}} tpl_footer.php
|!|!|!|`|CCC||CCC{text-align:left;border-color:white}={{fa>file}} tpl_header.php
|!|!|)|CCC||CCC{text-align:left;border-color:white}={{fa>folder?}} blog
|!|!|`|CCC||CCC{text-align:left;border-color:white}={{fa>file?}} main.php
|!|)|222||222{text-align:left;border-color:white}={{fa>file?}} 404.php
|!|`|CCC|||CCC{text-align:left;border-color:white}={{fa>file?}} lib.php
|)|MMM|||MMM{text-align:left;border-color:white}={{fa>file?}} .htaccess
|)|MMM|||MMM{text-align:left;border-color:white}={{fa>file?}} index.php
|`|MMM|||MMM{text-align:left;border-color:white}={{fa>file?}} readme.html
Надеюсь, что из вышеприведенной схемы директорий все понятно? Кратко:
* .htaccess — это локальный конфигурационный файл веб-сервера Apache, который позволяет управлять настройками сайта.
* index.php - это стартовая страница.
* readme.html - руководство, которое дает пользователям подробное описание проекта
* user - главная папка пользователей
* guest - пользователь с правом только просмотра и поиска по сайту контента.
* account_user - папка аккаунта пользователя (пользователь с правом просмотра, загрузки, редактирования и удаления своего контента, поиска контента, написания комментариев, голосования и прочего.
* user_login.php - файл авторизации пользователя
* user_logout.php - файл окончания сеанса авторизации пользователя
* user_signup.php - файл регистрации нового пользователя
* user_edit.php - редактор постов пользователя
* user_nav.php - меню пользователя
* account_admin - папка аккаунта администратора (полные права, включая настройку сайта и регистрацию прав пользователя/удаление пользователей и модерацию сообщений)
* admin_setting.php - файл настроек CMS администратором
* admin_nav.php - расширенное меню пользователя-администратора
* install - папка установки CMS
и т.д... (см. описание в файле readme.html) с создание которого мы и начнем. На нашем вебсервере создаем директорию с понятным названием, к примеру... и так уже обозначенно в нашем проекте "ucms" - "Universal Content management system" (Универсальная Система Управления Контентом), а в ней файл с расширение .txt и именем readme
{{:software:development:demo:cms:ucms_creat_1.png?|}}
Этот файл не будет участвовать в работе приложения, в этом файле мы будем писать подробное руководство для пользователя проекта. Да, мы будем много писать, и в основном это будут комментарии. Поэтому создаем еще один файл с именем help.txt
{{:software:development:demo:cms:ucms_creat_2.png?|}}
этот файл в конце нашей работы мы удалим, в нем будут записываться используемые части кода, чтобы вы всегда могли посмотреть как и что пишется, чтобы не тратить время на перелистывание страниц в интернете. Так-же там будут наши заметки, т.к. за один день мы не успеем охватить весь процесс.
Пример файла help.txt
!Это файл - подсказка по написанию кода в руководстве по написанию UCMS
-----------------------------------------------------------------------
// Комментарии в PHP или /* ... */
/* Комментарии CSS */
// Комментарии в JavaScript или /* ... */
/* Комментарии MySQL */
-----------------------------------------------------------------------
-----------------------------------------------------------------------
Подключение файлов JavaScript к HTML
-----------------------------------------------------------------------
Подключение файлов CSS к HTML
/////////////////////////Важно!////////////////////////////////////////
в файле login.php переменную password заменили на login_pass
не забыть !!! произвести замену в reg.php
////////////////////////26.04.2025/////////////////////////////////////
закончили на подключении файла стилей CSS в index.php в директории ./ucms/bin/user
Казалось бы, этого можно не делать, но поверьте, когда у вас будет много директорий и много файлов, вы начнете путаться, а если вас еще отвлекут от процесса на недельку, то вы вообще все забудите, а так у вас будет все записано и вам не прийдется начинать все с начала.
← [[software:development:demo:cms:table_of_contents|Оглавление]][[software:development:demo:cms:video_cms:creating_cms_installer|Создание установщика CMS]] →← [[software:development:demo:cms:table_of_contents|Оглавление]][[software:development:demo:cms:video_cms:creating_cms_readme|Файл readme.txt]] →