В структуре G-Drive не предусмотрена возможность подключения отдельных модулей к адресам вида /категория
и /категория/объект
или к объектам вида «абстрактный» и «объект БД». Как можно сгладить это ограничение в рамках одного модуля, я опишу в данной статье...
Для разделения кода модуля между категорией и ее непустыми объектами БД можно использовать условие empty($r1)
, например:
<?php if (empty($r1)) { require PATH.($r0['module'] .= 'list').'.c.php'; return; }
В итоге для страницы категории будут подключены аналоги основных файлов модуля, содержащие в своих именах суффикс list. Файл категорияlist.c.php (модульlist.c.php) при этом можно не использовать, а только изменить значение $r0['module'], добавив суффикс list, и тут же разместить соответствующий код категории. Чтобы выполнить какой-то код в контексте открытого соединения с базой данных для страниц объектов, этот код необходимо разместить вслед за блоком if
(в блоке else
, если не использовать return
в блоке if
).
Для режимов разрешений 1 и 3 условие empty($r1)
не подходит, т.к. принимает либо только истинное значение, либо только ложное, поэтому в данной ситуации следует использовать более подходящее условие, например strlen($p1) == 0
.
Если для адресов вида /категория
и /категория/объект
состав вспомогательных файлов должен различаться, помимо изменения значения $r0['module'] также необходимо изменить значения битов $r0['bits'], отвечающих за подключение вспомогательных файлов.
Не следует забывать и о естественном для G-Drive способе разделения кода категории и ее объектов путем использования двух категорий в терминах G-Drive вместо одной. Например, для страницы категории можно использовать адрес /category
, а для страниц объектов – адреса вида /objects/объект
, в которых objects – это название категории, предназначенной исключительно для страниц объектов. Чтобы сделать недействительным адрес /objects
, нужно установить для категории objects режим разрешений 3 и не создавать пустой объект в site_objects.
Как видно, G-Drive в силу своей простоты имеет определенные ограничения, однако они легко преодолеваются за счет несложных программных расширений и структурных решений. Примеры подобных усовершенствований я буду приводить еще не раз.
Комментарии: 0
Отправить комментарий