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

Предыдущие 10 комментариев

  1. Михаил

    Чтобы сгенерировать серию статических Web-страниц по шаблону, тоже понадобится индексная страница, т.е. страница со списком. Разместим индексную страницу по адресу /, а шаблонные страницы по адресам формата /page.html, т.е. все страницы будут размешаться в таблице категорий. Т.к. у нас имеются страницы разного типа (индексная и шаблонная), а также несколько однотипных страниц (шаблонные страницы), нужно добавить в таблицу поле module. Для шаблонных страниц в качестве значения этого поля укажем имя page, а для индексной страницы значение поля можно оставить пустым.

    Контроллер индексной (.d.php):

    <?php
    
    if (!$result = mysqli_query($link, "SELECT * FROM `{$table()}` WHERE `id`!=''"))
    {
      error(503);
    }
    

    Шаблон индексной (.php):

    <?php require PATH.'include/getrow.php'; ?>
    <ol>
    <?php while ($row = getrow($result)): ?>
      <li><a href="<?= $row['id'] ?>"><?= $row['name'] ?></a></li>
    <?php endwhile; ?>
    </ol>
    

    Для шаблонных страниц можно использовать шаблон page.php в сочетании с общим шаблоном index.php или полный шаблон страницы в заголовочном файле page.h.php с добавлением в его конец команды exit (см. статью G-Drive. Быстрый старт).

    Для получения готовых html-файлов можно использовать wget:

    wget -r -l1 -omy.log http://localhost/
    
  2. Юлия

    Вышла версия 3.11.

    Добавлена глобальная переменная $layout, содержащая имя основного шаблона (без расширения .php). Также проведена незначительная оптимизация кода.

    Рассылку запущу сегодня или в один из ближайших дней.

  3. Юлия

    Вышла версия 3.12.

    Выполнен незначительный рефакторинг кода. Попробовала заменить глобальную переменную $layout на «изолированную» переменную extra('layout'). В рассылку также включена pre-версия для тех, кто пока не готов отказываться от использования $layout.

    Из официального названия исчезла черточка в соответствии с трендом, зародившимся в 2020 году. Теперь движок можно называть G Drive или Gency Drive.

    Рассылку запущу сегодня или в один из ближайших дней.

  4. Юлия

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

    Возможно, запущу рассылку с таким вопросом.

  5. Админ

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

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

    static $a = ['layout' => 'index'];
    ...
    else $a = ['layout' => 'index'];
    
  6. Михаил

    На выходных обсуждали на php-форуме шаблонизацию. Вспомнилась прежняя семантика битов 4-5:

    • 4 – подключить вложенный шаблон;
    • 5 – подключить контроллер.

    Или наоборот.

  7. Юлия

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

  8. Юлия

    Вышла версия 3.13.

    Улучшен фильтр контроля уникальности идентификатора объекта, используемый при выборе объектов с числовыми идентификаторами в поле id по значению $p1:

    ord($r1['id']) > 57 || strcmp($p1, $r1['id']) == 0
    

    Переменная $p, содержащая полный путь, признана устаревшей. Используйте для получения пути $_SERVER['REQUEST_URI'] или $px.

    Переменная $table, ранее содержащая замыкание для «вычисления» имени таблицы, признана устаревшей. До своего удаления переменная $table будет содержать имя функции table, которая была добавлена. Данную функцию разрешено редактировать. Если данная функция вызывает конфликт имен, ее можно переименовать и поместить новое имя в переменную $table.

    Рассылку запущу сегодня или в один из ближайших дней.

  9. Юлия

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

  10. Юлия

    Простая и достаточно универсальная функция закрытия соединения с базой данных, опирающаяся на значение переменной $link:

    function db_close(&$link)
    {
        if (isset($link))
        {
            $link->close();
            $link = null;
        }
    }
    

    На данный момент я склоняюсь к включению в G Drive именно такой функции.

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

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