G-Drive. Быстрый старт

G-Drive представляет собой программный каркас, позволяющий выполняться разрозненному коду приложения в едином окружении и берущий на себя выполнение ряда рутинных действий, таких как роутинг и выборка требуемых для запрашиваемой страницы данных из базы данных. Разработчик может вносить изменения в код каркаса или добавлять код к отдельным страницам на каждом из следующих четырех этапов:

  1. Выполнение файла в контексте открытого соединения с базой данных.
  2. Выполнение заголовочного файла (начиная с версии 3.09, второй этап является альтернативой первому, однако на первом этапе можно явно разрешить выполнение второго).
  3. Выполнение вложенного шаблона в контексте открытого в памяти буфера вывода.
  4. Выполнение общего шаблона, т.е. общего финального обработчика.

Возможность выполнения кода на первых трех этапах определяется значениями битов 4 и 5 поля bits, а также действиями на предыдущем этапе по отношению к последующему.

Выполнение кода на последнем этапе происходит независимо от каких-либо дополнительных условий. Если необходимо прервать выполнение приложения до начала выполнения общего шаблона, рекомендуется сделать это внутри заголовочного файла. Изначально в каркасе используется один общий шаблон для всех страниц сайта, включая страницы ошибок. Если нужно использовать разные общие шаблоны, следует изменить код каркаса или код единого общего шаблона, либо, начиная с версии 3.12, изменить на одном из предварительных этапов переменную extra('layout'), в которой хранится имя общего шаблона по умолчанию ('index').

Для создания страницы, доступной по адресу /page, необходимо создать соответствующую запись в таблице site_categories, поместив значение page в поле id и обнулив поле bits. Для добавления к странице дополнительного программного кода необходимо создать соответствующий набор файлов в каталоге mods и установить требуемый режим подключения файлов в поле bits, например можно создать файл вложенного шаблона page.php и установить значение 16 в поле bits.

Для работы со значениями полей таблицы можно использовать ссылки вида $page['имя поля'], например вложенный шаблон страницы может иметь следующий вид:

<h1><?= $page['name'] ?></h1>
<?= $page['content'] ?>

Результат выполнения вложенного шаблона сохраняется в $page['content'], заменяя исходное значение этой переменной, и становится доступным для использования в общем шаблоне, например общий шаблон страниц может иметь следующий вид:

<!DOCTYPE html>
<html>
<head>
<title><?= $page['name'] ?> | Site</title>
</head>
<body>
<?= $page['content'] ?>

</body>
</html>

В результате будет сформирована такая страница: /page (в данном примере HTML-код общего шаблона может незначительно отличаться от показанного выше, например в нем могут присутствовать теги meta, но тег h1 обязательно берется из вложенного шаблона).

Для создания «модульных» страниц, например страницы со списком объектов, хранящихся в таблице базы данных, вместе с шаблонами нужно подключать и контроллер (файл, выполняемый на одном из первых двух этапов). Этому будет посвящена отдельная статья.

