======Создание собственной 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]] →