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

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

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

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