Комментарии: 7

  1. Админ

    Тем, кто плохо знаком с двоичной системой счисления, будет полезно описанное ниже правило.

    Значение поля bits может быть получено путем арифметического или поразрядного логического сложения (операция «логическое ИЛИ») чисел, являющихся степенями числа 2, для установленных битов в соответствии со следующей таблицей:

    Т.к. биты 0 и 1 обычно рассматриваются совместно, вместо суммы соответствующих им слагаемых можно использовать просто номер режима разрешений для объекта.

    Начиная с версии 3.09, биты 4 и 5 также рассматриваются совместно, поэтому вместо суммы соответствующих им слагаемых можно использовать просто номер режима подключения файлов, умноженный на коэффициент 16.

    Например, если вы хотите для данной категории разрешить использование адресов только с пустым абстрактным объектом (режим 0), присутствие в адресе параметра p для пустого объекта (за это отвечает бит 2) и подключить файл вложенного шаблона (режим x1), включите в сложение соответственно слагаемые 0, 4 и 16. Сумма этих слагаемых (число 20) и будет значением поля bits.

  2. Habina

    Как подставлять в шаблон документа данные из бд по указанному id?

  3. Админ

    Вы можете это делать так, как описано в статье, указывая в поле bits значение 16, а в поле module – основное имя файла шаблона, например page (чтобы не заполнять данные поля вручную одними и теми же значениями для каждой новой записи, можно указать их в качестве значений по умолчанию для данных полей).

    Для числовых идентификаторов, особенно если они автоинкрементальные, следует использовать не корневую, а специально созданную для хранения ваших данных таблицу с именем, состоящим из префикса site_ и слага категории, который будет использоваться в адресах страниц, формируемых на основе вашего шаблона (если по каким-то причинам нет возможности задать имя таблицы в соответствии с этими правилами, можно использовать представление, хотя это и не так эффективно). При этом добавлять поля bits и module в данную таблицу не нужно.

    Например, для адресов наподобие /page/1, где 1 – это значение id, таблица (или представление) должна называться site_page. Для доступности страниц по указанным адресам нужно создать категорию page в таблице site_categories, указав в поле bits значение 19. При этом нет необходимости что-либо указывать в поле module или даже создавать данное поле. Если этого не сделать, в качестве основного имени файла шаблона будет использован слаг созданной категории, т.е. значение page.

  4. Михаил

    Наглядный пример, показанный ранее на php-форуме:

    1. Создаем шаблон users.php следующего содержания:

      <h1><?= $page['name'] ?></h1>
      
    2. Создаем категорию users и пользователя с идентификатором 1 (при наличии автоинкремента идентификатор пользователя указывать в запросе не нужно; ниже он указан исключительно для наглядности):

      INSERT INTO `site_categories` (`id`, `name`, `bits`) VALUES
      ('users', 'Пользователи', 19);
      
      INSERT INTO `site_users` (`id`, `name`) VALUES
      (1, 'Пользователь');
      

    В итоге получаем страницу по ссылке /users/1.

    Таблица пользователей была создана заранее, но ее можно было создать и прямо перед созданием категории users или даже после создания категории users.

  5. Админ

    Да, я тоже несколько раз показывал подобное на одном форуме, включая создание таблицы объектов.

    Поясню для тех, кто не знаком с G-Drive. Фронт-контроллер самостоятельно выполняет дополнительный сценарий, не вызывая контроллер. Т.е. создавать отдельный контроллер не нужно, достаточно подготовить шаблон и данные.

  6. Юлия

    Еще один пример (второй пример там же взяла из данной статьи, дополнив его показом запроса для добавления страницы прямо в таблицу категорий).

  7. Админ

    Пример с форума:

    edit page.php

    <div class="page">
      <h1 class="page-title"><?= $page['title'] ?></h1>
    <?= $page['content'] ?>
     
    </div>
    

    mysql hyde_db

    INSERT INTO `site_categories` (`id`, `title`, `content`, `bits`, `module`) VALUES
    ('about', 'About', '<p class="message">...</p>', 16, 'page');
    

    Готово: http://hyde.pageshop.ru/about

    Естественно, страницы можно создавать не только из командной строки, но и, например, в Gency или в phpMyAdmin.

    Значения служебных полей (последние два в примере) можно объявить значениями по умолчанию и полностью их скрыть при помощи представления. Также можно использовать двухуровневые адреса (/page/about), тогда в таблице страниц служебные поля будут не нужны.

    Код page.php – это не упрощение. Содержимое, дополненное находящимися в нем тегами, будет вставлено в общий шаблон таким же способом ($page['content'] будет содержать результат обработки page.php):

    <!DOCTYPE html>
    <html lang="en-us">
     
    <?php include __DIR__.'/includes/head.php'; ?>
     
     
    <body>
     
    <?php include __DIR__.'/includes/sidebar.php'; ?>
     
     
    <div class="content container">
     
    <?= $page['content'] ?>
     
     
    </div>
    </body>
    </html>
    

    Полный код шаблона с дампом таблицы site_categories можно найти в приложении к статье Создаем простой блоговый шаблон.

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

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