2

モジュール構造を利用したPHPアプリケーションを書いています。モジュールには基本的にフォルダ名があり、それらのフォルダにはPHPファイルが含まれています。

これは次のようになります。

/modules
   /module1
   /module2
   /module3

私のPHPアプリケーションはフォルダーの内容を読み取り、modulesフォルダー名をデータベースのテーブルに保存します。私modulesのテーブルは次のようになります。

id | module  | active | order
1  | module1 | 1      | 2
2  | module2 | 0      | 1
3  | module3 | 1      | 3

フォルダが読み取られ、フォルダ名がデータベースに保存された後modules、テーブルから行を再度フェッチします。そうすれば、どのモジュールがアクティブで、どの順序でそれらを表示する必要があるかを簡単に確認できます。

この方法の問題は、ページにアクセスするたびに上記のすべてを実行する必要があることです。システムは、フォルダがいつmodule追加または削除されたかを認識しないためです。moduleしたがって、「フォルダを読み取る/ DBに保存する/そしてDBを再度読み取る」ことで、最新バージョンが得られるようです。しかし、私はこの方法が非効率的であると想像することができます。これはもっとうまくできると思います。


私が思いついた解決策が1つあります。しかし、私はまだこれが最善の解決策だとは思いません。

解決策1

ユーザーがサイトにアクセスしたら、上記のすべてを実行します。フォルダを読み取り、modulesフォルダ名をテーブルに保存してから(最初にテーブルをクリアした後)、テーブルから行を取得して、に保存しますsession。ユーザーがサイト内を移動するとき、私は単純にを繰り返すことができますsession

短所:削除/追加されたモジュールは、ブラウザを閉じて再度開いたときにのみ表示されます。

改善?

これを行うには、もっとエレガントな方法があると確信しています。誰かアイデアはありますか?

4

1 に答える 1

3

フローは次のようになります。

  1. 管理者がモジュールリストを要求します
  2. スクリプトが既知のディレクトリをスキャンし、使用可能なモジュールのリストを作成します
  3. スクリプトは、データベースからアクティブなモジュールのロード順序を読み取ります
  4. 同じスクリプトでリストが表示され、管理者がモジュールをアクティブ化して順序を定義する機会が与えられます
  5. 最後に、コードの一部がデータベースへの変更をコミットします(存在する場合)

通常のユーザーがページをリクエストしたとき

  1. モジュールサブシステムは、データベースからモジュールの名前と順序を読み取ります
  2. モジュールシステムは、データベースに格納されている名前に基づいて、データベースで定義されている順序で、既知のディレクトリからモジュールをロードします。

これが最も効率的な方法だと思います。

免責事項:私見これは時間の無駄です。実際のフレームワーク、おそらくCakePHPのようなMVCのフレームワーク、またはDrupal、Joomla、Wordpressのような広く使用されているCMSの1つを学ぶ方がよいでしょう。このようにして、1。機能するシステム2.安全なシステム3.再利用可能な知識がられます。学習目的であっても、車輪の再発明をする必要はありません。最終的には、他の人の成功(および失敗)から学ぶことで、プロセスをスピードアップします。

于 2012-09-15T20:30:25.997 に答える