Общий экскурс в проблему

Дело в том, что Web программирование затрагивает различные технологии и языки, которыми нужно овладеть, чтоб грамотно создавать web приложения. Таким образом, софт получается сложным для создания и понимания другими разработчиками, у которых могут возникнуть потребности вносить изменения в него. Хотелось бы понизить планку для разработчика. Чтоб хотя бы со знанием одного языка PHP, разработчик мог бы разобраться в существующем коде и быстро создавать новый функционал. 

Особенностями предлагаемой CMS будет являться то, что преимущественно весь код будет писаться на одном языке, а именно PHP.

В идеале, в этом проекте, хотелось бы избавиться от программирования в таких языках как HTML, CSS, Java-script, SQL. И оставить возможность написания кода на PHP.

Простой пример

Для примера возьмем простую задачу: обработка события нажатия на кнопку. При нажатии на кнопку на сервер приходит запрашиваемая информация, структуру которой изначально подготовили, внеся ее описание в HTML код (на данном этапе для простоты правка HTML кода в примере присутствует).

В этом примере будут присутствовать файлы: index.php, index.js, jquery-3.7.1.min.js

index.php - основной серверный скрипт, содержащий серверную бизнес логику; 

index.js - универсальный JS код;

jquery-3.7.1.min.js - библиотека от Jquery используется для упрощения JS кода.

Разберем index.php

В нем используются функции: getval, getevent_button, а так же оператор ветвления if, в котором либо вызывается событие стандартной функцией call_user_func либо отрисовывается начальная HTML форма Web страницы.

getval - вспомогательная функция для получение значения параметра, который мы запросили из HTML формы, 

getevent_button - событие, в котором запрограммирована бизнес логика нажатия на кнопку (в данном случае мы формируем строку: Привет! param1 = .. Param2 =.. , где параметрам приравниваются запрошенные значения)

В HTML разметки добавлен атрибуты к нажимаемой кнопке: click с указанием названия события, которое нужно вызвать при нажатии на кнопку, request - атрибут содержащий структуру запрашиваемой информации из HTML формы (в данном случае запрашиваем атрибут VALUE из редактора Text1 и текущее значение редактора Text2)

Содержимое index.php:

<?php
function getval($data, $name)
{
         $rjsn = json_decode($data, true);
    foreach ($rjsn as $vjsn)
    {
            foreach ($vjsn as $key => $value)
        {
                    if ($name == $key)
            {
                            return $value;
                        
            }
                    
        }
         
    }
     return 'undefined';
}
function getevent_button($data)
{
    $mes = 'Привет!';
    $text1 = getval($data, 'param1');
    $text2 = getval($data, 'param2');
    $mes = $mes . ' param1 = ' . $text1 . ' param2 = ' . $text2;
    $jsn = json_encode(['result' => 'OK', 'message' => $mes]);
    return $jsn;
}
if (isset($_POST['type']))
{
    if ($_POST['type'] == 'event')
    {
            if (isset($_POST['name']))
        {
                       $request = array();
                    if (isset($_POST['request']))
            {
                             $request = $_POST['request'];
                        
            }
                      echo call_user_func($_POST['name'], $request);
                  
        }
    }
}
else
{
    echo '<!DOCTYPE html>
	<html lang="en">
	<head>
        	<meta charset="UTF-8">
        	<title>Пример №1 CMS </title>
        	<!--Подключаем библиотеку-->
        	<script src="jquery-3.7.1.min.js"></script>
        	<script src="index.js"></script>
	</head>
	<body>        
        	<button click=getevent_button  request=[{"type":"attr","attrname":"value","name":"text1","param":"param1"},{"type":"value","name":"text2","param":"param2"}]>нажми</button>
        	<input type=text name=text1 value="123">
        	<input type=text name=text2 value="456">
	</body>
	</html>';
}
?>

Файл index.js содержит функции getparams, delegate, onSuccess

getparams - эта функция формирует список параметров со значениями, которые передаем из HTML формы на сервер

delegate - делегирование события для кнопки, в которой мы делаем POST запрос на сервер, это стандартная функция библиотеки JQuery

onSuccess - функция, в которую приходит ответ от POST запроса

Содержимое файла index.js:

$(document).ready(function() {
    function getparams($attr) {
        req = '[';
        if ($attr) {
            jsn = JSON.parse($attr);
            var name;
            var param;
            var attrname;
            var value;
            for (var i = 0; i < jsn.length; i++) {
                var type = jsn[i].type;
                if (type === "value") {
                    name = jsn[i].name;
                    param = jsn[i].param;
                    value = $('[name=' + name + ']').val();
                    if (req !== '[')
                        req = req + ',';
                    req = req + '{"' + param + '":"' + value + '"}';
                }
                if (type === "attr") {
                    name = jsn[i].name;
                    param = jsn[i].param;
                    attrname = jsn[i].attrname;
                    value = $('[name=' + name + ']').attr(attrname);
                    if (req !== '[')
                        req = req + ',';
                    req = req + '{"' + param + '":"' + value + '"}';
                }
            }
        }
        req = req + ']';
        return req;
    }
    $("body").delegate('[click]', "click", function() {
        req = getparams($(this).attr('request'));
        $.post(
            'index.php', {
                type: "event",
                name: $(this).attr('click'),
                request: req
            },
            onSuccess
        );
    });

    function onSuccess(data) {
        jsn = JSON.parse(data);
        if (!jsn.message == '') {
            alert(jsn.message);
        }
    }
});

HTML форма выглядит следующим образом:

HTML страница
HTML страница

При нажатии на кнопку приходит следующее сообщение:

Ответ с сервер
Ответ с сервер

Таким образом мы создали приложение, без использования каких-либо сложных фреимворков. Вся бизнес логика написана только на одном языке, а именно PHP.

Далее в следующих статьях будут представлены реальные примеры разных разделом CMS.