Как я могу получить имя модуля Drupal программно?

Я работаю над своим модулем. Я понимаю, что мне постоянно нужно вручную вводить имя модуля в разных местах. Чаще всего используется функция drupal_get_path($type, $name) (I в моем коде их больше 10). Где $name - название темы или модуля. За это время мне нужно уже 3 раза сменить имя модуля. Как вы понимаете, мне также нужно изменить все имена модулей, жестко заданные в моем проекте. Поэтому я подумал, что было бы неплохо иметь какую-нибудь удобную функцию для автоматического получения этого имени.

Как я могу программно получить имя модуля машины?

Например, если у вас есть модуль в следующем каталоге ..

sites/all/modules/my_module/

... тогда вы можете схватить это таким образом

drupal_get_current_module_name(); // return my_module

person sobi3ch    schedule 15.06.2012    source источник
comment
вы всегда можете получить файл module.info, проанализировать его как файл .ini и получить имя   -  person Gntem    schedule 15.06.2012
comment
Вы можете привести пример использования? просто интересно, зачем вам нужно программно находить имя модуля, для которого вы пишете код. Или код, получивший имя модуля, должен находиться в другом модуле?   -  person nmc    schedule 15.06.2012
comment
Если я хочу иметь имя модуля с очень длинным именем и хочу создать тему [description], тогда (насколько я знаю) я должен создать что-то вроде 'uc_very_long_name_description' (пространство имен). Затем мне нужно еще около 10 тематических функций. Я хочу создать свою вспомогательную функцию темы (_theme ()) и использовать в ней имя модуля. И в случае изменения имени модуля мне не нужно менять все эти имена функций темы + все вызовы theme (). Также этот призыв выглядит более человечным, чем оригинальные ... _theme('description') вместо theme('uc_very_long_name_description') и т. Д.   -  person sobi3ch    schedule 16.06.2012
comment
Я только что обновил вопрос, указав предысторию своего вопроса.   -  person sobi3ch    schedule 10.03.2015
comment
@Phoenix, не могли бы вы привести пример кода, спасибо.   -  person sobi3ch    schedule 10.03.2015


Ответы (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

person jmdodge    schedule 15.06.2012
comment
Привет, да, я знаю имя модуля, но я хочу, чтобы оно было доказано в случае изменения имени модуля (а также файла (ов)) .. - person sobi3ch; 15.06.2012
comment
Я думаю, что у вас может быть некоторая общая путаница относительно того, как используются модули Drupal, или, может быть, вы пытаетесь достичь чего-то еще в обходной манере. Можете ли вы объяснить, почему вы считаете, что вам нужно текущее имя модуля, и что вы пытаетесь с ним делать? - person jmdodge; 15.06.2012
comment
У меня есть функция темы с очень длинным именем. А также я хочу использовать имя модуля в начале функции темы, чтобы сделать его своего рода пространством имен. Но у меня очень длинное имя модуля, поэтому я хочу получить это имя из функции. Есть ли в этом смысл? - person sobi3ch; 15.06.2012
comment
При типичном использовании системы тем Drupal вам не нужно знать имя модуля, механизм тем определит это на основе того, какие модули или темы реализуют этот крючок темы. Я отредактирую исходный ответ, чтобы помочь объяснить. - person jmdodge; 15.06.2012
comment
Привет, да, я знаю, как это работает. Я объяснил, для чего мне это нужно, в комментарии выше comment14476483_11053461 - person sobi3ch; 17.06.2012

Я прикидываю что-то вроде этого:

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

но не знаю, это не лучший способ сделать это ..

ОБНОВЛЕНИЕ: теперь я вижу, что лучше использовать базовое имя

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

ОБНОВЛЕНИЕ 2: я думаю, что если это необходимо для всего модуля, тогда оно может быть доступно через константу, определенную в самом начале модуля, например:

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

Тогда вы можете использовать все время во всех своих функциях следующим образом:

drupal_get_path('module', MODULE_NAME);
person sobi3ch    schedule 15.06.2012