Найти тему

CMS своими руками

Введение

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

Дело в том, что 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.