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