Динамические модели страниц

Для моделей с динамическими uri используйте одну запись в таблице моделей и один request и дописывайте необходимую php логику в include/uri-router.php

А для контента используйте свою отдельную таблицу страниц. Например создаем модель с request:

/request-dinamic-model-name

пример запроса к динамическим страницам

  • my-categories - таблица в бд с вашими динамическими категориями
  • my-pages - таблица в бд с вашим контентом динамических страниц
  • url - поля в бд ваших категорий и страниц для формирования запросов
  • /request-dinamic-model-name - ваша модель страницы (укажем только 1 уникальный request для неё и 1 обработчик)
  • $data_page - данные вашей страницы, которые будут доступны в контексте её файла
  • /any-category-url/any-page-url - запросы по которым будет доступна ваша динамическая модель
$rx = "#^/(" . implode('|', array_column(Wrong\Database\Controller::all('', 'id', 'my-categories'), 'url')) . ")/([^/]+)$#";
if (
preg_match($rx, $request, $matches) &&
($data_page = Wrong\Database\Controller::find($matches[2], 'url', 'my-pages')) && ($arr = Wrong\Models\Pages::all('/request-dinamic-model-name', 'request'))
) {
$arr = array_filter($arr, function ($row) use ($user) {
return $user->access()->read($row);
});
if (!$arr) {
$request = '/forbidden';
goto routing_start;
}
foreach ($arr as $row) {
if (file_exists($_SERVER['DOCUMENT_ROOT'] . $row->file)) {
if (
($template = Wrong\Models\Templates::find($row->template_id)) &&
$user->access()->read($template) &&
file_exists($_SERVER['DOCUMENT_ROOT'] . $template->file)
) { // шаблон доступен
require $_SERVER['DOCUMENT_ROOT'] . $template->file;
} else if ($request != '/forbidden') { // шаблон недоступен - 403
$request = '/forbidden';
goto routing_start;
}
$user->set_request($request);
}
}
}
static weightSort($arr)
Definition: Group.php:136
$user
Definition: from-user.php:38
setcookie('FROM_UID', $uid, [ 'expires'=> time()+31536000, 'path'=> '/', 'domain'=> $_SERVER['HTTP_HOST'], 'secure'=> Wrong\Start\Env::$e->IS_SECURE, 'httponly'=> false, 'samesite'=> Wrong\Start\Env::$e->IS_SECURE ? 'None' :'Lax']) or setcookie('FROM_UID' $_SERVER['HTTP_HOST']
Definition: from-user.php:36
if(($dbh=Connect::getInstance(true) ->dbh) && $dbh->query("SHOW TABLES") ->fetchAll() && $dbh->query("SELECT COUNT(*) FROM `users`") ->fetchColumn()) if(!empty($_POST)) exit
Definition: install.php:198
$arr
Definition: actions.php:25
catch(\Throwable $th) $request
Definition: session.php:28
Предупреждения
Будет плохой практикой создавать отдельную модель Страница под каждую динамическую страницу вашего сайта! Используйте код выше.