Actions

開発者エリア/ローカルカスタマイゼーション

From Mahara Wiki

Revision as of 17:49, 14 July 2020 by Mits (talk | contribs) (/local/lib.php内の様々なフック関数 Miscellaneous hook functions in /local/lib.php)

作成中です - mits (talk)

Maharaには /local ディレクトリが含まれます。これはコアコードを編集せずにMaharaサイトの動作を変更できるようにするための複数タイプのローカルカスタマイゼーション用フックを提供するための中心的な場所です。

なぜ、/localなのですか?

あなたが新しいウェブサイト管理者の場合、「本当に必要ですか?」と自問することでしょう。私のMaharaサイトをカスタマイズしたい場合、Maharaコードを直接編集してはいかがでしょう?

その答えは「Maharaのコアコードを修正した場合、アップデートが困難になってしまいます」です。Maharaプロジェクトは定期的に更新をリリースしますが、極めて広範囲にわたる場合もあります。あなたのMaharaコードを全くカスタマイズしていない場合、単に既存のコードを更新済みコードに置換できます。しかし、あなたがMaharaコアファイルをカスタマイズしている場合、そして、私たちがそのファイルを更新している場合、あなたの更新を失ってしまうか、新しいバージョンのファイルの適用方法を見つけ出さなければなりません。特にGitのような適切なバージョンコントロールを使用することにより、この処理をさらに簡単にできます。しかし、Maharaコアコードの修正を最小限にする方が簡単です。

「/local」ディレクトリはMaharaをカスタマイズするための方法の1つです。プラグインおよびテーマはカスタマイズのための他の主要な方法です。オプションに関する完全なリストはカスタマイズをご覧ください。「/local」ディレクトリはMaharaをカスタマイズするための1つの方法にしかすぎません。プラグインおよびテーマがMaharaをカスタマイズするための主な手段です。オプションの完全なリストに関してカスタマイジングをご覧ください。

/localでは何ができますか?

過去において、/local内の新しいフックは常にドキュメントが十分に整っているわけではなかったことに留意してください。そのため、あなたにとって最新情報を取得するための最善の方法はコードを調査することです。

また、あなたがファイルをアップロードできる /local にはすでに多くのファイルが配置されていることにも留意してください。そのため、あなたがそれらのファイルを編集するには「コアを編集」しなければなりません。しかし、これらのファイルはアップグレード処理中に常にあなた独自のファイルで安全に簡単に上書きできるよう設計されています。

フックをインストールする

ファイル local/install.php には localpreinst() および localpostinst() という名称の関数が含まれます。これらはMaharaのインストール処理中に呼び出されます; localpreinst() はインストール処理の初期段階で呼び出されます。そして、localpostinst() はインストール処理の最終段階で呼び出されます。

これらのメソッドはは空のまま定義されています。あなたの独自コードを追加するため、事前インストールおよび事後インストール処理として空のメソッドにオーバーライドできます。

DBフック

/localディレクトリには独自の「version.php」「insatall.xml」および「upgrade.php」ファイルがあります。これらのファイルは標準のMaharaプラグインに対するのと同じように動作します。Maharaの初回インストール時、データベース構造の定義されたlocal/install.xmlが作成されます。また、local/version.phpのバージョンナンバーが (設定値「localversion」として) データベースに保存されます。local/version.phpのバージョンが増加した場合、Maharaはこれを検知してlocal/upgrade.phpの適切なアップグレードセクションを実行するためのアップグレードスクリプトを実行するよう管理者に促します。

カスタム言語ストリング

あなたは/local/langディレクトリ配下に独自の言語ファイルを配置して既存の言語ストリングをオーバーライドできます。

詳細は開発者エリア/言語ストリング#/localのカスタム言語ストリングをご覧ください。

ヘルプをカスタムヘルプファイルでオーバーライドする

あなたは/local/langディレクトリ配下に独自のヘルプァイルを配置して既存のヘルプファイルのコンテンツをオーバーライドできます。

詳細は開発者エリア/言語ストリング#/local のカスタムヘルプファイルをご覧ください。

カスタムテーマオーバーライド

あなたは/local/theme/templatesディレクトリをテーマの「テンプレート」ディレクトリのようにして配下にカスタムテーマを配置できます。同様にあなたはイメージのような静的資源を/local/theme/staticに配置してカスタマイズできます。詳細は Customising/Themes/1.10#Local_theme_overrides をご覧ください。

このように /local ディレクトリに置かれるテンプレートファイルはMahara 1.10以前のバージョンでは現在のテーマディレクトリの下、すべての親テーマの上に順に置かれていました。/local ディレクトリにより既存のページを上書きせずに新しいページを作成できる点で多くの場合において有用です。Mahara 1.10以前のバージョンではプラグインのテンプレートファイルはMaharaに同梱されているテンプレートであっても、/local ディレクトリ経由でカスタマイズできませんでした。現在、Mahara 1.10ではこれらの制限が取り除かれました。/local テーマコンテンツが最初に読み込まれることになり、/local にプラグインのテーマコンテンツを同梱可能となりました。

/local/lib.php内の様々なフック関数 Miscellaneous hook functions in /local/lib.php

Maharaコードベースにはローカル「hook」関数の存在がチェックされる多くの場所を含みます。ローカル「hook」関数が存在する場合、この関数が実行されます。これはサイト管理者がMaharaの主要機能のコアコードを変更せずに変更を提供できることを意味します。

Mahara 1.10以降、これらすべては/local/lib.phpファイルのヘッダに文書化されています。以下、いくつかの主要部分です:

  • local_can_remove_viewtype($viewtype): ユーザによる特定タイプのページの削除をブロックできます。
  • local_get_allowed_blocktypes($category, $view): ページビルダからブロックタイプカテゴリを削除するため使用できます。
  • local_header_top_content(): 戻りデータはほとんどのページ最上部の「head」タグに表示されます。(あなたに静止コンテンツの表示のみが必要な場合、Mahara 1.9現在、これは設定オプション「$cfg->additionalhtmlhead」 (lib/config-defaults.phpに記述) を使用して実現できます。
  • local_main_nav_update(&$menu): Can be used to modify the contents of the main navigation menu
  • local_main_nav_update(&$menu): メインナビゲーションメニューのコンテンツを修正するため使用できます。Can be used to modify the contents of the main navigation menu
  • local_right_nav_update(&$menu): Can be used to modify the contents of the sidebar
  • local_register_submit(&$values): Pre-registration hook. Content added to $values['extra'] will be automatically stored in the database in usr_registration.extra
  • local_post_register($registration): Post-registration hook. Meant to be a place where data stored in usr_registration.extra can be retrieved and applied to the now-registered user.
  • local_init_user(): Hook function, called on each pageload immediately after the global $USER object is initiated.