Дизайн Nano-CMS.

Шаблон дизайна.

Обычно все шаблоны представляют собой простой HTML код, с подставленными в него псевдопеременными, выглядящими {так} или ===так===, или %%%этак%%%, или как-то ещё. Что уже не хорошо, ибо это требует дальнейшей подмены псевдопеременных на их значения не очень производительными строковыми функциями. Либо вообще регулярками.

На примере секты ВордПресса мы знаем один из альтернативных путей - конструкции вида <?= $var ?> и прочую мешанину HTML и PHP кода.

Наверное, проще и удобнее вообще не применять никаких шаблонизаторов. Давайте сделаем свой шаблон обычным PHP файлом, с совершенно заурядной структурой, которая схематично показана ниже:

<?php /* Выше этой строки в файле ничего не должно быть */

   
$_s['design']='<!DOCTYPE html>
<html>
<head>
<title>'
.$_s['title'].'</title>
<meta name="Robots" content="index,follow">
<meta name="Resource-type" content="document">
<link href="'
.$_s['loc']['base'].'css/css.css" type="text/css" rel="stylesheet">
<link href="'
.$_s['loc']['base'].'favicon.ico" type="image/x-icon" rel="icon">
</head>
<body>
   <div class="head"><a href="'
.$_s['loc']['base'].'" >Nano-CMS</a></div>
   <div class="body">'
.$_s['content'].'</div>
   <div class="menu">'
.$_s['menu'].'</div>
   <div class="foot">'
.$_s['loc']['host'].' (с) '.date('Y',time()).'</div>
</body>
</html>'
;

/* Ниже этой строки в файле ничего не должно быть. */ ?>

Есть неудобство - внутри шаблона требуется соблюдать синтаксис PHP.

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

Где лучше располагать шаблон дизайна?

Самый простой вариант - в виде модуля _design.php в папке с контентными файлами ./data/content/, либо вложенной в неё папки с документами (так как мы помним, что любой фолдер с документами может иметь собственный дизайн, определяемый как раз модулем шаблона дизайна, лежащим в данном фолдере).

Однако, это будет не совсем правильный подход.
Сразу по нескольким причинам:

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

    Да, пресловутый человеческий фактор.

  2. Кроме того, шаблон дизайна Вы, скорее всего, даже и не сможете редактировать встроенным редактором админки, поскольку все современные браузеры изначально заточены под серфера, а не под нужды вебмастера. В них обильно встраиваются разнообразные защитные механизмы типа XSS Аuditor, которые в коде шаблона дизайна усматривают какую-то угрозу, и физически не дают отправить форму с кодом шаблона. До тех пор, пока Вы не запустите браузер с ключом --disable-xss-auditor либо целым набором подобных ключей, если защитных механизмов в браузере несколько.

Для придания системе дуракоустойчивости автор движка настоятельно рекомендует убрать модуль шаблона дизайна за пределы юрисдикции админов, так, как это сделано в дистрибутиве изначально. Конкретнее, модуль шаблона дизайна сослан в папку ./data/design/, и находится в файле _design_XXX.php, где XXX - персональное имя дизайна. Оно задаётся в файле настроек таким образом:

  'des' => 'XXX',                                   # Имя дизайна.

В папке документов лежит не сам шаблон дизайна, а лишь ссылка на него:

<?php /* Выше этой строки в файле ничего не должно быть */

   
get_design_module($_s['des'],'design');

/* Ниже этой строки в файле ничего не должно быть. */ ?>

Первый аргумент функции сообщает ей имя дизайна из файла настроек.
Можно там написать просто 'XXX' - это и есть имя.
Либо имя другого дизайна, который Вам нужен в данном фолдере.

Второй аргумент функции убеждает её вернуть шаблон дизайна. Тот, что находится по адресу ./data/design/_design_XXX.php, как мы и договорились ранее.

Дизайн комплекта поставки.

Стоит сразу оговорить, что автор движка не ставит своей целью радовать пользователя кучей готовых красивых дизайнов - он не специалист в этой области, и не планирует им становиться. Напротив, автор движка наивно полагает, что любой значимый сайт в обязательном порядке оснащается индивидуальным и уникальным дизайном. Причём именно от дизайна сайта зависит его юзабилити, а как следствие, и поведенческие факторы, на которых целиком держится всё SEO, заточенное под Яндекса. Никакие шаблонные дизайны тут профита не принесут, так что нечего про них и толковать.

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

На авторском сайте исключительно в целях демонстрации присутствуют несколько вариантов оформления. В дистрибутив включены первые пять из них - клик в ссылки открывает данный сайт в новом окне, со сменой его внешнего вида. "Родным" для этого сайта является последняя шкурка, не забудьте кликнуть на неё после всех экспериментов.

  1. Синяя Нана, навигация слева.
  2. Синяя Нана, навигация справа.
  3. Синяя Нана, навигация по бокам.
  4. Синяя Нана, две колонки навигации слева.
  5. Синяя Нана, две колонки навигации справа.
  6. Зелёная Нана с левыми менюшками.
  7. Зелёная Нана с правыми менюшками.
  8. Апельсин. Это родной дизайн данного сайта.