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

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

  1. Админ

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

    $r0['module'] = 'exit';
    $r0['bits'] = 32;
    

    В новой схеме будут использоваться только два бита поля bits, а не три, как сейчас: 002 (0) – подключить общий шаблон, 012 (слагаемое 16) – подключить вложенный шаблон модуля и общий шаблон, 102 (слагаемое 32) – подключить основной код модуля, 112 (слагаемое 48) – подключить основной код модуля в контексте открытого соединения с базой данных. Подключение шаблонов в последних двух случаях, возможно, будет происходить на основе значений, возвращаемых при подключении основного кода модуля.

  2. Юлия

    В новой схеме биты 4, 5 определяют «режим подключения файлов»: 002 (0) – подключить основной шаблон; 012 (1) – подключить вложенный и основной шаблоны; 102 (2) – подключить заголовочный файл, затем вложенный и основной шаблоны; 112 (3) – подключить файл с кодом в контексте открытого первичного соединения с базой данных, затем вложенный и основной шаблоны. Сохранена возможность изменять описанный выше порядок непосредственно в подключаемом файле: в заголовочном файле можно запретить подключение вложенного шаблона, а также выполнить выход из приложения; в файле с кодом, работающим в контексте открытого первичного соединения с базой данных, можно разрешить подключение заголовочного файла, либо запретить подключение вложенного шаблона (выполнять выход из приложения в данном контексте не рекомендуется). Также можно изменять порядок и в основном файле движка, например в режимах 2 и 3 при подключении первого файла можно изменить номер режима на 1 или даже на 0 (не меняя при этом значения других битов поля bits, что проще всего сделать, используя операцию «Исключающее ИЛИ»: 2^3=1, 3^2=1, 2^2=0, 3^3=0).

    Во избежание путаницы с номерами режимов разрешений перед номерами режимов подключения файлов можно ставить букву «икс», например x3.

  3. Юлия

    Вышла версия 3.09. В рассылку также включена pre-версия для тех, кто пока не готов к переходу на новую схему подключения файлов.

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

  4. anomal6

    Как лучше использовать mysqli_set_charset внутри функции подключения? Мне это нужно, чтобы в БД занести кириллицу правильно.

  5. Админ

    Если вы не контролируете в полной мере настройки сервера баз данных, использование set_charset обязательно. Функция подключения может быть такой:

    function mysqli_open()
    {
      require PATH.'include/dbconfig.php';
      if (($link = mysqli_connect($host, $user, $pw, $db)) && !$link->set_charset('utf8'))
      {
        $link->close();
        return false;
      }
      return $link;
    }
    
  6. Юлия

    В версии 3.10 появится дополнительная переменная с замыканием для «вычисления» имени таблицы. Предположительно переменная будет называться $table. Она может использоваться прямо в PHP-строке, например:

    // обращение к таблице категорий
    $cat = query("SELECT * FROM `{$table()}` WHERE `id`='$p0'");
    
    // обращение к таблице объектов
    $obj = query("SELECT * FROM `{$table($r0['id'])}` WHERE `id`='$p1'");
    

    Также для данного замыкания будут зарезервированы или определены константы ROOT_TABLE и TABLE_PREFIX со значениями по умолчанию 'site_categories' и 'site_' соответственно.

  7. Юлия

    Вышла версия 3.10, юбилейная, т.к. движку сегодня исполняется 10 лет!

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

    • добавлена переменная $table с замыканием для «вычисления» имени таблицы (смотрите пример использования в предыдущем комментарии);
    • изменен порядок выполнения проверки адреса запроса по заданному шаблону и соединения с базой данных, так что теперь можно добавлять дополнительные проверки адреса в ту же структуру ветвления, находясь вне контекста открытого соединения с базой данных, например «перехватить» запрос к главной странице без соединения с базой данных следующим образом:

      if ($_SERVER['REQUEST_URI'] == '/') { ... }
      elseif (основное условие) { ... }
      else error(404);
      
    • изъято использование переменной $_SERVER['QUERY_STRING'], для получения значения переменной $pn добавлено использование переменной $_GET['p'];
    • незначительно изменены правила внешнего перенаправления в файле .htaccess, прилагаемом к движку.

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

  8. Юлия

    Добавлена новая услуга «Подписка на рассылку G-Drive для изучающих PHP/MySQL» стоимостью 10 руб. Предзаказ можно сделать через форму обратной связи, указав в тексте сообщения фразу «Интересует пакет №14».

    Внимание! В 2021 году стоимость подписки будет увеличена до 100 руб.

  9. Кэт

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

  10. Юлия

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

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

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