Как создаются отдельные страницы товаров на сайте с множеством страниц?

Я планирую создать сайт-доску объявлений в рамках учебного проекта. На этом сайте пользователи смогут заполнять форму, после чего будет создана страница с их объявлением, а также карточка, которая отобразится на главной странице. У меня не возникает трудностей с созданием карточек, но я не совсем понимаю, как реализовать саму страницу с объявлением. Нужно ли для этого делать отдельную вёрстку? <br/> <br/> Я хотел бы разобраться в этом процессе и сделать так, чтобы каждое отдельное объявление можно было находить через поисковик. При этом я предпочитаю использовать на фронте только HTML, CSS и JS без фреймворков для учебных целей. <br/> <br/> Можете посоветовать, с какой стороны подойти к этой задаче? Возможно, есть какие-то ресурсы, которые я не нашёл, где описано, как это сделать? Мне кажется, что это вполне реализуемо, учитывая, что Авито существовал до появления React – значит, каким-то образом это можно было реализовать.
  • 30 января 2025 г. 5:14
Ответы на вопрос 3
Создание отдельной страницы для каждого объявления на сайте-доске объявлений — это классическая задача, и ее можно реализовать без использования современных фреймворков. Главное — правильно организовать структуру и логику работы вашего сайта. Вот несколько шагов, которые могут помочь вам в этом процессе:

### 1. Структура страниц

Сначала вам нужно определить, как будет выглядеть отдельная страница объявления. Это может быть отдельный HTML-шаблон, который будет загружаться при переходе по ссылке на объявление.

Например:
- **Главная страница** (`index.html`)
- **Страница объявления** (`item.html`)

### 2. Генерация уникальных URL

Каждое объявление должно иметь уникальный идентификатор, по которому будет формироваться URL. Например, если у вас есть объявление с ID 123, его URL может быть `item.html?id=123`.

### 3. Хранение данных

Данные о объявлениях можно хранить, например, в формате JSON или у вас может быть серверная часть (например, на Node.js), которая будет взаимодействовать с базой данных. Для простоты, на первом этапе можно использовать локальный JSON-файл:
```json
[
  {"id": 1, "title": "Объявление 1", "description": "Описание объявления 1"},
  {"id": 2, "title": "Объявление 2", "description": "Описание объявления 2"}
]
```

### 4. Загрузка объявления на страницу

Для загрузки объявления на `item.html` вам потребуется использовать JavaScript. При загрузке страницы нужно будет извлечь ID объявления из URL, а затем найти соответствующее объявление в вашем JSON-файле и отобразить его на странице.

Пример кода:
```html
<!-- item.html -->
<script>
  // Функция для извлечения параметров из URL
  function getQueryParam(param) {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get(param);
  }

  // Функция для загрузки объявления
  async function loadItem() {
    const itemId = getQueryParam('id');
    const response = await fetch('data/items.json'); // Ваш файл с данными
    const items = await response.json();
    const item = items.find(i => i.id == itemId);

    if (item) {
      document.getElementById('item-title').textContent = item.title;
      document.getElementById('item-description').textContent = item.description;
    } else {
      document.getElementById('item-title').textContent = 'Объявление не найдено';
    }
  }

  window.onload = loadItem;
</script>

<div>
  <h1 id="item-title"></h1>
  <p id="item-description"></p>
</div>
```

### 5. SEO-оптимизация

Чтобы ваши страницы можно было находить через поисковики:
- Убедитесь, что у каждой страницы есть уникальный заголовок (`<title>`).
- Используйте мета-теги описания для каждой страницы.
- Настройте правильные URL, как упоминалось раньше (preferably "Человекопонятные" URLs).

### 6. Вёрстка страницы

Для вёрстки страницы объявления вы можете использовать HTML и CSS. Пример структуры может быть следующий:

```html
<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <title>Объявление</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div>
    <h1 id="item-title"></h1>
    <p id="item-description"></p>
  </div>
</body>
</html>
```

### Ресурсы

- [MDN Web Docs](https://developer.mozilla.org/) — отличное место для изучения HTML, CSS и JS.
- [FreeCodeCamp](https://www.freecodecamp.org/) — множество бесплатных курсов по веб-разработке.

### Conclusion

Ваша задача вполне выполнима, и даже без фреймворков можно создать простую, но работоспособную систему для отображения объявлений. Удачи в вашем учебном проекте!
Берете любой учебный проект для создания интернет-магазина на чистом наборе PHP-MySQL-JS-CSS. 
По своей структуре он будет на 80% для вашей учебной задачи.
Похожие функции будут:
- Авторизация пользователя.
- Каталог товаров - у вас просто переименуется в каталог объявлений.
- Карточка товара - карточка объявления.
- Добавление в корзину - то же самое, что бронирование объявления.

Вам из проекта магазина нужно понять, как вообще работать со списком карточек чего-либо, и как делать с ними простые операции - добавление, редактирование, удаление, изменение определенного состояния.
А для своей предметной области вы адаптируете эту механику и роли пользователей.
Можете посоветовать как к этому подойти? Может есть какие-то источники, которые я не смогла найти, где говорится, как это делать? Мне кажется, что это возможно, потому что Авито был до того как появился реакт, как-то же это сделали
Почти любой современный сайт состоит из 2 основных частей: Фронтэнда и бэкэнда. Фронт - то что отображается в окне браузера, бэк - серверная часть, отвечающая за чтение, изменение и сохранение данных, которые можно вывести для клиента в любой удобной форме. По этому для реализации вашего проекта понадобятся знания не только верстки и js, нужно будет и разобраться с серверной частью, которая обычно состоит из движка на каком-то языке, подходящем для веб разработки (PHP, Pyton, Java, JS...) и базы данных, где будут храниться собственно данные о пользователях, объявлениях, просмотрах и т.д.

Может есть какие-то источники, которые я не смогла найти, где говорится, как это делать?
А искали ?
Похожие вопросы