Собственный дизайн документов и папок в Nano-CMS.

Собственный дизайн документа.

Как следует из рассказа про шаблон дизайна и процесс построения меню, дизайн этих элементов определяется значением переменной $_s['des']

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

Логично, что придание какого-то особого дизайна отдельному документу возможно достичь через размещение переменной имени дизайна в коде этого документа. Например, так:

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

   
$_s['des']='xxx';
   
$_s['title']='Тайтл документа.';
   
$_s['content']='

<h2>Заголовок документа</h2>

   <p>HTML код документа в соответствующих тегах.</p>

   '
;

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

Собственный дизайн фолдера.

Та же самая логика позволяет заключить, что, разместив переменную имени дизайна в модуле меню данного фолдера, мы применим свой дизайн ко всем документам этого фолдера. Что достигается аналогичным образом:

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

   
$_s['des']='xxx';

   
get_menu_html_code(
      
$_s['des'],
      array(
         
'Заголовок элемента меню' => array(
            
$_s['loc']['base'].'a'.$_s['ext'] => 'Документ a',
            
$_s['loc']['base'].'b'.$_s['ext'] => 'Документ b',
         ),
      )
   );

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

Необходимые элементы:

  1. ./css/xxx.css - CSS файл для дизайна.
  2. ./data/design/_design_xxx.php - файл шаблона дизайна.
  3. ./data/design/_template_xxx.php - файл прочих шаблонов этого дизайна.

Отсчёт путей производится от корневой директории скрипта.
Так, как они видны для движка.

Выборочный дизайн документов при определённых условиях.

На примере этого сайта можно указать ситуации, когда стандартная навигация в виде боковой панельки только мешает. Например, при редактировании документа админкой, где желательно иметь форму редактирования пошире. То же касается формы обратной связи, к примеру говоря.

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

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

   
if (is_admin()) {
      
get_menu_html_code(
         
$_s['des'],
         array(
            
'Админу:' => array(
               
$_s['loc']['base'].'admin/connect'.$_s['ext'] => 'Почта сайта',
               
$_s['loc']['base'].'admin/login'.  $_s['ext'] => 'LogOut',
            ),
         )
      );
      if (
$_s['loc']['file']=='editor'$_s['des'].='-wide';
   } else {
      if (
$_s['loc']['file']=='connect' and count($_POST) < 7$_s['des'].='-wide';
   }

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

Легко видеть, что в фолдере с сервисами мы создаём меню только для авторизованного юзера. В противном случае никакого меню не создаём, и, тем самым, автоматически наследуем его от корневого фолдера документов.

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

Аналогичное действие выполняется и для формы обратной связи, пока она не заполнена и письмо не отправлено (не сформированы элементы массива $_POST). Как только отправка информации произошла, о чём форма обратной связи докладывает на экране, мы возвращаемся к традиционному варианту дизайна, и отрисовываем навигацию, чтобы пользователь имел возможность перейти куда-то дальше. Что уже интересно - один и тот же документ (в том же самом URL-е) может быть представлен в разных вариантах дизайна, в зависимости от действий, выполненных над документом.

Можно выдумать и более изощрённые схемы использования разных вариантов дизайна в пределах одного сайта. Главное, что такая возможность имеется.