Разделение кода модуля между категорией и ее объектами

В структуре 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

Отправить комментарий

Ваш адрес E-mail не будет опубликован.