Как реализовать "журнал событий"?

Ссылка скопирована
1 ответ

Как реализовать "журнал событий"?

Мне нужно реализовать этот журнал событий, в котором мне нужно трекать следующие действия с вакансиями: создание, редактирование, смена статуса(активна, скрыта), удаление, предложения вакансии соискателю. Структуру таблицы для событий я примерно представляю, загвоздка в другом. Мне нужно сделать их мультиязычными, и я ума не приложу как это сделать. То ли хранить в колонке типа JSONB вариации перевода сообщения, а при генерации события эти поля забивать(так на фронте их будет выводить проще), то ли на фронте отслеживать действие и в зависимости от него выводить подходящий шаблон. Больше конечно склоняюсь к первому. Еще думаю что мне в решении этого вопроса помогут встроенные в Laravel: События и Слушатели. Буду рад любой помощи и подсказке

Дополнительно:

Выделить варианты сообщений и писать в лог только ID. Прочие подробности сообщения (вроде названия отредактированной вакансии) писать в другую ячейку, которая переводиться не будет.

Ответы:

В базе храните ключи (enum) типа действия.
Добавьте ключи в локализацию.
Добавьте cast в модель и измените toArray() (метод сериализации) чтобы возвращал локализованные значения.
пример enum

enum JournalAction: string {     case Edit = 'edit';     case Add = 'add';      public function translated($replacements=[]): string     {         return Lang::get('journal.' . $this->value,...$replacements);     } }

enum JournalAction: string { case Edit = 'edit'; case Add = 'add'; public function translated($replacements=[]): string { return Lang::get('journal.' . $this->value,...$replacements); } }

Идентификаторы вакансии и пользователя храните в поле jsonb. (как делать их локализацию - совсем другой вопрос). Хранение их локализованного значения в журнале в виде строк может стать проблемой когда название или имя изменится (или из локализация).

https://laravel-auditing.com/

Позволяет записывать все изменения моделей автоматически, а дальше просто выводи в том виде в котором нужно

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Роман IT Ответ

Для реализации "журнала событий" веб-приложении можно использовать базу данных для хранения информации о каждом событии. В данном случае, я рассмотрю пример реализации "журнала событий" на PHP с использованием MySQL базы данных.

1. Создание таблицы для хранения событий в базе данных:

CREATE TABLE events (
    id INT AUTO_INCREMENT PRIMARY KEY,
    event_name VARCHAR(255),
    event_description TEXT,
    event_date TIMESTAMP
);

CREATE TABLE events ( id INT AUTO_INCREMENT PRIMARY KEY, event_name VARCHAR(255), event_description TEXT, event_date TIMESTAMP );

2. Добавление нового события в журнал:

function addEvent($eventName, $eventDescription) {
    $conn = new mysqli("localhost", "username", "password", "database");
 
    $eventName = $conn->real_escape_string($eventName);
    $eventDescription = $conn->real_escape_string($eventDescription);
 
    $sql = "INSERT INTO events (event_name, event_description, event_date) VALUES ('$eventName', '$eventDescription', NOW())";
    $result = $conn->query($sql);
 
    if ($result) {
        echo "Event added successfully";
    } else {
        echo "Error: " . $conn->error;
    }
 
    $conn->close();
}

function addEvent($eventName, $eventDescription) { $conn = new mysqli("localhost", "username", "password", "database"); $eventName = $conn->real_escape_string($eventName); $eventDescription = $conn->real_escape_string($eventDescription); $sql = "INSERT INTO events (event_name, event_description, event_date) VALUES ('$eventName', '$eventDescription', NOW())"; $result = $conn->query($sql); if ($result) { echo "Event added successfully"; } else { echo "Error: " . $conn->error; } $conn->close(); }

3. Получение всех событий из журнала:

function getEvents() {
    $conn = new mysqli("localhost", "username", "password", "database");
 
    $sql = "SELECT * FROM events ORDER BY event_date DESC";
    $result = $conn->query($sql);
 
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            echo "Event ID: " . $row["id"] . "<br>";
            echo "Event Name: " . $row["event_name"] . "<br>";
            echo "Event Description: " . $row["event_description"] . "<br>";
            echo "Event Date: " . $row["event_date"] . "<br><br>";
        }
    } else {
        echo "No events found";
    }
 
    $conn-&gt;close();
}

function getEvents() { $conn = new mysqli("localhost", "username", "password", "database"); $sql = "SELECT * FROM events ORDER BY event_date DESC"; $result = $conn-&gt;query($sql); if ($result-&gt;num_rows &gt; 0) { while($row = $result-&gt;fetch_assoc()) { echo "Event ID: " . $row["id"] . "<br>"; echo "Event Name: " . $row["event_name"] . "<br>"; echo "Event Description: " . $row["event_description"] . "<br>"; echo "Event Date: " . $row["event_date"] . "<br><br>"; } } else { echo "No events found"; } $conn-&gt;close(); }

4. Вызов функций добавления и получения событий:

// Добавление нового события
addEvent("New Event", "Description of the new event");
 
// Получение всех событий
getEvents();

// Добавление нового события addEvent("New Event", "Description of the new event"); // Получение всех событий getEvents();

Это базовый пример реализации "журнала событий" на PHP с использованием MySQL базы данных. В зависимости от требований проекта, функциональности могут быть расширены или изменены.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно