write: 04/09/2025 # / modified: 08/09/2025
Файловая CMS, то есть система управления контентом, использующая файловую систему в качестве/заместо базы данных. Система написана Nicolas Peugnet - Github - Website в 2018 году. И практически с тех самых пор этот сайт крутится на этом движке.
В каталоге /public
содержится общедоступный контент веб-сайта. Внутри него каждая папка является страницей. Таким образом, URL страницы является путем к её папке (после public/
)
Содержимое страницы автоматически формируется на основе содержащихся в ней файлов.
Из этого правила есть только два исключения: в каждой папке/на каждой странице может быть файл с параметрами и папка с ресурсами:
YAML
.ffff
│ .gitignore
│ .htaccess
│ index.php
│ params.yaml # файл конфигурации страницы
│ README.md
│ sample.params.yaml
│
├───inc # Файлы, которые вы хотите разместить на каждой странице, например:
│ ├───css # ваши таблицы стилей,
│ ├───img # изображения (например, значок),
│ ├───js # скрипты,
│ └───php # и php файлы.
├───lib # Все классы php в CMS.
├───public # Общедоступный каталог, содержащий ваш веб-сайт.
├───res # Файлы ресурсов, используемые CMS.
│ └───styles # файлы стилей (css или php)
│ └───fonts # файлы шрифтов
├───tmp # Временный каталог, содержащий файлы кэша.
└───tpl # Шаблоны
├───layouts
│ default.php
└───views
li.cover.php
li.title.php
В корне проекта вы можете добавить файл общей конфигурации: /params.yaml
Например, там можно изменить название сайта.
Вот все настройки, которые вы можете задать внутри (порядок не имеет значения).
# general settings
site:
name: website-name
description: A description
# advanced settings
date formats:
- d/m/Y H:i:s
- d/m/Y H:i
- d/m/Y
page defaults:
cover: /inc/img/default-cover.png
sort:
- type: title | name | lastModif | date
order: asc | desc
render:
- cover | title
layout: default
assets dir: assets
external links:
arrow: true
new tab: true
# you don't really need to edit these settings
system:
public dir: public
Содержимое хранится в общедоступном каталоге, имя которого можно указать в основной конфигурации. По умолчанию используется /public
.
Чтобы создать страницу, вам нужно всего лишь создать папку в общем каталоге. Название папки автоматически станет названием страницы, но вы можете изменить его в файле параметров страницы. Затем вы можете добавить содержимое этой страницы в папку.
Существует два способа организации контента на странице в зависимости от её структуры:
Markdown
или HTML
, которые вы помещаете непосредственно в каталог страницы, а также файлы изображений в папке с ресурсами этой страницы.Папка /inc
предоставляет возможности для персонализации. Она будет добавлять автоматически на все страницы:
/inc/css
/inc/js
/inc/img
/inc/php
В папку каждой страницы можно добавить файл конфигурации params.yaml: Вот параметры, которые можно использовать в этом файле (порядок не имеет значения):
title: Un Titre # переопределить автоматическое название страницы
cover: une-image.jpg # переопределить автоматически заданную обложку
date: 2018-04-12 # задать дату для этой страницы
ignore: # файлы или папки, которые нужно исключить
- un-fichier
- un-autre
- un-dossier
layout: test-layout # использовать другой макет на PHP из `/tpl/layouts`
render: # метод отрисовки для подстраниц
- title # метод для подстраниц первого уровня
- cover # метод для подстраниц второго уровня
sort: # метод сортировки для подстраниц
- type: name # тип сортировки для подстраниц уровня 1
order: asc # порядок сортировки для подстраниц уровня 1
- type: lastModif # тип сортировки для подстраниц уровня 2
order: desc # ...
custom: # пользовательские настройки
render: # пользовательский рендеринг
un-fichier: cover # рендеринг "без изменений" в качестве обложки
sort: # пользовательская сортировка: начинается с "hello", затем "world" и заканчивается "2014"
- hello
- world
- *
- 2014
bypass:
styles: true # обход стилей по умолчанию
scripts: true # обход скриптов по умолчанию
styles: # добавление таблиц стилей для этой страницы
- un-fichier.css
scripts: # добавление скриптов для этой страницы
- un-script.js
- https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.0/p5.js
favicon: image.png # переопределение иконки по умолчанию
assets dir: assets # переопределяет имя каталога активов по умолчанию
Папка assets — это специальная папка, которую можно создать на каждой странице. У неё есть несколько особенностей:
~/
Имя папки с ресурсами для каждой страницы можно указать в её параметрах.
Шаблоны хранятся в каталоге /tpl
. Существует два типа шаблонов: layouts и views.
Макет — это общая структура страницы. Скорее всего, вы будете использовать только один макет для каждой страницы. Один из них уже есть в исходном коде и используется по умолчанию: default.php
.
Чтобы использовать другой шаблон по умолчанию, необходимо добавить PHP-файл в /tpl/layouts
и указать его в основном params.yaml
.
Вы также можете использовать макет для конкретной страницы, просто отредактировав конфигурацию страницы.
Представления — это различные способы отображения элементов страницы. Представления имеют следующее правило записи:
<type>.<name>.php
Например, представление элемента списка с именем title будет li.title.php
При каждом рендеринге страницы ffff будет создавать кэш для этой страницы, чтобы ускорить последующие рендеринги.
Каждый раз при отображении страницы ffff будет проверять в кэше (/tmp), есть ли там данные для этой страницы. Если есть, то страницу не нужно рендерить, она будет загружена напрямую из кэша. Если данных нет или они устарели, то страница будет отрендерена заново.
Ввиду того, что прошло уже порядка 7 лет, автор забросил проект и код уже порядком устарел. Например в оригинале для рендера markdown
был использован PHP Markdown
версии "1.0.2" от 2013 года.
Что было сделано:
namespace FFFF;
) для всех классов, чтобы избежать конфликтов.PHPDoc
для всех методов/классов где этого не было.try-catch
в критических местах (файловые операции, парсинг YAML/MD
).yaml
и markdown
в один файл md. Теперь файл поста содержит в себе и конфигурацию поста.FFEngine::genHead()
на основе params.PSR-12
для форматирования (пробелы, отступы, camelCase для методов).tags: php programming javascript web