OctureCMS:プラグインの拡張性とプラグインの実用的なソフトウェアの削除の詳細な調査
開発者は一般に、使いやすくスケーラブルなCMSを好みます。 OctureCmsは、最初にシンプルさの概念を順守し、開発者とユーザーに心地よい体験をもたらします。この記事では、10月の拡張機能のいくつかを示し、単純なプラグインを使用した別のプラグインの機能を拡張します。
キーポイント
- OctureCMSは、プラグインを介して拡張機能を許可しながら、シンプルで使いやすいCMSを提供します。このスケーラビリティは、他の開発者プラグインの機能の変更を含む、開発者がCMSの内部メカニズムに侵入できる程度に反映されます。
- RainLabブログプラグインを使用すると、記事を作成して、さまざまなカテゴリに割り当てることができます。このチュートリアルでは、このプラグインを拡張し、ソフト削除機能を追加し、記事が永続的に削除されないようにする方法を示していますが、代わりに「削除」と記録されたタイムスタンプとしてマークします。
- ソフト削除機能を作成するには、新しいプラグインを作成し、データベースにフィールドを追加する必要があります。このフィールドは、記事の削除のタイムスタンプを保存します。プラグインは、記事リストを拡張してこの新しいフィールドを列として含めるように拡張し、削除された記事を表示または非表示にするフィルターを追加します。
deleted_at
ソフト削除関数を作成する最後のステップは、記事の削除操作をインターセプトし、 - 列を更新することです。これは、雄弁さによってトリガーされた
deleted_at
イベントに接続し、レコードの削除を妨げることによって行われます。代わりに、deleting
フィールドは現在のタイムスタンプに更新され、レコードは保存されます。deleted_at
各CMSには、プラットフォームの機能を拡張するプラグインシステムがあり、CMSの内部メカニズムに侵入できる範囲でそのスケーラビリティを測定します。ただし、CMS自体だけでなく、プラグインについても話しています!
プラグインを構築する場合、他の開発者があなたの機能の一部を変更できることを確認する必要があります。たとえば、リスト内の記事を選択して記事を公開できるブログプラグインがあります。新しい記事が公開されたことを示すためにイベントをトリガーするのが最善です。別の開発者はこのイベントにマウントし、電子メールで購読者に通知できます!
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(); } }他の開発者は、このイベントを聴いて、公開された記事を処理することができます。
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); }); }); });主にイベントを使用して、リクエストサイクルのさまざまな部分にフックします。よりよく理解するために、具体的な例から始めましょう。
rainLabブログプラグイン
しばらくの間OctureCMSを使用している場合は、RainLabブログプラグインについて知っておく必要があります。バックエンドに記事を追加してカテゴリに添付することができ、コンポーネントを使用してフロントエンドに表示できます。
記事リストページで、記事を削除できます。しかし、それらをそっと削除したい場合はどうなりますか?これを行うことができるかどうかを見て、10月のスケーラビリティについて詳しく知りましょう。
新しいプラグインを作成
足場アシスタントコマンドを使用してデモ用の新しいプラグインを作成し、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(); } }
拡張データベースモード
ソフト削除について話すとき、最初に思い浮かぶのは、データベースに存在する必要があるdeleted_at
フィールド列です。
フォルダーの下にblogplus/updates
という名前の新しいファイルを作成し、create_posts_deleted_at_field.php
ファイルを更新します。 version.yaml
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クラスの移行
テーブルを変更し、rainlab_blog_posts
列を追加します。変更を有効にするために、deleted_at
コマンドを実行することを忘れないでください。 php artisan plugin:refresh rafie.blogplus
次に、ディスプレイのためにリストに列としてフィールドを追加する必要があります。 OctureCMSは、現在表示されているウィジェットをマウントして変更するイベントを提供します(バックエンドリストはウィジェットと見なされます)。
# updates/version.yaml 1.0.1: - First version of blogplus. - create_posts_deleted_at_field.php注:上記のコードは
メソッドに配置する必要があります。 Plugin@boot
メソッドを使用して既存の列を削除することもできます。使用可能な列オプションのリストについては、ドキュメントを確認してください。 removeColumn
記事リストの上部にある列を使用すると、ユーザーは日付、カテゴリなどを使用してリストをフィルタリングできます。私たちの場合、削除された記事を表示/非表示にするためのフィルターが必要です。
# 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'); }); } }ドキュメントのリストフィルターの詳細を読むことができます。上記のコードは非常に簡単で、いくつかのオプションしか含まれていません。ただし、
属性は、scope
モデルインスタンスで定義されているクエリスコープメソッドの名前である必要があります。 Models\Post
OctunRainextensionExtendENDABLETRAIT特性は、新しい方法、属性、動作などを追加して既存のクラスを動的に拡張するための
MAGICメソッドを提供します。この例では、スコープフィルターを処理するために記事モデルに新しいメソッドを追加する必要があります。
// 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
などについても同じことができます。記事リストを更新して、変更が機能するかどうかを確認しましょう。 asExtension
もちろん、最後の部分を完了する必要があるため、削除された記事はまだありません。記事の削除操作を傍受し、
ヒント:scope
プロパティを使用する代わりに、条件を使用して、単純な条件を指定できます。次のコードは、モデルスコープを使用するのと同じように機能します。
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(); } }
雄弁イベント
雄弁さは、各操作に関する一連のイベント(作成、更新、削除など)をトリガーします。この場合、削除イベントにフックし、レコードの削除を防ぐ必要があります。
レコードを削除すると、実際の削除操作が実行される前にイベントがトリガーされ、その後deleting
イベントがトリガーされます。 deleted
イベントでfalseを返すと、操作は中止されます。 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); }); }); });これで、最終結果をテストする準備ができました!いくつかのレコードを削除し続け、記事リストページに移動して、リスト内の削除されたアイテムを切り替えることができるかどうかを確認します。
結論
この記事では、10月のプラットフォームのさまざまな部分を拡張する方法の簡単な概要を説明します。詳細については、ドキュメントの拡張機能プラグインセクションをご覧ください。ご質問やコメントがある場合は、以下にメッセージを残してください!
10月の拡張とソフト削除プラグインの構築に関するFAQ
10月のソフトウェア削除プラグインの目的は何ですか?
10月のソフト削除プラグインは、永続的なデータ損失を防ぐように設計されています。レコードを削除すると、データベースから完全に削除されるわけではありません。代わりに、a
タイムスタンプがレコード用に設定されています。これは、アプリケーションの観点から、レコードは「削除」されていると見なされますが、必要に応じて取得できることを意味します。これは、データが誤って削除される可能性があるシナリオで特に役立ちます。これは、簡単に回復できるためです。
deleted_at
ソフト削除とハード削除の違いはどうですか?
ハード削除はデータベースから永久にレコードを削除し、バックアップがない限り復元できません。一方、ソフト削除は削除されたレコードを単にマークし、実際にはデータベースから削除しません。これにより、必要に応じてレコードを回復できます。
10月にソフト削除関数を実装する方法は?
10月にソフト削除機能を実装するには、プラグインを作成する必要があります。これには、新しいプラグインの作成、データベーステーブルへの
列の追加、モデルを更新して特性を使用することが含まれます。その後、モデルのdeleted_at
メソッドを使用して、レコードを柔らかく削除し、SoftDeletes
メソッドを使用して回復できます。 delete
restore
10月のソフト削除関数をテストする方法は?
ユニットテストを作成して、ソフト削除関数をテストできます。これには、新しいテストケースの作成、データベースに新しいレコードの作成、柔らかく削除され、データベースにまだ存在するが、削除されているとマークされていると主張することが含まれます。
既存のレコードでソフト削除関数を使用できますか?
はい、既存のレコードでソフト削除関数を使用できます。既存のデータベーステーブルに
列を追加するだけです。既存のすべてのレコードのこの列には、値が削除されていないことを示します。 deleted_at
10月にソフト削除されたレコードを回復するにはどうすればよいですか?
ソフト削除されたレコードを回復するには、モデルでrestore
メソッドを使用できます。これにより、レコードからdeleted_at
タイムスタンプが削除され、効果的に「整理」します。
10月のソフト削除レコードを永続的に削除できますか?
はい、モデルのforceDelete
メソッドを使用してソフト削除されたレコードを永続的に削除できます。これにより、ハード削除のようにデータベースからレコードが削除されます。
10月のソフト削除レコードを含むすべてのレコードを表示する方法は?
ソフト削除レコードを含むすべてのレコードを表示するには、モデルでwithTrashed
メソッドを使用できます。これにより、ソフト削除されているかどうかにかかわらず、すべてのレコードが返されます。
10月の列の列の名前をカスタマイズできますか? deleted_at
はい、モデルのメソッドを上書きすることにより、getDeletedAtColumn
列の名前をカスタマイズできます。 deleted_at
がお客様のニーズに適していない場合、これにより、異なる列名を使用できます。 deleted_at
はい、モデルの
メソッドを使用して、一部のレコードに対してソフト削除を無効にすることができます。これにより、Soft Delete機能から特定のレコードを除外できます。 withoutGlobalScope
以上が10月の拡張 - ソフトディレットプラグインを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
