В связи с вероятным переходом в следующем году на новую схему подключения файлов рекомендую не использовать настройку с одновременным подключением d- и h-файлов. Поддержка последовательного подключения этих файлов, возможно, сохранится, но только для совместимости с кодом наподобие
$r0['module'] = 'exit';
$r0['bits'] = 32;
В новой схеме будут использоваться только два бита поля bits, а не три, как сейчас: 002 (0) – подключить общий шаблон, 012 (слагаемое 16) – подключить вложенный шаблон модуля и общий шаблон, 102 (слагаемое 32) – подключить основной код модуля, 112 (слагаемое 48) – подключить основной код модуля в контексте открытого соединения с базой данных. Подключение шаблонов в последних двух случаях, возможно, будет происходить на основе значений, возвращаемых при подключении основного кода модуля.
В новой схеме биты 4, 5 определяют «режим подключения файлов»: 002 (0) – подключить основной шаблон; 012 (1) – подключить вложенный и основной шаблоны; 102 (2) – подключить заголовочный файл, затем вложенный и основной шаблоны; 112 (3) – подключить файл с кодом в контексте открытого первичного соединения с базой данных, затем вложенный и основной шаблоны. Сохранена возможность изменять описанный выше порядок непосредственно в подключаемом файле: в заголовочном файле можно запретить подключение вложенного шаблона, а также выполнить выход из приложения; в файле с кодом, работающим в контексте открытого первичного соединения с базой данных, можно разрешить подключение заголовочного файла, либо запретить подключение вложенного шаблона (выполнять выход из приложения в данном контексте не рекомендуется). Также можно изменять порядок и в основном файле движка, например в режимах 2 и 3 при подключении первого файла можно изменить номер режима на 1 или даже на 0 (не меняя при этом значения других битов поля bits, что проще всего сделать, используя операцию «Исключающее ИЛИ»: 2^3=1, 3^2=1, 2^2=0, 3^3=0).
Во избежание путаницы с номерами режимов разрешений перед номерами режимов подключения файлов можно ставить букву «икс», например x3.
Вышла версия 3.09. В рассылку также включена pre-версия для тех, кто пока не готов к переходу на новую схему подключения файлов.
Материалы блога будут постепенно обновляться с учетом новой схемы подключения файлов.
Как лучше использовать mysqli_set_charset внутри функции подключения? Мне это нужно, чтобы в БД занести кириллицу правильно.
Если вы не контролируете в полной мере настройки сервера баз данных, использование set_charset обязательно. Функция подключения может быть такой:
В версии 3.10 появится дополнительная переменная с замыканием для «вычисления» имени таблицы. Предположительно переменная будет называться $table. Она может использоваться прямо в PHP-строке, например:
// обращение к таблице категорий
$cat = query("SELECT * FROM `{$table()}` WHERE `id`='$p0'");
// обращение к таблице объектов
$obj = query("SELECT * FROM `{$table($r0['id'])}` WHERE `id`='$p1'");
Также для данного замыкания будут зарезервированы или определены константы ROOT_TABLE и TABLE_PREFIX со значениями по умолчанию 'site_categories' и 'site_' соответственно.
Вышла версия 3.10, юбилейная, т.к. движку сегодня исполняется 10 лет!
Упомянутые в предыдущем комментарии константы решила пока не включать в код. При необходимости вы можете сделать это самостоятельно. Итак, список изменений:
добавлена переменная $table с замыканием для «вычисления» имени таблицы (смотрите пример использования в предыдущем комментарии);
изменен порядок выполнения проверки адреса запроса по заданному шаблону и соединения с базой данных, так что теперь можно добавлять дополнительные проверки адреса в ту же структуру ветвления, находясь вне контекста открытого соединения с базой данных, например «перехватить» запрос к главной странице без соединения с базой данных следующим образом:
изъято использование переменной $_SERVER['QUERY_STRING'], для получения значения переменной $pn добавлено использование переменной $_GET['p'];
незначительно изменены правила внешнего перенаправления в файле .htaccess, прилагаемом к движку.
Рассылку запущу сегодня или в один из ближайших дней.
Добавлена новая услуга «Подписка на рассылку G-Drive для изучающих PHP/MySQL» стоимостью 10 руб. Предзаказ можно сделать через форму обратной связи, указав в тексте сообщения фразу «Интересует пакет №14».
Внимание! В 2021 году стоимость подписки будет увеличена до 100 руб.
Классный скрипт! Только объясните, как сделать страницу с несколькими объектами.
С несколькими объектами БД? Нужно добавить файл-контроллер для выборки объектов из БД и установить режим подключения файлов x3.
Если вы хотите, чтобы страницы со списком объектов и с отдельными объектами находились в одной адресной ветви, например /works и /works/1, нужно делать выборку объектов из БД по условию и по этому же условию задавать имя шаблона для страницы со списком объектов (предварительно его создав):
<?php
if (empty($r1))
{
$r0['module'] .= 'list';
if (!$result = mysqli_query($link, "SELECT * FROM `{$table($r0['id'])}`"))
{
error(503);
return; // в данном случае return можно не писать
}
}
Также при нахождении страниц со списком объектов и с отдельными объектами в одной адресной ветви нужно установить режим разрешений 2.
Что касается оформления шаблона, посмотрите цикл while ($row = getrow($result)) в шаблоне из статьи «Как сделать вывод списка статей?». Функцию getrow и способ ее подключения можно найти там же.
В связи с вероятным переходом в следующем году на новую схему подключения файлов рекомендую не использовать настройку с одновременным подключением d- и h-файлов. Поддержка последовательного подключения этих файлов, возможно, сохранится, но только для совместимости с кодом наподобие
В новой схеме будут использоваться только два бита поля bits, а не три, как сейчас: 002 (0) – подключить общий шаблон, 012 (слагаемое 16) – подключить вложенный шаблон модуля и общий шаблон, 102 (слагаемое 32) – подключить основной код модуля, 112 (слагаемое 48) – подключить основной код модуля в контексте открытого соединения с базой данных. Подключение шаблонов в последних двух случаях, возможно, будет происходить на основе значений, возвращаемых при подключении основного кода модуля.
В новой схеме биты 4, 5 определяют «режим подключения файлов»: 002 (0) – подключить основной шаблон; 012 (1) – подключить вложенный и основной шаблоны; 102 (2) – подключить заголовочный файл, затем вложенный и основной шаблоны; 112 (3) – подключить файл с кодом в контексте открытого первичного соединения с базой данных, затем вложенный и основной шаблоны. Сохранена возможность изменять описанный выше порядок непосредственно в подключаемом файле: в заголовочном файле можно запретить подключение вложенного шаблона, а также выполнить выход из приложения; в файле с кодом, работающим в контексте открытого первичного соединения с базой данных, можно разрешить подключение заголовочного файла, либо запретить подключение вложенного шаблона (выполнять выход из приложения в данном контексте не рекомендуется). Также можно изменять порядок и в основном файле движка, например в режимах 2 и 3 при подключении первого файла можно изменить номер режима на 1 или даже на 0 (не меняя при этом значения других битов поля bits, что проще всего сделать, используя операцию «Исключающее ИЛИ»: 2^3=1, 3^2=1, 2^2=0, 3^3=0).
Во избежание путаницы с номерами режимов разрешений перед номерами режимов подключения файлов можно ставить букву «икс», например x3.
Вышла версия 3.09. В рассылку также включена pre-версия для тех, кто пока не готов к переходу на новую схему подключения файлов.
Материалы блога будут постепенно обновляться с учетом новой схемы подключения файлов.
Как лучше использовать mysqli_set_charset внутри функции подключения? Мне это нужно, чтобы в БД занести кириллицу правильно.
Если вы не контролируете в полной мере настройки сервера баз данных, использование set_charset обязательно. Функция подключения может быть такой:
В версии 3.10 появится дополнительная переменная с замыканием для «вычисления» имени таблицы. Предположительно переменная будет называться $table. Она может использоваться прямо в PHP-строке, например:
Также для данного замыкания будут зарезервированы или определены константы ROOT_TABLE и TABLE_PREFIX со значениями по умолчанию 'site_categories' и 'site_' соответственно.
Вышла версия 3.10, юбилейная, т.к. движку сегодня исполняется 10 лет!
Упомянутые в предыдущем комментарии константы решила пока не включать в код. При необходимости вы можете сделать это самостоятельно. Итак, список изменений:
изменен порядок выполнения проверки адреса запроса по заданному шаблону и соединения с базой данных, так что теперь можно добавлять дополнительные проверки адреса в ту же структуру ветвления, находясь вне контекста открытого соединения с базой данных, например «перехватить» запрос к главной странице без соединения с базой данных следующим образом:
Рассылку запущу сегодня или в один из ближайших дней.
Добавлена новая услуга «Подписка на рассылку G-Drive для изучающих PHP/MySQL» стоимостью 10 руб. Предзаказ можно сделать через форму обратной связи, указав в тексте сообщения фразу «Интересует пакет №14».
Внимание! В 2021 году стоимость подписки будет увеличена до 100 руб.
Классный скрипт! Только объясните, как сделать страницу с несколькими объектами.
С несколькими объектами БД? Нужно добавить файл-контроллер для выборки объектов из БД и установить режим подключения файлов x3.
Если вы хотите, чтобы страницы со списком объектов и с отдельными объектами находились в одной адресной ветви, например /works и /works/1, нужно делать выборку объектов из БД по условию и по этому же условию задавать имя шаблона для страницы со списком объектов (предварительно его создав):
Также при нахождении страниц со списком объектов и с отдельными объектами в одной адресной ветви нужно установить режим разрешений 2.
Подробно об этом можно прочитать в статье «Разделение кода модуля между категорией и ее объектами».
Что касается оформления шаблона, посмотрите цикл
while ($row = getrow($result))
в шаблоне из статьи «Как сделать вывод списка статей?». Функцию getrow и способ ее подключения можно найти там же.