Инструменты пользователя

Инструменты сайта


tmp_teh_zadanie_2_23.07.26_18:04

Это старая версия документа!


структуру каталогов

структуру каталогов
microwiki/
├── assets/                  # СИСТЕМНЫЕ АССЕТЫ ЯДРА (Неизменяемая логика)
│   └── js/
│       ├── media-modal.js   # AJAX-загрузка картинок из модального окна в редакторе
│       └── toolbar.js       # Хоткеи (Ctrl+B/I/U) и асинхронный движок предпросмотра (Preview)
├── conf/                    # Папка конфигурации движка
│   ├── local.php            # Основные настройки сайта (название, язык)
│   └── users.auth.php       # Плоская база пользователей и хэшей паролей
├── data/                    # Данные (в DokuWiki это папка data/)
│   ├── pages/               # Текстовые страницы (.txt)
│   ├── media/               # Каталог картинок и файлов (.png, .jpg, .pdf)
│   ├── attic/               # Старые ревизии страниц
│   └── meta/                # Метаданные и кеш
├── lib/                     # Системные библиотеки и плагины
│   └── tpl/                 # Папка с шаблонами оформления
│       └── default/         # Текущая тема оформления
│           ├── main.php     # Основной каркас
│           ├── header.php   # Верхняя часть и меню
│           ├── footer.php   # Нижняя часть и подпись
│           └── css/
│               └── style.css # ВСЕ стили сайта, монолитного тулбара и синтаксического кода
├── src/                     # Ядро движка (Core)
│   ├── Action/              # Контроллеры (show, edit, media)
│   ├── Auth.php             # Модуль авторизации, сессий и верификации паролей
│   ├── CodeHighlighter.php  # Универсальный динамический парсер раскраски и нумерации кода
│   ├── MediaManager.php     # Файловый менеджер (загрузка, удаление, просмотр)
│   ├── Parser.php           # Вики-парсер
│   ├── Storage.php          # Работа со страницами и ID (разрешение систем имен `:`)
│   ├── Template.php         # Диспетчер вывода контента (страницы, формы правки, медиаменеджер)
│   └── toolbar.php          # HTML-структура кнопок монолитного тулбара и каркас модалки
└── index.php                # Единая точка входа

local.php

local.php
<?php
/**
 * MicroWiki Configuration File
 * Глобальные настройки движка
 */
if (!defined('WIKI_ROOT')) die();
 
$conf['title']    = 'Наша Учебная Вики'; // Название вашей базы знаний
$conf['lang']     = 'ru';                // Язык интерфейса
$conf['template'] = 'default';           // Используемый шаблон
 
// Настройки безопасности и пользователей
$conf['useacl']   = true;                // Включить разграничение прав доступа
$conf['superuser'] = 'admin';            // Имя главного администратора

main.php

main.php
<?php 
if (!defined('WIKI_ROOT')) {
    die('Прямой доступ к файлу запрещен.');
}
 
// Поочередно собираем страницу из изолированных компонентов
tpl_header(); 
tpl_content(); 
tpl_footer(); 

header.php

header.php
<?php if (!defined('WIKI_ROOT')) die(); ?>
<!DOCTYPE html>
<html lang="<?php echo htmlspecialchars($GLOBALS['conf']['lang']); ?>">
<head>
    <meta charset="UTF-8">
    <title><?php tpl_pagetitle(); ?> - <?php echo htmlspecialchars($GLOBALS['conf']['title']); ?></title>
 
    <!-- Абсолютный веб-путь к файлу стилей, чтобы он никогда не терялся -->
    <link rel="stylesheet" href="./lib/tpl/default/css/style.css?v=<?php echo time(); ?>">
    <!-- Подключаем базовую логику редактора -->
<script src="./assets/js/toolbar.js" defer></script>
<!-- Подключаем изолированную логику модального окна загрузки картинок -->
<script src="./assets/js/media-modal.js" defer></script>
 
