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

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

  1. Админ

    MySQL поддерживает шестнадцатеричные литералы (в двух нотациях), поэтому номер режима подключения файлов можно указывать в виде старшей цифры двузначного шестнадцатеричного числа, определяющего значение поля bits, например режим x1 может быть установлен посредством значения 0x10. Для установки режима x0 можно не указывать старшую цифру, но только в нотации, не требующей четного количества шестнадцатеричных цифр в числе, например можно использовать значение 0x0, где единственный ноль справа от икса – это младшая цифра, не относящаяся к режиму подключения файлов.

    MySQL также поддерживает и двоичные литералы (тоже в двух нотациях). Т.е. можно указывать значение поля bits в виде двоичного кода, как это сделано в описании, при этом старшие незначащие нули записывать необязательно, например: 0b10000.

  2. anomal6

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

  3. Админ

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

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

    В версии 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_' соответственно.

  5. Юлия

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

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

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

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

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

  6. Юлия

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

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

  7. Кэт

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

  8. Юлия

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

  9. Михаил

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

    В версии 3.11, возможно, появится дополнительная переменная, содержащая имя основного шаблона сайта (без расширения .php). Предположительно переменная будет называться $layout:

    $layout='index';
    

    Подобная переменная уже обсуждалась на нашем сайте (под именем $extra).

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

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