


Erweiterung Oktobercms - Erstellen eines Plugins mit weichem Delete
OktoberCMS: Eingehende Exploration der Plug-in-Erweiterbarkeit und praktische Softwareentfernung von Plug-in
Entwickler bevorzugen im Allgemeinen leicht zu bedienende und skalierbare CMs. Octioncms hält sich zunächst an das Konzept der Einfachheit und bringt Entwicklern und Benutzern eine angenehme Erfahrung ein. Dieser Artikel zeigt einige der erweiterbaren Merkmale von Oktobercms und erweitert die Funktionalität eines anderen Plug-Ins mit einem einfachen Plug-In.
Schlüsselpunkte
- OctoberCMS bietet ein einfaches und benutzerfreundliches CMS und ermöglicht gleichzeitig Extensionen durch Plug-Ins. Diese Skalierbarkeit spiegelt sich in dem Ausmaß wider, in dem Entwickler die internen Mechanismen von CMS durchdringen können, einschließlich der Änderung der Funktionen anderer Entwickler-Plug-Ins.
- Mit dem Rainlab -Blog -Plugin können Sie Artikel erstellen und verschiedenen Kategorien zuweisen. In diesem Tutorial wird gezeigt, wie dieses Plugin erweitert wird, weiche Löschfunktionen hinzufügen und verhindern, dass Artikel dauerhaft gelöscht werden, sie aber stattdessen als "gelöscht" markieren und Zeitstempel aufnehmen.
- Um eine Soft Delete-Funktion zu erstellen, müssen Sie ein neues Plug-In erstellen und der Datenbank ein
deleted_at
Feld hinzufügen. In diesem Feld wird der Zeitstempel für den Artikel gelöscht. Das Plugin erweitert dann die Artikelliste um dieses neue Feld als Spalte und fügt einen Filter hinzu, um gelöschte Artikel anzuzeigen oder auszublenden. - Der letzte Schritt beim Erstellen einer Soft -Löschen -Funktion besteht darin, den Löschvorgang des Artikels abzufangen und die Spalte
deleted_at
zu aktualisieren. Dies geschieht durch Anbringen an das durch eloquent ausgelöstedeleting
-Ergniszung, wodurch die Löschung von Datensätzen verhindert wird. Stattdessen wird das Felddeleted_at
auf den aktuellen Zeitstempel aktualisiert und der Datensatz wird gespeichert.
Einführung
Jedes CMS verfügt über ein Plug-in-System, um die Funktionalität der Plattform zu erweitern, und wir messen seine Skalierbarkeit durch das Ausmaß, in dem wir die internen Mechanismen des CMS durchdringen können. Wir sprechen jedoch nicht nur über das CMS selbst, sondern auch über die Plug-Ins!
Wenn Sie ein Plugin erstellen, müssen Sie sicherstellen, dass andere Entwickler einige Ihrer Funktionen ändern können. Zum Beispiel haben wir ein Blog -Plugin, in dem Benutzer Artikel veröffentlichen können, indem sie Artikel in der Liste auswählen. Es ist am besten, ein Ereignis auszulösen, um anzuzeigen, dass ein neuer Artikel veröffentlicht wurde. Ein anderer Entwickler kann dieses Ereignis anbringen und Abonnenten per E -Mail benachrichtigen!
class Posts extends Controller { public function index_onPublish() { if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) { foreach ($checkedIds as $postId) { if ((!$post = Post::find($postId)) || !$post->canEdit($this->user)) continue; $post->publish(); Event::fire('rainlab.blog.posts.published', [$post]); } Flash::success('Successfully published those posts.'); } return $this->listRefresh(); } }
Andere Entwickler können diese Veranstaltung anhören, um veröffentlichte Artikel zu verarbeiten.
Event::listen('rainlab.blog.posts.published', function($post) { User::subscribedTo($post)->each(function($user) use($post) { Mail::send('emails.notifications.post-published', ['user' => $user, 'post' => $post], function($message) use($user, $post) { $message->from('us@example.com', 'New post by ' . $user->name); $message->to($user->email); }); }); });
Wir werden hauptsächlich Ereignisse verwenden, um an verschiedene Teile des Anforderungszyklus zu hängen. Beginnen wir mit einem konkreten Beispiel, um besser zu verstehen.
Rainlab Blog Plugin
Wenn Sie Oktobercms für eine Weile verwendet haben, müssen Sie das Rainlab -Blog -Plugin kennen. Sie können Artikel im Backend hinzufügen und an Kategorien anhängen. Sie können mit Komponenten in der Frontend angezeigt werden.
Auf der Artikelliste können wir den Artikel löschen. Aber was ist, wenn wir sie sanft löschen wollen? Mal sehen, ob wir dies tun und mehr über die Skalierbarkeit von Oktobercms erfahren können.
Erstellen Sie ein neues Plug-In
Erstellen Sie ein neues Plugin für unsere Demo mit dem Befehl scastolding -Assistent und aktualisieren Sie die Plugin -Details in der Datei plugin.php.
class Posts extends Controller { public function index_onPublish() { if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) { foreach ($checkedIds as $postId) { if ((!$post = Post::find($postId)) || !$post->canEdit($this->user)) continue; $post->publish(); Event::fire('rainlab.blog.posts.published', [$post]); } Flash::success('Successfully published those posts.'); } return $this->listRefresh(); } }
erweiterten Datenbankmodus
Wenn Sie über eine weiche Löschung sprechen, ist das erste, was mir in den Sinn kommt, die Feldspalte deleted_at
, die in der Datenbank vorhanden sein muss.
Erstellen Sie eine neue Datei mit dem Namen blogplus/updates
unter dem Ordner create_posts_deleted_at_field.php
und aktualisieren Sie die version.yaml
-Datei.
Event::listen('rainlab.blog.posts.published', function($post) { User::subscribedTo($post)->each(function($user) use($post) { Mail::send('emails.notifications.post-published', ['user' => $user, 'post' => $post], function($message) use($user, $post) { $message->from('us@example.com', 'New post by ' . $user->name); $message->to($user->email); }); }); });
php artisan create:plugin rafie.blogplus
Migrieren Sie die Klasse ändert die Tabelle rainlab_blog_posts
und fügt unsere Spalte deleted_at
hinzu, die standardmäßig null ist. Vergessen Sie nicht, den Befehl php artisan plugin:refresh rafie.blogplus
zu führen, um die Änderungen in Kraft zu setzen.
erweiterte Artikelliste
Als nächstes müssen wir unsere Felder als Spalten zur Anzeige zur Liste hinzufügen. OctoberCMS bietet uns ein Ereignis, um das derzeit angezeigte Widget zu montieren und zu ändern (die Backend -Liste wird als Widget angesehen).
# updates/version.yaml 1.0.1: - First version of blogplus. - create_posts_deleted_at_field.php
Hinweis: Der obige Code sollte in der Methode Plugin@boot
platziert werden.
Wir haben eine IF -Anweisung, um zu verhindern, dass unser Code auf jeder Seite ausgeführt wird, und dann dem Listen -Widget eine neue Spalte hinzufügen, und wir können auch die Methode removeColumn
verwenden, um vorhandene Spalten zu löschen. Überprüfen Sie die Dokumentation für eine Liste der verfügbaren Spaltenoptionen.
erweitertes Filter
Die Spalte oben in der Artikelliste ermöglicht es Benutzern, Listen mit Daten, Kategorien usw. zu filtern, usw. In unserem Fall brauchen wir einen Filter, um gelöschte Artikel anzuzeigen/auszublenden.
# updates/create_posts_deleted_at_field.php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePostsDeletedAtField extends Migration { public function up() { Schema::table('rainlab_blog_posts', function (Blueprint $table) { $table->timestamp('deleted_at')->nullable()->default(null); }); } public function down() { Schema::table('rainlab_blog_posts', function (Blueprint $table) { $table->dropColumn('deleted_at'); }); } }
Sie können mehr über Listenfilter in der Dokumentation lesen. Der obige Code ist recht einfach und enthält nur wenige Optionen. Das scope
-attribut sollte jedoch der Name der in der Models\Post
-Modellinstanz definierten Abfragemethode sein.
Extensible Class
OktoberRaineSextextendabletrait -Merkmal liefert eine magische Methode, um vorhandene Klassen dynamisch zu erweitern, indem neue Methoden, Attribute, Verhaltensweisen usw. hinzugefügt werden. In unserem Beispiel müssen wir dem Artikelmodell eine neue Methode hinzufügen, um unseren Bereichsfilter zu verarbeiten.
// plugin.php 在Plugin类的boot方法中 Event::listen('backend.list.extendColumns', function ($widget) { if (!($widget->getController() instanceof \Rainlab\Blog\Controllers\Posts)) { return; } $widget->addColumns([ 'deleted_at' => [ 'label' => 'Deleted', 'type' => 'date', ], ]); });
, addDynamicProperty
usw. tun. Lassen Sie uns unsere Artikelliste aktualisieren, um festzustellen, ob unsere Änderungen funktionieren. asExtension
aktualisieren. deleted_at
Tipp: Anstatt die Eigenschaft scope
zu verwenden, können Sie die Bedingungen verwenden, um einen einfachen Zustand anzugeben. Der folgende Code funktioniert genauso wie die Verwendung des Modellbereichs.
class Posts extends Controller { public function index_onPublish() { if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) { foreach ($checkedIds as $postId) { if ((!$post = Post::find($postId)) || !$post->canEdit($this->user)) continue; $post->publish(); Event::fire('rainlab.blog.posts.published', [$post]); } Flash::success('Successfully published those posts.'); } return $this->listRefresh(); } }
eloquentes Ereignis
eloquent löst eine Reihe von Ereignissen bei jedem Vorgang aus (erstellen, aktualisieren, löschen usw.). In diesem Fall müssen wir uns an das Löschenereignis anschließen und die Löschung des Datensatzes verhindern.
Beim Löschen eines Datensatzes wird das -Erdition ausgelöst, bevor der tatsächliche Löschvorgang durchgeführt wird, und das Ereignis deleting
wird danach ausgelöst. Wenn Sie im Ereignis deleted
false zurückgeben, wird die Operation abbrechen. deleting
Event::listen('rainlab.blog.posts.published', function($post) { User::subscribedTo($post)->each(function($user) use($post) { Mail::send('emails.notifications.post-published', ['user' => $user, 'post' => $post], function($message) use($user, $post) { $message->from('us@example.com', 'New post by ' . $user->name); $message->to($user->email); }); }); });
Schlussfolgerung
Dieser Artikel bietet einen kurzen Überblick darüber, wie die verschiedenen Teile der OctionCMS -Plattform erweitert werden können. Sie können mehr darüber im Abschnitt Extension Plugin der Dokumentation erfahren. Wenn Sie Fragen oder Kommentare haben, hinterlassen Sie bitte eine Nachricht unten!
FAQs über die Erweiterung von Oktobercms und das Erstellen von Soft -Löschen -Plugins
Was ist der Zweck des Softwareentfernungs-Plug-Ins in Oktobercms?
Das Soft-Löschen-Plug-In im Oktober ist so konzipiert, dass ein dauerhafter Datenverlust verhindern wird. Wenn Sie einen Datensatz löschen, wird er nicht vollständig aus der Datenbank gelöscht. Stattdessen wird ein
Zeitstempel für den Datensatz eingestellt. Dies bedeutet, dass der Datensatz aus Sicht der Anwendung als "gelöscht" angesehen wird, aber bei Bedarf weiterhin abgerufen werden kann. Dies ist besonders nützlich in Szenarien, in denen Daten versehentlich gelöscht werden können, da dies eine einfache Wiederherstellung ermöglicht. deleted_at
Hartes Löschen löscht dauerhafte Datensätze aus der Datenbank und kann nicht wiederhergestellt werden, es sei denn, Sie haben eine Sicherung. Auf der anderen Seite markiert die Soft -Löschung den Datensatz einfach als gelöscht und löscht ihn nicht aus der Datenbank. Auf diese Weise können Sie bei Bedarf Datensätze wiederherstellen.
So implementieren Sie Soft Delete -Funktion in Oktobercms?
Um Soft Delete-Funktion in Oktobercms zu implementieren, müssen Sie ein Plug-In erstellen. Dies beinhaltet das Erstellen eines neuen Plugins, das Hinzufügen von Spalten
in die Datenbanktabelle und die Aktualisierung Ihres Modells für die Verwendung deleted_at
Merkmal. Sie können dann die Methode SoftDeletes
auf dem Modell verwenden, um den Datensatz sanft zu löschen und die delete
-Methode zu verwenden, um ihn wiederherzustellen. restore
Sie können die Funktion Soft Delete testen, indem Sie Unit -Tests erstellen. Dies beinhaltet das Erstellen eines neuen Testfalls, das Erstellen eines neuen Datensatzes in der Datenbank, das Löschen von sanftem Löschen und die Behauptung, dass sie in der Datenbank noch vorhanden ist, aber als gelöscht markiert wird.
Kann ich die Funktion Soft Delete mit vorhandenen Datensätzen verwenden?
Ja, Sie können die Funktion Soft Delete mit vorhandenen Datensätzen verwenden. Sie müssen nur die Spalte
zur vorhandenen Datenbanktabelle hinzufügen. Diese Spalte für alle vorhandenen Datensätze hat einen deleted_at
-Wergue, der angibt, dass sie nicht gelöscht wurden. null
Wie kann ich in Oktobercms sanft gelöschte Datensätze wiederherstellen?
Um soft gelöschte Datensätze wiederherzustellen, können Sie die restore
-Methode auf dem Modell verwenden. Dadurch wird der Zeitstempel deleted_at
aus dem Datensatz entfernt, effektiv "undelete".
Kann ich im Oktober -CCMS dauerhaft weiche gelöschte Datensätze löschen?
Ja, Sie können mithilfe der forceDelete
-Methode auf dem Modell sanft gelöschte Datensätze dauerhaft löschen. Dadurch werden Datensätze aus der Datenbank wie eine harte Löschung gelöscht.
Wie kann man alle Datensätze anzeigen, einschließlich sanft gelöschter Datensätze in Oktobercms?
Um alle Datensätze anzuzeigen, einschließlich sanft gelöschter Datensätze, können Sie die Methode withTrashed
für das Modell verwenden. Dadurch werden alle Datensätze zurückgegeben, unabhängig davon, ob sie weich gelöscht wurden oder nicht.
Kann ich den Namen der Spalte deleted_at
in Oktobercms anpassen?
Ja, Sie können den Namen der Spalte getDeletedAtColumn
anpassen, indem Sie die Methode deleted_at
im Modell überschreiben. Wenn deleted_at
nicht für Ihre Anforderungen geeignet ist, können Sie verschiedene Spaltennamen verwenden.
Kann ich die Funktion der Soft -Löschen für bestimmte Datensätze in Oktobercms deaktivieren?
Ja, Sie können Soft Delete für einige Datensätze unter Verwendung der withoutGlobalScope
-Methode auf dem Modell deaktivieren. Auf diese Weise können Sie bestimmte Datensätze von der Funktion "Soft Delete" ausschließen.
Das obige ist der detaillierte Inhalt vonErweiterung Oktobercms - Erstellen eines Plugins mit weichem Delete. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











