1

私は自分のモジュールに取り組んでいます。モジュール名をさまざまな場所に手動で入力する必要があることに気づきました。最も一般的な使用法はdrupal_get_path($type, $name)関数です (私のコードにはこれらが 10 個以上あります)。$nameテーマまたはモジュール名はどこにありますか。その間、モジュール名を 3 回変更する必要があります。ご想像のとおり、プロジェクトにハードコードされたすべてのモジュール名も変更する必要があります。そこで、この名前を自動で取得できる便利な機能があればいいなと思いました。

プログラムでマシンモジュール名を取得するにはどうすればよいですか?

たとえば、次のディレクトリにモジュールがある場合..

sites/all/modules/my_module/

..次に、この方法でそれをつかむことができます

drupal_get_current_module_name(); // return my_module
4

2 に答える 2

2

一般に、慣例により、次のことを知っておく必要があります。sites/all/modules/my_module/モジュールのマシン名はフォルダ名と一致する必要がありますmy_module

実質的にすべての提供されたモジュールはこの規則に従います、そしてあなたもそうすべきです。

.infoファイルと.moduleファイルがフォルダーの名前と一致しない可能性がありますが、これは正しくありません。

モジュール内ですでにコードを実行している場合は、編集しているファイルの名前によって、モジュールのマシン名をすでに知っているはずです-私が理解していないことをしようとしているのでない限り。

編集:モジュールのテーマ関数を呼び出そうとしているだけであると判断したため、実際には名前を知る必要はありません。

あなたが持っている場合:

/** Implements theme_table **/
function my_really_long_module_name_table() {}

関数は次のように呼び出される可能性があります。

theme('table');

それだけではありませんが、テーマエンジンは、それらを実装しているものに基づいて、どのテーマ関数が呼び出されるかを決定します。

Drupalテーマシステムの基本のいくつかを読みたいと思うかもしれません。Drupal 6テーマレイヤーを学ぶための良いスタートです:http://drupal.org/node/165706

于 2012-06-15T15:31:54.283 に答える
1

私はこのようなことを理解しています:

function get_current_module_name() {
    return array_shift(explode('.', end(explode(DIRECTORY_SEPARATOR, __FILE__))));
}

しかし、それが最善の方法ではないことを知りません..

更新: basename を使用する方が良いことがわかりました

$name = basename(__FILE__, '.module');

更新 2:これがモジュール全体で必要な場合は、モジュールの最初に定義された定数を介してアクセスできると思います。

define('MODULE_NAME', basename(__FILE__, '.module'));

次に、次のようにすべての関数で常に使用できます。

drupal_get_path('module', MODULE_NAME);
于 2012-06-15T15:14:57.627 に答える