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

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

  1. Кэт

    Классный скрипт! Только объясните, как сделать страницу с несколькими объектами.

  2. Юлия

    С несколькими объектами БД? Нужно добавить файл-контроллер для выборки объектов из БД и установить режим подключения файлов x3.

    Если вы хотите, чтобы страницы со списком объектов и с отдельными объектами находились в одной адресной ветви, например /works и /works/1, нужно делать выборку объектов из БД по условию и по этому же условию задавать имя шаблона для страницы со списком объектов (предварительно его создав):

    <?php
    
    if (empty($r1))
    {
      $r0['module'] .= 'list';
    
      if (!$result = mysqli_query($link, "SELECT * FROM `{$table($r0['id'])}`"))
      {
        error(503);
        return; // в данном случае return можно не писать
      }
    }
    

    Также при нахождении страниц со списком объектов и с отдельными объектами в одной адресной ветви нужно установить режим разрешений 2.

    Подробно об этом можно прочитать в статье «Разделение кода модуля между категорией и ее объектами».

    Что касается оформления шаблона, посмотрите цикл while ($row = getrow($result)) в шаблоне из статьи «Как сделать вывод списка статей?». Функцию getrow и способ ее подключения можно найти там же.

  3. Михаил

    Чтобы сгенерировать серию статических 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/
    
  4. Юлия

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

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

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

  5. Юлия

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

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

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

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

  6. Юлия

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

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

  7. Админ

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

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

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

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

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

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

  9. Юлия

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

  10. Юлия

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

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

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

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

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

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

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

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