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

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

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

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

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

  • разместить полный шаблон в заголовочном файле и добавить в его конец код завершения приложения (команду exit);
  • разместить полный шаблон в заголовочном файле, оставив в файле общего шаблона только код завершения приложения или полностью очистив его;
  • разместить полный шаблон в файле вложенного шаблона, оставив в файле общего шаблона только код для вывода результата выполнения вложенного шаблона, т.е. значения $page['content'].

Для создания страницы, доступной по адресу /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 обязательно берется из вложенного шаблона).

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

  1. Всеволод

    Мне нужно добавить дополнительный общий шаблон, но так чтобы можно было работать с вложенными шаблонами, как и раньше.

    Вы написали, что можно изменить код движка, но как именно? Я могу это сделать и сам, но хотелось бы увидеть ваши рекомендации.

  2. Админ

    Устарело. Укажите в последней строке кода движка в качестве имени шаблона не 'index.php', а, например, $extra.'index.php' (вместо использования $extra можете определить специальную переменную для этих целей – смотрите начало кода движка и начало функции error) и изменяйте в коде модуля значение переменной $extra, добавляя в нее нужный префикс имени файла альтернативного шаблона.

    Актуально. Посмотрите мой следующий комментарий, касающийся использования переменной $extra.

    Если требуется только один альтернативный шаблон, можно использовать для его подключения установленный бит 7 поля bits. Назначение данного бита не строго регламентировано в описании, к тому же можно совместить его предполагаемое назначение и его использование в качестве селектора шаблона, если вы хотите использовать альтернативный шаблон для какого-то закрытого раздела сайта. Примеры формирования имени шаблона:

    // 0.php или 1.php (если не установлены биты старше 7-го)
    require PATH.($r0['bits']>>7).'.php';
    
    // 0.php или 128.php
    require PATH.($r0['bits']&128).'.php';
    
  3. Михаил

    Если вернуться к разговору об использовании полных шаблонов, то в последней строке кода движка вместо 'index.php' можно написать $r0['module'].'.php' и отказаться от использования вложенных шаблонов (можно даже удалить код для работы с вложенными шаблонами, расположенный перед последней строкой кода движка), заменив их полными.

  4. Админ

    Начиная с версии 3.08, для добавления префикса имени файла альтернативного шаблона вместо переменной $extra следует использовать одноименную функцию, например:

    extra('template-prefix','my_');
    

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

    require PATH.extra('template-prefix').'index.php';
    
  5. Админ

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

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

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

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

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

  6. Habina

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

  7. Админ

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

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

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

  8. Михаил

    Вчера на серче появилась тема, в которой спрашивали про простой фреймворк для формирования однотипных станиц на основе шаблонного файла, в который бы «вносились тайтл, текст и фотка». Я посоветовал использовать для этого G-Drive и какую-нибудь оболочку для работы с БД, а для загрузки фото – файл-менеджер хостинг-панели, чтобы не писать CRUD, загрузку файлов и авторизацию (Gency я не предлагал). В вопросе также говорилось о необходимости создания статического html-файла после первоначального ввода упомянутых выше данных. Я предложил заменить последнюю строку основного файла движка на такой код:

    ob_start();
    require PATH.'index.php';
    file_put_contents(ROOT_PATH.$page['id'],$file=ob_get_clean());
    
    echo $file;
    

    Или вынести данный код в финальный обработчик (при этом, естественно, следует использовать другое имя шаблонного файла).

    В вопросе говорилось о том, что корректировать html-файл пользователь уже будет вручную. Но я предложил просто удалять этот файл, а редактировать данные в БД, чтобы обновленный файл создавался повторно и его содержимое соответствовало данным в БД.

  9. Михаил

    Вариант без использования переменной $file:

    ob_start();
    require PATH.'index.php';
    file_put_contents(ROOT_PATH.$page['id'],ob_get_contents());
    
    echo ob_get_clean();
    

    Можно использовать выражение (strlen($page['id'])?$page['id']:'index.html') вместо $page['id'] для учета главной страницы.

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

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