Многостраничная админка

Как было указано в других статьях, набор страниц и блоков админки известен заранее, поэтому все страницы должны назначаться автоматически.

Приведенная здесь многостраничная админка строится на собственном внешнем шаблоне, то есть, админка может быть сделана в стиле, отличном от остальных страниц сайта.

Все страницы админки будут собираться на шаблоне admin. Все остальные шаблоны, а именно: шаблон навигации (nav) и содержательные блоки (profiles, orders), нужно поместить в папку admin.

Внешний шаблон админки

admin.tdd

<?php
$titles = [
    1 => 'Блок навигации',
    2 => 'Блок содержательный',
];
$types = [
    1 => 'block(admin/nav,delegate)',
    2 => 'block allow(admin/)',
];
$params = [
    'no-edit-buttons' => true,
];
?>

Файл admin.tpl не приводится.

Шаблон навигации

nav.tdd

<?php
/** 
 * $templates array [$field => [$template, $name]]
 * @var string $template Имя содержательного шаблона
 * @var string $name Название пункта навигации
 */
$templates = [
    1 => ['profiles', 'Мой профиль'],
    2 => ['orders', 'Мои заказы'],
    ...
];
foreach ($templates as $field => $t) {
    # Автоматическое назначение шаблонов внешним блокам и содержательным блоков
    $types[$field] = 'page(admin,new) field2('.$t[0].',new)' 
    $titles[$field] = $t[1];
}
# Передаем данные в шаблон
$GLOBALS['admin/nav']['templates'] = $templates;
?>

nav.tpl

<ul class="nav nav-pills">
    <?php
    foreach ($GLOBALS['admin/nav']['templates'] as $f=>$t) {
        $clas = ($dat[$f]==$page) ? ' class="active"' : '';
        echo'<li'.$clas.'><a href="?page='.$dat[$f].'">'.$t[1].'</a></li>';
    }
    ?>
</ul>

Примечания

  • Шаблоны содержательных блоков не приводятся.
  • Код для установки прав на редактирование содержательных блоков с помощью класса Permission см. в статье Одностраничная админка