Урок 30

Как улучшить ваш блог

15 мин

Базовый блог готов — что дальше?

У вас есть работающий блог. Но его можно улучшить! Вот идеи для самостоятельной практики.

Комментарии к постам

Позволить посетителям оставлять комментарии.

Что нужно:

  1. Новая таблица comments:
    id, post_id, user_id, content, created_at
  2. Форма комментария на странице поста
  3. Функции getCommentsByPostId(), createComment()
  4. Вывод комментариев под постом

Подсказка по SQL:

SELECT comments.*, users.username 
FROM comments 
JOIN users ON comments.user_id = users.id 
WHERE post_id = ? 
ORDER BY created_at ASC

Теги и категории

Организовать посты по темам.

Что нужно:

  1. Таблица tags: id, name, slug
  2. Таблица связи post_tags: post_id, tag_id
  3. Страница tag.php?slug=php — посты с тегом
  4. Выбор тегов при создании поста

Загрузка изображений

Добавить картинки к постам.

Что нужно:

  1. Поле image в таблице posts
  2. Форма с <input type="file">
  3. Обработка загрузки: $_FILES, проверка типа, сохранение
  4. Папка uploads/ для хранения файлов

Подсказка по PHP:

if (isset($_FILES["image"]) && $_FILES["image"]["error"] === 0) {
    $allowed = ["image/jpeg", "image/png", "image/gif"];
    
    if (in_array($_FILES["image"]["type"], $allowed)) {
        $filename = uniqid() . "_" . $_FILES["image"]["name"];
        move_uploaded_file($_FILES["image"]["tmp_name"], "uploads/" . $filename);
    }
}

Пагинация (постраничная навигация)

Если постов много — разбить на страницы.

Что нужно:

  1. Параметр ?page=2 в URL
  2. Расчёт OFFSET: ($page - 1) * $per_page
  3. Общее количество страниц: ceil($total / $per_page)
  4. Ссылки "← Назад" и "Далее →"

Подсказка:

$page = isset($_GET["page"]) ? max(1, (int)$_GET["page"]) : 1;
$per_page = 10;
$offset = ($page - 1) * $per_page;

$stmt = $pdo->prepare("SELECT * FROM posts ORDER BY created_at DESC LIMIT ? OFFSET ?");
$stmt->execute([$per_page, $offset]);

Поиск по постам

Дать возможность искать посты по ключевым словам.

Что нужно:

  1. Форма поиска в шапке
  2. Страница search.php?q=php
  3. SQL с LIKE

Подсказка:

$query = "%" . $search . "%";
$stmt = $pdo->prepare("
    SELECT * FROM posts 
    WHERE title LIKE ? OR content LIKE ?
    ORDER BY created_at DESC
");
$stmt->execute([$query, $query]);

WYSIWYG редактор

Вместо обычного textarea — редактор с форматированием.

Варианты:

  • TinyMCE — популярный и бесплатный
  • CKEditor — мощный редактор
  • Quill — современный и лёгкий

Как подключить TinyMCE:

<script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/6/tinymce.min.js"></script>
<script>
    tinymce.init({
        selector: "textarea[name=content]",
        height: 400
    });
</script>
Важно: При использовании WYSIWYG нужно аккуратно обрабатывать HTML. Используйте библиотеку вроде HTML Purifier для фильтрации опасного кода.

Приоритеты улучшений

С чего начать:

  1. Пагинация — просто и полезно
  2. Поиск — базовая функциональность
  3. Комментарии — делает блог интерактивным
  4. Загрузка картинок — визуальное улучшение
  5. Теги — навигация по темам
Практика — лучший учитель!
Выберите одно улучшение и реализуйте его. Это закрепит ваши навыки лучше любого урока.

Мы используем файлы cookie для улучшения работы сайта и персонализации контента. Продолжая использовать сайт, вы соглашаетесь с использованием cookies в соответствии с нашей Политикой конфиденциальности.