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

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


software:development:demo:cms:ucms:creating_sample_install_php_setting

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


Редактора стилей шаблона install.php

Введение

README.txt
/**
 * ЛОГИКА РАБОТЫ ТЕКСТОВОГО РЕДАКТОРА CSS (edit_css.php)
 * 
 * Файл предназначен для прямого редактирования кода install.css через браузер.
 * 
 * 1. ИНИЦИАЛИЗАЦИЯ И ПУТИ:
 *    - Скрипт работает с двумя файлами: рабочим (install.css) и эталонным (default_install.css).
 *    - Переменная $message служит для накопления статусов операций (успех/ошибка).
 * 
 * 2. ОБРАБОТКА КОМАНД (POST-запросы):
 *    - ПРИОРЕТЕТ СБРОСА (reset_default): Если нажата кнопка «По умолчанию», скрипт 
 *      игнорирует содержимое текстового поля и полностью перезаписывает рабочий CSS 
 *      данными из эталонного файла. Это «аварийный» метод восстановления верстки.
 *    - СОХРАНЕНИЕ (css_content): Если сброс не инициирован, скрипт берет текст из 
 *      textarea и записывает его в рабочий файл. Перед записью выполняется проверка 
 *      is_writable(), чтобы избежать фатальных ошибок PHP при отсутствии прав доступа (CHMOD).
 * 
 * 3. ПОДГОТОВКА ДАННЫХ (ЧТЕНИЕ):
 *    - После выполнения команд (или при первом открытии) файл читается заново.
 *    - Содержимое пропускается через htmlspecialchars(). Это критически важно, так как 
 *      CSS может содержать спецсимволы, которые браузер может принять за HTML-теги, 
 *      что «сломает» форму или создаст уязвимость.
 * 
 * 4. ИНТЕРФЕЙС И ГЕОМЕТРИЯ:
 *    - Использован фиксированный контейнер (max-width: 700px) с центрированием через 
 *      margin: auto для обеспечения визуального порядка.
 *    - Управление реализовано через стандартные HTML-формы: кнопка «По умолчанию» 
 *      имеет атрибут 'name', что позволяет PHP отличить её нажатие от простого сохранения.
 *    - Кнопка «Отмена» является обычной ссылкой, прерывающей работу редактора без POST-запроса.
 */
setting_install_windows.php
<?php
$cssFile = __DIR__ . '/css/install.css';
$defaultFile = __DIR__ . '/css/default_install.css';
$message = '';
 
// 1. ЛОГИКА СБРОСА: Если нажата кнопка "Восстановить по умолчанию"
if (isset($_POST['reset_default'])) {
    if (file_exists($defaultFile)) {
        $defaultContent = file_get_contents($defaultFile);
        if (is_writable($cssFile)) {
            file_put_contents($cssFile, $defaultContent);
            $message = '<p class="msg ok">Стили восстановлены из файла по умолчанию!</p>';
        } else {
            $message = '<p class="msg err">Ошибка: Нет прав на запись в install.css</p>';
        }
    } else {
        $message = '<p class="msg err">Ошибка: Файл по умолчанию не найден.</p>';
    }
}
 
// 2. ЛОГИКА СОХРАНЕНИЯ: Если форма отправлена вручную
if (isset($_POST['css_content']) && !isset($_POST['reset_default'])) {
    if (is_writable($cssFile)) {
        file_put_contents($cssFile, $_POST['css_content']);
        $message = '<p class="msg ok">Файл успешно сохранен!</p>';
    } else {
        $message = '<p class="msg err">Ошибка: Файл недоступен для записи.</p>';
    }
}
 
// 3. ЧТЕНИЯ: Получаем актуальное содержимое
$content = file_exists($cssFile) ? htmlspecialchars(file_get_contents($cssFile)) : '';
?>
 
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Редактор стилей</title>
    <style>
        body { font-family: sans-serif; background: #f4f4f4; margin: 0; padding: 20px; }
 
        /* Центрирование контейнера (700px) */
        .editor-container { 
            max-width: 700px; 
            margin: 0 auto; 
            background: #fff; 
            padding: 20px; 
            border-radius: 8px; 
            box-shadow: 0 4px 15px rgba(0,0,0,0.1); 
        }
 
        h3 { margin-top: 0; color: #333; font-size: 18px; }
        textarea { width: 100%; height: 450px; font-family: monospace; font-size: 13px; padding: 10px; border: 1px solid #ccc; box-sizing: border-box; resize: vertical; }
 
        .controls { margin-top: 15px; display: flex; gap: 10px; align-items: center; }
 
        button { padding: 10px 15px; border: none; border-radius: 4px; cursor: pointer; color: white; font-weight: bold; }
        .btn-save { background: #2e7d32; }
        .btn-reset { background: #d32f2f; }
        .btn-back { color: #666; text-decoration: none; font-size: 14px; margin-left: auto; }
 
        button:hover { opacity: 0.9; }
        .msg { font-size: 14px; margin-bottom: 10px; }
        .ok { color: green; }
        .err { color: red; }
    </style>
</head>
<body>
 
<div class="editor-container">
    <h3>Редактор: css/install.css</h3>
 
    <?= $message ?>
 
    <form method="post">
        <textarea name="css_content"><?= $content ?></textarea>
 
        <div class="controls">
            <!-- Кнопка сохранения -->
            <button type="submit" class="btn-save">Сохранить</button>
 
            <!-- Кнопка сброса (без JS) -->
            <button type="submit" name="reset_default" class="btn-reset" onclick="return confirm('Восстановить исходные стили?')">По умолчанию</button>
 
            <!-- Ссылка отмены -->
            <a href="install.php" class="btn-back">Отмена</a>
        </div>
    </form>
</div>
 
</body>
</html>
Только авторизованные участники могут оставлять комментарии.
software/development/demo/cms/ucms/creating_sample_install_php_setting.1777970560.txt.gz · Последнее изменение: VladPolskiy

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