</head>
<body>
<div class="wrapper">
    <header>
        <div class="logo">
            <a href="?id=start">📝 <?php echo htmlspecialchars($GLOBALS['conf']['title']); ?></a>
        </div>
        <nav>
            <a href="?id=<?php echo urlencode($GLOBALS['ID']); ?>&do=show">Читать</a>
            <a href="?id=<?php echo urlencode($GLOBALS['ID']); ?>&do=edit">Правка</a>
            <a href="?id=<?php echo urlencode($GLOBALS['ID']); ?>&do=media">Медиафайлы</a>
 
            <?php if (auth_is_logged()): ?>
                <span class="user-info">👤 <?php $usr = auth_get_user(); echo htmlspecialchars($usr['name']); ?></span>
                <a href="?id=<?php echo urlencode($GLOBALS['ID']); ?>&do=logout" style="color: #ffb3b3;">Выйти</a>
            <?php else: ?>
                <a href="?id=<?php echo urlencode($GLOBALS['ID']); ?>&do=login">Войти</a>
            <?php endif; ?>
        </nav>
    </header>
    <main>
        <div class="breadcrumbs">Вы здесь: <?php tpl_pagetitle(); ?></div>

footer.php

footer.php
<?php if (!defined('WIKI_ROOT')) die(); ?>
    </main>
    <footer>
        <p>&copy; <?php echo date('Y'); ?> <?php echo htmlspecialchars($GLOBALS['conf']['title']); ?>. Разработано в учебных целях.</p>
    </footer>
</div>
</body>
</html>

style.css

style.css
/* =========================================================================
   1. ГЛОБАЛЬНЫЕ СТИЛИ И КАРКАС ШАБЛОНА САЙТА (MicroWiki Framework)
   ========================================================================= */
body { 
    font-family: Arial, sans-serif; 
    margin: 0; 
    padding: 0; 
    color: #333; 
    background: #f4f6f9; 
}
 
/* Главная центрирующая обертка сайта */
.wrapper { 
    max-width: 1100px; 
    margin: 20px auto; 
    background: #fff; 
    box-shadow: 0 0 15px rgba(0,0,0,0.1); 
    min-height: 90vh; 
    display: flex; 
    flex-direction: column; 
    border-radius: 5px; 
    overflow: hidden; 
}
 
/* Шапка сайта */
header { 
    background: #2b5e8f; 
    padding: 15px 25px; 
    display: flex; 
    justify-content: space-between; 
    align-items: center; 
    color: #fff; 
}
 
header .logo a { 
    font-size: 22px; 
    font-weight: bold; 
    color: #fff; 
    text-decoration: none; 
}
 
/* Меню навигации в шапке */
nav a { 
    margin-left: 15px; 
    color: #fff; 
    text-decoration: none; 
    font-size: 14px; 
    opacity: 0.85; 
    transition: opacity 0.2s; 
    border-bottom: 1px dashed transparent;
    padding-bottom: 2px;
}
 
nav a:hover { 
    opacity: 1; 
    border-bottom-style: solid;
    border-bottom-color: #fff; 
}
 
/* Основной блок контента */
main { 
    padding: 35px; 
    flex-grow: 1; 
    background: #fff; 
}
 
/* Подвал сайта */
footer { 
    background: #f8f9fa; 
    border-top: 1px solid #e9ecef; 
    padding: 20px; 
    text-align: center; 
    font-size: 13px; 
    color: #6c757d; 
}
 
/* Хлебные крошки (Вы здесь) */
.breadcrumbs { 
    font-size: 13px; 
    color: #6c757d; 
    margin-bottom: 25px; 
    padding-bottom: 10px; 
    border-bottom: 1px solid #eee; 
}
 
/* Плашка информации о залогиненном пользователе */
.user-info { 
    margin-left: 15px; 
    font-size: 13px; 
    padding: 4px 10px; 
    background: rgba(0,0,0,0.2); 
    border-radius: 3px; 
    color: #fff; 
    display: inline-block; 
}
 
