ホームページ > バックエンド開発 > PHPチュートリアル > thinksns のコア アーキテクチャとディレクトリ構造_PHP チュートリアル

thinksns のコア アーキテクチャとディレクトリ構造_PHP チュートリアル

WBOY
リリース: 2016-07-15 13:21:37
オリジナル
926 人が閲覧しました

コアとサービス、パブリック モデル、プラグイン、ウィジェット、およびサードパーティ ライブラリが一緒になってシステムの基盤を形成し、その上に他のすべてのアプリケーションが構築されます。

用語の説明
コア: ThinkPHP フレームワークから派生し、MVC 分離や基礎となるデータベース サポートなどのコア機能をシステムに提供し、システムの他の部分で使用するための便利なクラス ライブラリと関数ライブラリを多数提供します。 /core/ ディレクトリにあります。
サービス: 特定の関数をカプセル化する一連のグローバル クラス ライブラリ。電子メール送信 (Mail)、ユーザー認証 (Passport) など、/addons/services/ ディレクトリにあります。
パブリック モデル: グローバルな一般モデルのセット。アタッチメント モデル (AttachModel)、エリア モデル (AreaModel) など、/addons/models/ ディレクトリにあります。
プラグイン: 特定の機能を実現するために追加されるプログラム ファイル。 /addons/plugins/ ディレクトリにあり、サードパーティ プラットフォームのログイン プラグインとメダルが含まれています。
ウィジェット: 任意の HTML ページで呼び出すことができるコード ブロックのセット。 /addons/widgets/ ディレクトリにあり、Comment、SelectFriend などが含まれます。
サードパーティ ライブラリ: 他のオープンソースのサードパーティ ライブラリ。 phpmailer など、/addons/libs/ ディレクトリにあります。
アプリケーション: 上記のシステム構造に基づいて構築された、特定の機能を実装する独立したモジュール。ブログ、写真などの /apps/ ディレクトリにあります。
API: アプリケーション プログラミング インターフェイス。 Weibo API、ユーザー プロファイル API など、/api/ ディレクトリにあります。
------------------------------------------------- -------------------------------------------------- ----------------------------------
ウェイボー
Weibo は (図 1 に示すように) システムの独立したアプリケーションとしても表示されますが、システムのコア アプリケーションの役割も担っています。多くのシステム要素は完全に Weibo アプリケーション上に構築されています。たとえば、Weibo ウィジェット (つまり、「共有」機能) は Weibo を直接操作しますが、WAP アプリケーションは完全に Weibo API アーキテクチャを使用します。
ローミングプラットフォーム
システム アプリケーションのもう 1 つの特殊なケースは、ローミング アプリケーションです。ローミング アプリケーションは Kangsheng のローミング プラットフォームから取得されます。ローミング プラットフォームの URL は ThinkSNS のディレクトリ構造とは完全に異なる UCHome のディレクトリ構造に従って生成されるため、ローミング プラットフォームの移植性を考慮する必要があります。標準の ThinkSNS2.0 コアは、ローミング アプリケーション内に実装されたフレームワークの最小限のバージョンを使用します。
テンプレート開発者の場合は、特に注意する必要があります。パブリックディレクトリのヘッダーとページの左側を変更した後、ローミング下のヘッダーとページの左側も変更する必要があるためです
(/apps/myop/themes/classic/ ディレクトリにあります)。
------------------------------------------------- -------------------------------------------------- --------------------------------------
ディレクトリ構造
SNS2.0を考える
§─ _runtime ------------- ランタイムキャッシュ
─ アドオン ------------- 拡張ライブラリ
│ §─ ライブラリ ------------- サードパーティ ライブラリ
│ §─ モデル ------------- 公開モデル
│ §─ プラグイン ------------- プラグイン
│ │ §─ ログイン ------------- サードパーティプラットフォームのログインプラグイン
│ │ §─ メダル ------------- メダル
│ │ └─ タグ ------------- タグ
│ §─ サービス ------------- システムサービス
│ └─ ウィジェット ------------- システムウィジェット
─ API ------------- API ライブラリ
─ アプリ ------------- システム アプリケーション
│ §─ 管理人 ------------- 運営経歴
│ §─ ホーム ------------- ホームアプリ
│ §─ myop ------------- ローミング アプリケーション
│ §─ wap ------------- モバイル WAP 端末
│ └─ weibo ------------- Weibo アプリケーション
─ コア ------------- コア
│ §─ sociax ------------- システムコアファイル
│ §─ ThinkPHP ------------- ThinkPHP コア
│ └─ sociax.php ------------- コアブートファイル
─ データ ------------- サイトデータ
─ インストール ------------- システムインストールファイル
─公開
│ §─ 管理者 ------------- 管理者のバックエンド スタイル
│ §─ js ------------- システムJSライブラリ
│ └─ テーマ ------------- システムテンプレート
─ access.php ------------- ノード権限制御ファイル
─ cleancache.php ------------- キャッシュクリーニングファイル
─ config.inc.php ------------- サイト設定ファイル
─index.php ------------- サイトエントリーファイル
─ shorturl.php ------------- ショートアドレスファイル
└──thumb.php ------------- サムネイル自動生成ファイル
------------------------------------------------- -------------------------------------------------- ------------------------
アプリケーションのアーキテクチャとディレクトリ構造
アプリディレクトリの場所と構造:
SNS2.0を考える
§─ アプリ
§─アプリ
§─ Appinfo ------------- インストール情報、インストールおよびアンインストールの実行ファイル、アイコン
─ 共通 ----------─ 関数ライブラリ common.php
─ Conf ------------- プロジェクト構成 config.php
─ 言語 ------------- 通知、動的言語パック
§─リブ
│ §─ アクション ------------- オペレーションクラスライブラリ
│ §─ モデル ------------- モデルクラスライブラリ
│ └─ウィジェット ------------- プラグインライブラリ
└─ Tpl ------------- テンプレート、css、js ファイル
エントリーファイル
ThinkSNS2.0 には、パブリック エントリ ファイルが 1 つだけあり、それは ThinkSNS ディレクトリにあるindex.php.
です。
URLパターン
URLのアクセス方法はindex.php?app=APP_NAME&mod=Action&act=functionです
関数ライブラリ
アプリケーション独自の関数ライブラリはアプリケーション ディレクトリの Common/common.php に配置でき、ここにある関数はアプリケーションと一緒にロードされ、アプリケーション内で自由に呼び出すことができます。システム関数ライブラリについては、付録の「関数ライブラリ」を参照してください。
テンプレート
[…]
10/32
アプリケーションのスタイル ファイルは、Tpl の下の Public/ ディレクトリに均一に保存され、../Public/xxx.css を通じて参照されます。アプリケーションの JS ファイルは、Tpl/ の下の Public/js/ ディレクトリに均一に配置されます。アプリケーション プロジェクトの下にあり、../Public/xxx.css を通じて参照されます。
------------------------------------------------- -------------------------------------------------- ------------------
開発ガイド
3.1 命名標準とコーディング標準
ThinkPHP の命名とコーディングの仕様を参照してください: http://thinkphp.cn/Manual/20
3.2 関数ライブラリ、クラスライブラリ、ウィジェットの使用
システム関数ライブラリを使用する
システム関数は /core/sociax/functions.php および /core/sociax/extend.php ファイルにあり、グローバルに有効な関数であり、直接呼び出すことができます。
ユーザーニックネームの取得方法: $uname = getUserName($uid);
サービスを利用する
サービスは /addons/services/ ディレクトリにあります。サービスを使用するには、service('serviceName')->method ($param); を使用します。
たとえば、ユーザーがログインしているかどうかを確認する方法: $is_logged = service('Passport')->isLogged();
パブリックモデルを使用する
パブリック モデルは /addons/models/ ディレクトリにあります。model('modelName')->method ($param); を通じてパブリック モデルを使用します。
エリアリストの取得方法: $area_list = model('Area')->getAreaList();
ウィジェットを使用する
ウィジェットは /addons/widgets/ ディレクトリにあり、W('widgetName',array('param'=> 'value')) 経由で呼び出されます。通常、ウィジェットはページ内で使用されるため、呼び出しメソッドは次のようになります: {:W('widgetName',
)
11/32
array('param'=>'value'))}。
ページ上に知り合いの可能性のある人を表示する方法: {:W('ManyUse',array('uid'=>'1'))}
サードパーティのライブラリを使用する
サードパーティのライブラリは通常 /addons/libs/ ディレクトリに配置されており、使用前に include_once やその他の関数を通じてファイルをインポートできます。
3.3 ポップアップ ウィンドウ、プロンプト メッセージ、エディターを使用する
ThinkSNS2.0 の世界では、jQuery ライブラリがデフォルトの JS フレームワークであり、ページの先頭に自動的にロードされます。 ThinkSNS2.0 は、jQuery をベースにポップアップウィンドウ、プロンプトメッセージ、KISSY エディタをカプセル化しています (jQuery ライブラリ公式ドキュメント: http://docs.jquery.com/Main_Page)。
ポップアップ
図 2 ポップアップ ウィンドウのレンダリング
図 2 に示すように、ポップアップ ウィンドウには少なくともタイトル、閉じるボタン、コンテンツの 3 つの部分が含まれており、ユーザー操作の継続性を確保するために、通常はコンテンツ部分に「OK」ボタンと「キャンセル」ボタンが追加されます。 。
 ポップアップウィンドウの呼び出し方法:
<スクリプト>
関数 yourFunc() {
ui.box.load(your_url, {title:'これがタイトルです'});
}
 ポップアップコンテンツを your_url に配置します。注: [OK] ボタンと [キャンセル] ボタンもコンテンツの一部です。
 ポップアップ ウィンドウを閉じます:
<スクリプト>
関数 close() {
ui.box.close();
}
12/32
プロンプトメッセージ
図 3 プロンプト メッセージのレンダリング
呼び出し方法:
<スクリプト>
関数成功() {
ui.success("アップデートが完了しました");
}
関数エラー() {
ui.error("新しいメールはすでに存在します");
}
編集者
編集関連の JS はページの先頭に自動的に読み込まれます。E = KISSY.Editor("idOfTextarea"); を呼び出すだけでエディターの読み込みが完了します。例:
<フォームアクション=" "メソッド="投稿">