SimplePage
506
+2
Делал проект для развлечения, но возможно кому то пригодиться, ибо очень прост в освоении, но при этом достаточно удобен и гибок.
Задача:
Простая и расширяемая система управления контентом, без ограничений на язык.
Решение:
Немного инфы чтоб было понятнее:
Система представляет единственный файл следующего содержания:
Далее я распишу возможности системы и процесс ее установки.
Добавлено через 01:13 сек.
Установка
Система работает на любом веб-сервере, поддерживающим PHP. Для установки необходимо переместить код системы в файл sp.php корня сайта. На этом все, система готова к работе. Правда она пока ничего не умеет.
Hello world
Создайте файл index.php в корне сайта со следующим содержанием:
Откройте браузер и перейдите на ваш сайт: http://your-site.com - вы увидите вашу главную страницу.
Задача:
Простая и расширяемая система управления контентом, без ограничений на язык.
Решение:
Немного инфы чтоб было понятнее:
- В систему изначально включено: layout, обработка ошибок, менеджер плагинов
- Система использует возможности веб-сервера для роутинга запросов
- Система работает на голом PHP и если немного подправить, то практически любой версии
Система представляет единственный файл следующего содержания:
<?php // Шаблонизатор function template($path, array $assign = []){ extract($assign); ob_start(); include($path); return ob_get_clean(); } // Загрузка контейнера $sp = isset($sp)? $sp : []; if(is_readable(__DIR__ . '/config.php')){ $sp = array_merge(include(__DIR__ . '/config.php'), $sp); } // Загрузка плагинов if(isset($sp['plugins'])){ foreach($sp['plugins'] as $plugin){ include($plugin); } } ob_start(); register_shutdown_function(function() use($sp){ $content = ob_get_contents(); ob_end_clean(); // Обработка ошибок $error = error_get_last(); if(is_array($error) && isset($sp['error'])){ return call_user_func($sp['error'], $error, $content, $sp); } // Рендеринг страницы if(isset($sp['render'])){ $content = call_user_func($sp['render'], $content, $sp); } // Подключение layout if(isset($sp['layout'])){ $content = template($sp['layout'], [ 'title' => isset($sp['title'])? $sp['title'] : 'SimplePage', 'content' => $content, ]); } echo $content; });
Далее я распишу возможности системы и процесс ее установки.
Добавлено через 01:13 сек.
Установка
Система работает на любом веб-сервере, поддерживающим PHP. Для установки необходимо переместить код системы в файл sp.php корня сайта. На этом все, система готова к работе. Правда она пока ничего не умеет.
Структура проекта
/ sp.php
Hello world
Создайте файл index.php в корне сайта со следующим содержанием:
<?php include('sp.php') ?> <h1>Hello world</h1> <p>Моя главная страница<p>
Структура проекта
/ sp.php index.php
Откройте браузер и перейдите на ваш сайт: http://your-site.com - вы увидите вашу главную страницу.
Изменил: Артур (01.04.2017 / 21:16)
0
Layout
Подключим css к вашему сайта. Создайте файл css/style.css в корне вашего проекта и добавьте в него следующий стиль:
Создайте файл _layout/default.html следующего содержания:
Это будет обертка для страниц вашего сайта.
Теперь необходимо указать системе использовать эту обертку. Для этого создайте файл config.php со следующим содержимым:
После перезагрузки страницы в браузере вы увидите обновленный дизайн.
Добавлено через 00:42 сек.
Еще одна страница с ЧПУ
Предположим вам необходимо добавить на сайт страницу с описанием проекта, не нарушая принципов ЧПУ. Для этого создайте файл about/index.php следующего содержания:
Добавьте на главной странице сайта (index.php) ссылку на эту страницу:
Теперь у вас появилась новая страница на сайте, перезагрузите браузер и перейдите на нее.
Подключим css к вашему сайта. Создайте файл css/style.css в корне вашего проекта и добавьте в него следующий стиль:
h1 { color: silver; }
Создайте файл _layout/default.html следующего содержания:
<!DOCTYPE html> <html> <head> <title><?= $title ?></title> <meta charset="utf-8" /> <link href="/css/style.css" rel="stylesheet"> </head> <body> <?= $content ?> </body> </html>
Это будет обертка для страниц вашего сайта.
Теперь необходимо указать системе использовать эту обертку. Для этого создайте файл config.php со следующим содержимым:
<?php return [ 'layout' => '_layout/default.html', ];
Структура проекта
/ _layout/ default.html css/ style.css sp.php config.php index.php
После перезагрузки страницы в браузере вы увидите обновленный дизайн.
Добавлено через 00:42 сек.
Еще одна страница с ЧПУ
Предположим вам необходимо добавить на сайт страницу с описанием проекта, не нарушая принципов ЧПУ. Для этого создайте файл about/index.php следующего содержания:
<?php include('../sp.php') ?> <h1>О проекте</h1> <p>Мой очень хороший проект</p>
Структура проекта
/ _layout/ default.html css/ style.css about/ index.php sp.php config.php index.php
Добавьте на главной странице сайта (index.php) ссылку на эту страницу:
<?php include('sp.php') ?> <h1>Hello world</h1> <p> Моя главная страница <a href="/about">проекта</a> <p>
Теперь у вас появилась новая страница на сайте, перезагрузите браузер и перейдите на нее.
0
Установка Title страницам
Контейнер (конфигурация) системы может быть дополнена на уровне любой станицы. Мы используем это правило для установки Title страницам сайта. Для начала добавим глобальное значение title всем страницам. Для этого поменяем файл config.php следующим образом:
Если вы перезагрузите страницу сайта то увидите, что Title изменился. Теперь необходимо задать новый Title странице /about, для этого изменим ее следующим образом:
После перехода на страницу /about вы увидите, что ее Title кастомизировался.
Совет: если вам нужно изменить Title всем страницам в каталоге, добавьте в этот каталог файл sp.php следующего содержания:
После чего вы можете подключать этот файл к страницам каталога вместо корневого файла sp.php:
Контейнер (конфигурация) системы может быть дополнена на уровне любой станицы. Мы используем это правило для установки Title страницам сайта. Для начала добавим глобальное значение title всем страницам. Для этого поменяем файл config.php следующим образом:
<?php return [ 'layout' => '_layout/default.html', 'title' => 'Мой сайт', ];
Если вы перезагрузите страницу сайта то увидите, что Title изменился. Теперь необходимо задать новый Title странице /about, для этого изменим ее следующим образом:
<?php $sp = ['title' => 'О проекте']; include('../sp.php'); ?> <h1>О проекте</h1> <p>Мой очень хороший проект</p>
После перехода на страницу /about вы увидите, что ее Title кастомизировался.
Совет: если вам нужно изменить Title всем страницам в каталоге, добавьте в этот каталог файл sp.php следующего содержания:
<?php $sp = ['title' => 'Заголовок для всех страниц каталога']; include('../sp.php');
После чего вы можете подключать этот файл к страницам каталога вместо корневого файла sp.php:
<?php include('sp.php') ?> <h1>О проекте</h1> <p>Мой очень хороший проект</p>
0
Плагины
Система никак не ограничивает возможности языка. Чтобы это показать, давайте реализуем возможности блога с единственным автором на базе синтаксиса Markdown. В первую очередь подключим механизм рендеринга этого языка. Я рекомендую для загрузки внешних зависимостей использовать Composer. Создайте файл composer.json в корне проекта:
Выполните команду в консоли (если у вас установлен composer):
После создайте ваш плагин _plugins/mk.php:
Теперь необходимо подключить плагин к проекту. Для этого измените config.php:
Плагин подключен, теперь можно использовать его на всех страницах проекта, но мы изменим с его помощью только страницу "О проекте", для этого отредактируем about/index.php:
Добавлено через 02:26 сек.
Под лендинги и сайты, думаю, подойдет просто идеально, если нужно что то посложнее, можно использовать такую схему:
Страницы получаются более структурированны (вверху контроллер, внизу шаблон) и крайне гибкими (можно сделать все, что позволяет PHP).
Добавлено через 00:51 сек.
Все описанное в данной теме прикрепляю в виде архива.
Может кому пригодиться ) Лицензировать не буду, делайте с кодом что хотите, считайте учебным проектом.
Система никак не ограничивает возможности языка. Чтобы это показать, давайте реализуем возможности блога с единственным автором на базе синтаксиса Markdown. В первую очередь подключим механизм рендеринга этого языка. Я рекомендую для загрузки внешних зависимостей использовать Composer. Создайте файл composer.json в корне проекта:
{ "name": "MyProject", "type": "project", "require": { "michelf/php-markdown": "*" } }
Выполните команду в консоли (если у вас установлен composer):
composer install
После создайте ваш плагин _plugins/mk.php:
<?php function markdown($content){ return Michelf\Markdown::defaultTransform($content); }
Структура проекта
/ _layout/ default.html _plugins/ mk.php vendor/ css/ style.css about/ index.php sp.php config.php index.php
Теперь необходимо подключить плагин к проекту. Для этого измените config.php:
<?php return [ 'plugins' => [ 'vendor/autoload.php', // Для загрузки зависимостей '_plugins/mk.php', // Для загрузки плагина ], 'layout' => '_layout/default.html', 'title' => 'Мой сайт', ];
Плагин подключен, теперь можно использовать его на всех страницах проекта, но мы изменим с его помощью только страницу "О проекте", для этого отредактируем about/index.php:
<?php $sp = ['render' => 'markdown', 'title' => 'О проекте']; include('../sp.php'); ?> # О проекте Мой очень хороший проект
Добавлено через 02:26 сек.
Под лендинги и сайты, думаю, подойдет просто идеально, если нужно что то посложнее, можно использовать такую схему:
<?php include('sp.php'); // Контроллер страницы $db = $sp['database']; $rows = $db->query(...); ?> <!-- Шаблон --> <ul> <?php foreach($rows as $row); ?> <li><?= $row['val'] ?></li> <?php endforeach; ?> </ul>
Страницы получаются более структурированны (вверху контроллер, внизу шаблон) и крайне гибкими (можно сделать все, что позволяет PHP).
Добавлено через 00:51 сек.
Все описанное в данной теме прикрепляю в виде архива.
Может кому пригодиться ) Лицензировать не буду, делайте с кодом что хотите, считайте учебным проектом.
Прикрепленные файлы:
sp.zip (49.01Kb)
Изменил: Артур (01.04.2017 / 21:23)
0
Странно видеть в 2017 фреймворк в таком стиле, да еще и от Башки.
0
Муз-ТВ, я раньше тоже думал, что все должно быть строго "кошерно", но со временем все больше и больше понимаешь - задачи нужно решать так, чтобы и клиент оставался доволен, и самому руки марать не пришлось. Вот SimplePage примерно из то же оперы.
Для выполнения действия необходимо авторизоваться!