2016-09-02 4 views
0

私は自分のCMSを学習目的で(しかも楽しいために)ビルドしましたが、今ではエクステンション(プラグイン)の基本的な形式をサポートするように拡張したいと考えています。私はある種のオブザーバーパターンで作業したいと思っています。具体的には、ある拡張のために拡張子がExtensionManagerで登録されています(例えば、onRenderTitle())。すべての拡張は、システムのすべての拡張に対して実行される1つの必須クラスExtensionDataで構成されます。拡張機能は、コールバックを使用してこのクラスに登録できます(ExtensionManagerはすべてExtensionDataクラスに渡されます)。ホームメイドCMSにエクステンションをインストール

しかし、すべての拡張モジュールはすべてのページ読み込みに自身を登録する必要があります(PHPはすべてのページ読み込みの間に状態を失うため)、パフォーマンス上の問題が発生する可能性があります。

私はこれを完全に間違っていますか?それとも、これは行く方法ですか?拡張機能をサポートするCMSを作成する経験はありません(これは私が習得しようとしているものです)。私はWordpressが拡張機能でどのように動作するのか見てみましたが、どうやってそれらを読み込むのか分かりませんでした。

答えて

1

Wordpressのプラグインは、wp-content/pluginsフォルダに置かれるだけで登録され、メインファイルには必要なdocblockが必要です。また、WPのコンベンションでは、プラグインのメインファイルとプラグインの名前が同じで、.phpという拡張子が付きます。 。

CMSのコアとのやり取りが行われる限り、イベントを発生させるようにシステムを設定することができ、プラグインはイベントを待機します。 WPはアクションとフィルタを使用します。単純なイベントリスナーのためのあなたのコードは、次のようになります:

action('action_name', function() { 
    // some code to be executed after event is fired 
}); 

あなたaction()機能だけでアクションのグローバル配列を更新することができます。イベントを発生させたいときは、割り当てられたアクションの配列をフィルタリングするだけです。

foreach ($actions['action_name'] as $func) { 
    call_user_func($func); 
} 
+0

ありがとう!そして、wpはこれらの拡張をどのようにロードしますか?それはページが読み込まれるたびにそれをしますか? –

+0

私はWPが登録されたプラグインの何らかの種類のキャッシュを使用していると思います。私はあなたの基本的なCMSがプラグインディレクトリを通過してブートストラップに登録するのはまったく問題ないと思います。 –

+0

どうもありがとうございました! :) –

関連する問題