In PHP sollten die Funktionen für Passwort_Hash und passwart_verify verwendet werden, um sicheres Passwort -Hashing zu implementieren, und MD5 oder SHA1 sollte nicht verwendet werden. 1) Passwort_hash generiert einen Hash, der Salzwerte enthält, um die Sicherheit zu verbessern. 2) Passwort_Verify prüfen Sie das Passwort und sicherstellen Sie die Sicherheit, indem Sie die Hash -Werte vergleichen. 3) MD5 und SHA1 sind anfällig und fehlen Salzwerte und sind nicht für die Sicherheit der modernen Passwort geeignet.

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

PHP wird in E-Commerce, Content Management Systems und API-Entwicklung häufig verwendet. 1) E-Commerce: Wird für die Einkaufswagenfunktion und Zahlungsabwicklung verwendet. 2) Content -Management -System: Wird für die Erzeugung der dynamischen Inhalte und die Benutzerverwaltung verwendet. 3) API -Entwicklung: Wird für die erholsame API -Entwicklung und die API -Sicherheit verwendet. Durch Leistungsoptimierung und Best Practices werden die Effizienz und Wartbarkeit von PHP -Anwendungen verbessert.

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1.PHP eignet sich für eine schnelle Entwicklung und Wartung großer Webanwendungen. 2. Python dominiert das Gebiet der Datenwissenschaft und des maschinellen Lernens.

Die Verwendung von Vorverarbeitungsanweisungen und PDO in PHP kann SQL -Injektionsangriffe effektiv verhindern. 1) Verwenden Sie PDO, um eine Verbindung zur Datenbank herzustellen und den Fehlermodus festzulegen. 2) Erstellen Sie Vorverarbeitungsanweisungen über die Vorbereitungsmethode und übergeben Sie Daten mit Platzhaltern und führen Sie Methoden aus. 3) Abfrageergebnisse verarbeiten und die Sicherheit und Leistung des Codes sicherstellen.
