slogan3

Help me een contentversiesysteem implementeren in mijn CodeIgniter-toepassing

description

Het implementeren van een contentversiesysteem stelt je in staat een geschiedenis van wijzigingen bij te houden, eerdere versies gemakkelijk te herstellen en de samenwerking tussen teamleden die aan inhoud werken te verbeteren.

prompt

try_prompt

Gids me door het proces van het implementeren van een contentversiesysteem in mijn CodeIgniter-project. Beschrijf hoe ik wijzigingen in mijn inhoud kan volgen, verschillend ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Het implementeren van een contentversiesysteem in je CodeIgniter 4.0-project voor blogberichten omvat verschillende stappen. Hier is een stapsgewijze gids: 1. Databaseontwerp Maak een aparte tabel voor het bijhouden van versies, bijvoorbeeld `blog_versions`. Deze tabel bevat: - `id` (primaire sleutel) - `blog_id` (verwijst naar de originele blogpost) - `titel` - `inhoud` - `aangemaakt_op` (timestamp) - `versie_nummer` - Eventueel gebruiker die de versie heeft gemaakt Voorbeeld SQL: ```sql CREATE TABLE blog_versions ( id INT AUTO_INCREMENT PRIMARY KEY, blog_id INT NOT NULL, titel VARCHAR(255), inhoud TEXT, aangemaakt_op TIMESTAMP DEFAULT CURRENT_TIMESTAMP, versie_nummer INT, FOREIGN KEY (blog_id) REFERENCES blogs(id) ); ``` 2. Aanpassen van je Model Maak een model voor de `blog_versions` tabel: ```php namespace App\Models; use CodeIgniter\Model; class BlogVersionsModel extends Model { protected $table = 'blog_versions'; protected $primaryKey = 'id'; protected $allowedFields = ['blog_id', 'titel', 'inhoud', 'versie_nummer', 'aangemaakt_op']; } ``` 3. Versiebeheer implementeren in je Controller Bij elke update van een blogpost: - Sla de huidige versie op in `blog_versions`. - Verhoog het `versie_nummer`. - Update de originele blogpost. Voorbeeld: ```php // Haal de originele blog op $blogModel = new \App\Models\BlogModel(); $blogVersionModel = new \App\Models\BlogVersionsModel(); $blog = $blogModel->find($blogId); // Bepaal nieuw versienummer $latestVersion = $blogVersionModel->where('blog_id', $blogId)->orderBy('versie_nummer', 'DESC')->first(); $nieuwVersieNummer = $latestVersion ? $latestVersion['versie_nummer'] + 1 : 1; // Sla de huidige inhoud op in de versietabel $blogVersionModel->insert([ 'blog_id' => $blogId, 'titel' => $blog['titel'], 'inhoud' => $blog['inhoud'], 'versie_nummer' => $nieuwVersieNummer ]); // Update de originele blogpost $blogModel->update($blogId, [ 'titel' => $nieuwetitel, 'inhoud' => $nieuweInhoud ]); ``` 4. Eerdere versies bekijken en herstellen Maak een overzichtspagina van alle versies: ```php $versies = $blogVersionModel->where('blog_id', $blogId)->orderBy('versie_nummer', 'DESC')->findAll(); ``` Voor herstel: ```php // Kies een versie om te herstellen $versie = $blogVersionModel->find($versieId); // Herstel in de hoofdblog $blogModel->update($blogId, [ 'titel' => $versie['titel'], 'inhoud' => $versie['inhoud'] ]); ``` 5. User Interface - Voeg opties toe op je beheerpagina om versies te bekijken en te herstellen. - Toon een lijst met versienummers, datums en eventueel verschil-vergelijkingen. 6. Extra overwegingen - Overweeg automatische versies bij elke wijziging. - Implementeer een limiet voor het aantal opgeslagen versies. - Voeg beveiliging toe zodat alleen geautoriseerde gebruikers versies kunnen beheren. Door deze stappen te volgen, kun je effectief wijzigingen bijhouden, verschillende versies beheren en indien nodig eerdere versies herstellen in je CodeIgniter 4.0-blogproject.
provider: deepseek
model: deepseek-chat
Hier is een stapsgewijze handleiding voor het implementeren van een contentversiesysteem in CodeIgniter 4.0 voor blogberichten: ## 1. Database Structuur Maak eerst de benodigde database tabellen aan: ```sql -- Blogberichten tabel CREATE TABLE blog_posts ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, author_id INT NOT NULL, status ENUM('draft', 'published') DEFAULT 'draft', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- Content versies tabel CREATE TABLE content_versions ( id INT PRIMARY KEY AUTO_INCREMENT, post_id INT NOT NULL, version_number INT NOT NULL, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, author_id INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (post_id) REFERENCES blog_posts(id) ON DELETE CASCADE ); ``` ## 2. Model Classes **BlogModel.php** ```php <?php namespace App\Models; use CodeIgniter\Model; class BlogModel extends Model { protected $table = 'blog_posts'; protected $primaryKey = 'id'; protected $allowedFields = ['title', 'content', 'author_id', 'status']; protected $useTimestamps = true; public function saveWithVersion($data) { $db = db_connect(); $db->transStart(); // Sla het huidige bericht op if (isset($data['id']) && !empty($data['id'])) { $this->update($data['id'], $data); $postId = $data['id']; } else { $postId = $this->insert($data); } // Maak een nieuwe versie $versionModel = new ContentVersionModel(); $versionModel->createVersion($postId, $data); $db->transComplete(); return $postId; } } ``` **ContentVersionModel.php** ```php <?php namespace App\Models; use CodeIgniter\Model; class ContentVersionModel extends Model { protected $table = 'content_versions'; protected $primaryKey = 'id'; protected $allowedFields = ['post_id', 'version_number', 'title', 'content', 'author_id']; protected $useTimestamps = true; public function createVersion($postId, $data) { // Bepaal het volgende versienummer $lastVersion = $this->where('post_id', $postId) ->orderBy('version_number', 'DESC') ->first(); $versionNumber = $lastVersion ? $lastVersion['version_number'] + 1 : 1; // Sla de versie op return $this->insert([ 'post_id' => $postId, 'version_number' => $versionNumber, 'title' => $data['title'], 'content' => $data['content'], 'author_id' => $data['author_id'] ?? session()->get('user_id') ]); } public function getVersionsByPost($postId) { return $this->where('post_id', $postId) ->orderBy('version_number', 'DESC') ->findAll(); } public function restoreVersion($versionId) { $version = $this->find($versionId); if (!$version) { return false; } $blogModel = new BlogModel(); $blogModel->update($version['post_id'], [ 'title' => $version['title'], 'content' => $version['content'] ]); // Maak een nieuwe versie van de restore $this->createVersion($version['post_id'], [ 'title' => $version['title'] . ' (Hersteld)', 'content' => $version['content'], 'author_id' => session()->get('user_id') ]); return true; } } ``` ## 3. Controller **BlogController.php** ```php <?php namespace App\Controllers; use App\Models\BlogModel; use App\Models\ContentVersionModel; class BlogController extends BaseController { public function savePost() { $blogModel = new BlogModel(); $data = [ 'title' => $this->request->getPost('title'), 'content' => $this->request->getPost('content'), 'author_id' => session()->get('user_id'), 'status' => $this->request->getPost('status') ]; if ($this->request->getPost('id')) { $data['id'] = $this->request->getPost('id'); } $postId = $blogModel->saveWithVersion($data); return redirect()->to('/blog/edit/' . $postId) ->with('success', 'Bericht opgeslagen met versiebeheer'); } public function viewVersions($postId) { $versionModel = new ContentVersionModel(); $blogModel = new BlogModel(); $data = [ 'post' => $blogModel->find($postId), 'versions' => $versionModel->getVersionsByPost($postId) ]; return view('blog/versions', $data); } public function restoreVersion($versionId) { $versionModel = new ContentVersionModel(); if ($versionModel->restoreVersion($versionId)) { return redirect()->back()->with('success', 'Versie succesvol hersteld'); } return redirect()->back()->with('error', 'Fout bij herstellen versie'); } public function compareVersions($version1Id, $version2Id) { $versionModel = new ContentVersionModel(); $data = [ 'version1' => $versionModel->find($version1Id), 'version2' => $versionModel->find($version2Id) ]; return view('blog/compare', $data); } } ``` ## 4. Views **blog/versions.php** ```php <h3>Versiegeschiedenis voor: <?= $post['title'] ?></h3> <table class="table"> <thead> <tr> <th>Versie</th> <th>Titel</th> <th>Datum</th> <th>Acties</th> </tr> </thead> <tbody> <?php foreach ($versions as $version): ?> <tr> <td>v<?= $version['version_number'] ?></td> <td><?= substr($version['title'], 0, 50) ?>...</td> <td><?= date('d-m-Y H:i', strtotime($version['created_at'])) ?></td> <td> <a href="<?= site_url('blog/restore-version/' . $version['id']) ?>" class="btn btn-warning btn-sm" onclick="return confirm('Weet je zeker dat je deze versie wilt herstellen?')"> Herstellen </a> <a href="<?= site_url('blog/view-version/' . $version['id']) ?>" class="btn btn-info btn-sm"> Bekijken </a> </td> </tr> <?php endforeach; ?> </tbody> </table> ``` ## 5. Routes Voeg deze routes toe in **app/Config/Routes.php**: ```php $routes->post('blog/save', 'BlogController::savePost'); $routes->get('blog/versions/(:num)', 'BlogController::viewVersions/$1'); $routes->get('blog/restore-version/(:num)', 'BlogController::restoreVersion/$1'); $routes->get('blog/compare/(:num)/(:num)', 'BlogController::compareVersions/$1/$2'); ``` ## 6. Gebruik in Formulier **blog/edit.php** ```php <form method="post" action="<?= site_url('blog/save') ?>"> <input type="hidden" name="id" value="<?= $post['id'] ?? '' ?>"> <div class="form-group"> <label>Titel</label> <input type="text" name="title" class="form-control" value="<?= $post['title'] ?? '' ?>" required> </div> <div class="form-group"> <label>Inhoud</label> <textarea name="content" class="form-control" rows="10" required> <?= $post['content'] ?? '' ?> </textarea> </div> <button type="submit" class="btn btn-primary">Opslaan met Versie</button> <?php if (isset($post['id'])): ?> <a href="<?= site_url('blog/versions/' . $post['id']) ?>" class="btn btn-secondary">Versiegeschiedenis</a> <?php endif; ?> </form> ``` ## Belangrijke Kenmerken: 1. **Automatische Versie Creatie**: Elke keer dat een bericht wordt opgeslagen, wordt een nieuwe versie gemaakt 2. **Versie Herstel**: Mogelijkheid om naar eerdere versies terug te keren 3. **Volledige Geschiedenis**: Alle wijzigingen worden bijgehouden 4. **Transactionele Operaties**: Database transacties zorgen voor data-integriteit 5. **Flexibele Uitbreiding**: Eenvoudig aan te passen voor andere content types Dit systeem biedt een solide basis voor content versiebeheer in je CodeIgniter 4.0 project!