/* Отрендеренный вики-контент страниц */
.wiki-content h1 { color: #2b5e8f; margin-top: 20px; margin-bottom: 10px; padding-bottom: 5px; border-bottom: 1px solid #eee; }
.wiki-content h2 { color: #333; margin-top: 18px; margin-bottom: 8px; }
.wiki-content h3 { color: #555; margin-top: 15px; margin-bottom: 6px; }
 
/* =========================================================================
   2. КОМПОНЕНТ РЕДАКТОРА И МОНОЛИТНОГО ТУЛБАРA DOKUWIKI С ПИKЕРАМИ
   ========================================================================= */
.wiki-editor-container { 
    margin-top: 15px; 
    display: flex;
    flex-direction: column; 
}
 
.doku-toolbar-container {
    background: #fcfcfc;
    border: 1px solid #ccc;
    border-bottom: none;
    padding: 5px 6px;
    border-top-left-radius: 3px;
    border-top-right-radius: 3px;
    display: flex; 
    flex-wrap: wrap; 
    align-items: center;
    box-sizing: border-box;
    width: 100%;
}
 
.doku-toolbar-group {
    display: flex;
    margin-right: 6px; 
    border-radius: 2px;
    box-sizing: border-box;
}
.doku-toolbar-group:last-child {
    margin-right: 0;
}
 
.doku-btn-ico {
    background: #ffffff;
    background: linear-gradient(to bottom, #ffffff 0%, #f3f3f3 100%);
    border: 1px solid #b8b8b8;
    margin-right: -1px; 
    padding: 0 8px;
    cursor: pointer;
    font-size: 11px;
    font-family: Arial, sans-serif;
    color: #333;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 24px;
    min-width: 26px;
    position: relative;
    box-sizing: border-box;
    outline: none;
}
.doku-toolbar-group .doku-btn-ico:last-child {
    margin-right: 0;
    border-right: 1px solid #b8b8b8;
}
.doku-btn-ico:hover {
    background: linear-gradient(to bottom, #ffffff 0%, #e2e8f0 100%);
    border-color: #888;
    z-index: 2;
}
 
.doku-arrow {
    position: absolute;
    right: 1px;
    bottom: 1px;
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 0 0 3px 3px;
    border-color: transparent transparent #555 transparent;
}
 
/* -------------------------------------------------------------------------
   НОВЫЕ ГОРИЗОНТАЛЬНЫЕ ВЫПАДАЮЩИЕ ПАНЕЛИ (PICKERS)
   ------------------------------------------------------------------------- */
.doku-dropdown {
    position: relative;
    display: inline-block;
    box-sizing: border-box;
}
 
/* Контейнер подменю: раскрывается горизонтально с тенью */
.doku-dropdown-content {
    display: none;
    position: absolute;
    left: 0;
    top: 25px; 
    background-color: #ffffff;
    border: 1px solid #b8b8b8;
    box-shadow: 0px 3px 8px rgba(0,0,0,0.12);
    z-index: 999;
    border-radius: 3px;
    padding: 3px;
}
 
/* Монолитная флекс-лента внутри подменю */
.doku-sub-toolbar {
    display: flex;
    border-radius: 2px;
    overflow: hidden;
}
 
/* Кнопка внутри выпадающей ленты */
.doku-sub-btn {
    background: #ffffff;
    background: linear-gradient(to bottom, #ffffff 0%, #f9f9f9 100%);
    border: 1px solid #c5c5c5;
    margin-right: -1px;
    padding: 0 6px;
    cursor: pointer;
    font-size: 11px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: 22px;
    min-width: 24px;
    box-sizing: border-box;
    outline: none;
}
.doku-sub-toolbar .doku-sub-btn:last-child {
    margin-right: 0;
    border-right: 1px solid #c5c5c5;
}
.doku-sub-btn:hover {
    background: #e6effa;
    border-color: #999;
    z-index: 3;
}
 
/* КЛАСС КРАСИВЫХ CSS-ИКОНОК ФАЙЛОВ КОДА */
.file-ico {
    font-size: 7px;
    font-family: 'Arial Black', sans-serif;
    font-weight: bold;
    width: 15px;
    height: 13px;
    line-height: 14px;
    text-align: center;
    border-radius: 1px;
    color: #fff;
    box-shadow: 0 1px 1px rgba(0,0,0,0.1);
}
.css-html { background: #e34c26; } /* Красный HTML */
.css-php  { background: #4f5b93; } /* Синий PHP */
.css-css  { background: #563d7c; } /* Фиолетовый CSS */
.css-js   { background: #f1e05a; color: #333; } /* Желтый JS */
.css-sql  { background: #00758f; } /* Бирюзовый SQL */
.css-bash { background: #4eaa25; } /* Зеленый Bash */
 
.doku-dropdown-show {
    display: block !important;
}
 
/* Текстовое поле */
.wiki-textarea { 
    width: 100%; 
    height: 380px; 
    padding: 12px; 
    font-family: 'Courier New', monospace; 
    font-size: 14px; 
    box-sizing: border-box; 
    border: 1px solid #ccc; 
    border-bottom-left-radius: 3px; 
    border-bottom-right-radius: 3px; 
    line-height: 1.6; 
    resize: vertical; 
    outline: none;
}
 
 
/* =========================================================================
   3. КНОПКИ УПРАВЛЕНИЯ СНИЗУ И МЕДИА-МЕНЕДЖЕР
   ========================================================================= */
.doku-btn {
    background: #fff;
    border: 1px solid #ccc;
    padding: 4px 14px;
    font-size: 13px;
    color: #333;
    border-radius: 3px;
    cursor: pointer;
    margin-right: 5px;
}
 
.doku-btn:hover {
    background: #eee;
}
 
/* Сетка отображения Медиа-менеджера */
.media-grid { 
    display: grid; 
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); 
    gap: 20px; 
}
 
.media-item { 
    border: 1px solid #eee; 
    padding: 10px; 
    border-radius: 4px; 
    text-align: center; 
    background: #fff; 
    display: flex; 
    flex-direction: column; 
    justify-content: space-between; 
    box-shadow: 0 2px 4px rgba(0,0,0,0.02); 
}
 
/* =========================================================================
   4. СИНТАКСИЧЕСКИЙ БЛОК КОДА DOKUWIKI (ОДИНАКОВЫЙ РАЗМЕР ШРИФТА ДЛЯ ЦИФР)
   ========================================================================= */
.doku-code-block {
    margin: 15px 0;
    position: relative;
    box-sizing: border-box;
    display: block;
    width: 100%;
}
 
.doku-code-file-label {
    display: inline-flex;
    align-items: center;
    background: #f7f9fa;
    border: 1px solid #dcdcdc;
    border-bottom: none;
    padding: 4px 14px;
    font-size: 12px; 
    font-family: Arial, sans-serif;
    color: #2b5e8f;
    border-top-left-radius: 3px;
    border-top-right-radius: 3px;
    margin-left: 10px;
}
 
.doku-code-content-wrapper {
    background: #f7f9fa; 
    border: 1px solid #dcdcdc; 
    border-radius: 3px;
    overflow: hidden;
    width: 100%;
    box-sizing: border-box;
}
 
.doku-code-content {
    margin: 0;
    padding: 8px 0; 
    font-family: 'Consolas', 'Courier New', monospace;
    font-size: 14px; 
    overflow-x: auto;
    background: #f7f9fa;
    line-height: 1.4; 
}
 
.doku-code-content > div {
    display: flex;
    padding: 0px 0; 
    width: 100%;
    box-sizing: border-box;
}
 
/* ИСПРАВЛЕНО: Размер шрифта номеров строк увеличен до 14px (один в один с кодом) */
.code-ln {
    color: #666666;
    width: auto; /* Отменяем жесткий min-width */
    min-width: 25px; /* Минимальный базис для однозначных чисел */
    text-align: right;
    padding-left: 5px; /* Фиксированный зазор до серой линии */
	padding-right: 5px; /* Фиксированный зазор до серой линии */
    margin-right: 12px;  /* Фиксированный зазор от линии до кода */
    border-right: 1px solid #dcdcdc; 
    display: inline-block;
    user-select: none;
    font-size: 14px; 
    box-sizing: border-box;
}
 
.code-txt {
    white-space: pre;
    color: #000000;
    display: inline-block;
}
 
.code-line-active {
    background-color: #fff9db !important;
    width: 100%;
}

local.php

Только авторизованные участники могут оставлять комментарии.
tmp_teh_zadanie_2_23.07.26_18/04.1784819573.txt.gz · Последнее изменение: VladPolskiy

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki