プラグイン開発のベストプラクティスmd

4882 ワード

ファイル命名仕様
  • は、ブラウザを介して直接アクセス可能な通常のプログラムファイルである.php接尾辞の名前.
  • は、一般的なプログラムファイルによって参照するプログラムファイルである.inc.php接尾辞の名前.
  • は、一般的なプログラムファイル、またはプログラムファイルを参照する関数ライブラリまたはクラスライブラリである.func.php(関数ライブラリ)または.class.php(クラスライブラリ)接尾辞に名前を付けます.
  • テンプレートファイル.htm接尾辞命名、プラグインテンプレートファイルはsource/plugin/identifier/template/ディレクトリに存在し、携帯電話版プラグインテンプレートはsource/plugin/identifier/template/mobile/ディレクトリに存在する
  • テンプレート言語パッケージファイル.lang.php接尾辞の名前は、プラグイン言語パッケージファイルの開発時にdata/plugindata/ディレクトリに保存され、ファイル名はidentifier.lang.php.
  • ダイナミックキャッシュファイル./Data/cacheディレクトリでは、異なる機能に基づいて独立した名前を付けます.
  • バックグラウンドデータバックアップ機能を用いる生成されたバックアップファイルは、通常は.sqlは接尾辞でdata/ディレクトリに格納されます.
  • 一部のディレクトリには、空白のindexが存在する.WebサーバがDirectory Indexを開く際に発生するセキュリティ上の問題を回避するためのhtmlファイルです.
  • Discuzから!X2.5から、製品はデータテーブルをカプセル化し、カプセル化されたファイルは統一的にTableクラスと命名され、「C::t(Tableクラスファイル名)」方式で呼び出される.プラグインは、独自のデータテーブルをカプセル化する必要がある場合は、Tableクラスファイルをsource/plugin/identifier/table/ディレクトリの下に保存し、table_表名phpフォーマット命名
  • class_core.php
    source/class/class_core.phpはDiscuz!の汎用初期化モジュールプログラムで、ほとんどの外部コードに参照されています.プラグインの設計を開始する前に、モジュールの概略機能をある程度理解することができます.class_core.phpは主に以下のタスクを完了しました.
  • は異なるPHPとオペレーティングシステム環境に対して判断と互換性処理を行い、Discuz!さまざまな構成のサーバ環境で実行できます.
  • 初期化定数IN_DISCUZはTRUEであり、includeまたはrequireの後続プログラムの判断に用いられ、他のプログラムが不正に参照されないようにする.
  • コミュニティプログラムが存在する絶対パスを読み出し、定数DISCUZ_に格納するROOT中.
  • ロードに必要な基本関数ライブラリsource/function/function_core.php.
  • config/config_を通過global.phpで提供されるデータベースアカウント情報は、データベース接続を確立します.Discuz! データテーブルの接頭辞をサポートします.テーブルのフルネームを取得するには、「DB::table('tablename')」方式を使用します.
  • ユーザーがログインしているかどうかを判断するログインタグ$G['uid']は0以外であり、同時に$G['username'](addslashesを追加したユーザー名で、変更なしでデータベースを挿入できます)、$G['member'][username'](元のユーザー名、ページ表示可能)、$G['member'][password'](ユーザパスワードのMD 5列)などの対応するユーザ情報が付与され、他のユーザ情報が$_に格納されるG['member']、詳細は「getuserprofile()」で入手できます.
  • ユーザー管理権限を判断し、管理権限を$_にタグ付けするG['adminid']は1~3の間の値です.0は一般ユーザーを表します.1フォーラム管理者を表します.2スーパー版主を表します.3フォーラム版主を表します.ユーザ権限を、その存在するプライマリユーザグループIDに従って$_としてマークするG['groupid'],関連権限はこの$_からG['groupid']に対応するシステムキャッシュから読み出し、$_に格納G['group']. 各モジュールの各種設定変数をプリセットで読み込みました.
  • [X 2.5変更内容]$G['username']はaddslashes処理を行わない.

  • 原則
  • すべてのプラグインとのプログラム、そのすべてのフロントバックグラウンドプログラムを含めて、source/plugin/ディレクトリにすべて入れてください.同時に、プラグインのインストール説明で、プラグインのファイルがどのディレクトリにコピーする必要があるかを指摘します.他のプラグインと競合しないように、source/plugin/のサブディレクトリをできるだけ作成し、プラグインプログラムをサブディレクトリの下に配置すると、作成したプラグインの互換性が向上します.
  • プラグインにナビゲーションバーモジュールが含まれている場合、このモジュールはpluginで統一されます.php?identifier=xxx&module=yyyの呼び出しは、対応するリンク、フォームで使用してください.xxxはプラグインの唯一の識別子であり、yyyはモジュール名である.フロントカードケースプログラムplugin.phpは汎用初期化モジュール/source/class/class_をロードしました.core.php、再度参照する必要はありません.
  • プラグインに管理センターモジュールが含まれている場合、このモジュールはadminで統一されます.php?Action=plugins&identifier=xxx&pmod=yyyで呼び出すには、対応するリンク、フォームでこの方法を使用します.xxxとyyyの定義は、ナビゲーションバーモジュールと同じです.システムはadminも許可する.php?Action=plugins&edit=$edit&pmod=$modの方式でリンクとフォームアドレスを生成し、$editと$mod変数はすでにプラグインバックグラウンド管理インタフェースによって付与されているため、この2つの変数値をURLに持ち込むこともサポートされている.バックグラウンドモジュールはadminであるため.php呼び出しのため、汎用初期化モジュール/source/class/class_がロードされました.core.phpはバックグラウンド管理者の権限検証を行っているため、モジュールプログラムには機能コードを直接書くことができ、検証する必要はありません.
  • プラグインのフロントバックグラウンドハウジング(plugin.phpとadmin.php)を迂回して、あるプログラムを直接呼び出すようにプラグインを作成しないでください.これは、ユーザーの使用が不便で、コードが冗長で、規範的ではありません.また、検証プログラムの考慮が行き届いていないため、セキュリティ上の危険性が発生します.上記のURLアドレスを使用して、リンク、フォームなど、どこでも簡単にプラグインモジュールを呼び出すことができます.すべてのプラグインに関するプログラム、すべてのフロントプログラムを含む、すべてのハウジング呼び出しを使用するため、必ず最初の行に
  • を追加してください.
    if(!defined('IN_DISCUZ')) {
        exit('Access Denied');
    }
    

    バックグラウンドプログラムの最初の行が追加されました
    if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
        exit('Access Denied');
    }
    

    URLから直接呼び出しを要求され、セキュリティ上の問題が発生しないようにします.
    一般的に、プラグインをパブリッシュするには、プラグインのエクスポート機能を使用して、ユーザーがプラグインの構成データを一度にインポートできるようにしてください.非常に特殊な場合は、プラグインの構成管理とインストール方法をユーザーに伝えることもできます.
  • 機能が独立している場合は、できるだけ個別のプログラムを使用してプラグイン(すなわち、外挂型プラグイン)を作成し、フォーラム自体のコードをできるだけ修正しないでください.これは、ユーザーの今后のアップグレードに大きな便利さをもたらします.
  • Discuzを変更できます!独自のデータ構造ですが、効率に影響を及ぼさずにプラグインデータを別のデータテーブルに格納することをお勧めします.追加したフィールドやインデックス、今後のバージョンDiscuzは排除できません.コア・データ・フィールドの名前が重複する可能性があります.いずれの場合も、Discuzを削除しないでください!標準バージョンのデータ構造に既存のフィールドまたはインデックス.プラグインの説明書で、どのフィールドが追加されたのか、どのテーブルが追加されたのか、どのプログラム、バージョン互換性が変更されたのか、その後のサポートの提供方法(サポートされていないのか、どのような方法で提供されているのかなど)について詳しく説明してください.便利な場合は、どのフィールドを削除するか、新しいプログラムを削除するか、プラグインによって変更されたプログラムを元に戻すかなど、プラグインのアンインストール方法をできるだけ提供してください.使用者は、そのために苦労したことに感謝し、将来の発展を維持するために相応の費用を支払うことを望んでいます.
  • プラグインが別のデータテーブルを使用して格納されている場合は、プラグイン管理でプラグインが使用するデータテーブル名(接頭辞を含まない)を正確に設定してください.これにより、ユーザーはデータをバックアップする際に、プラグインデータを一緒にバックアップすることができます.
  • Discuz! 8種類のカスタムポイントが内蔵され、common_に格納されています.memberテーブルのextcredits 1~extcredits 8フィールドには、記号付き整数のタイプがあります.