Интерфейс собственного модуля

Аватар пользователя Phjester Phjester 11 марта 2018 в 0:45

Здравствуйте!
При разработки собственного модуля возникла необходимость использовать некоторые его функции вне модуля, т.е. сделать некоторые функции глобальными.
Прошу объяснить ряд вопросов:
1. Как правильно называть функции чтобы они были видны в любом месте?
2. Как правильно называть функции чтобы они были видны в любом месте, если они находятся в подмодуле?
3. Я где-то читал что Drupal определяет интерфейс модуля только при первом включении этого модуля. Так ли это? Если это правда, то можно ли еще раз определить интерфейс модуля не выключая модуль? Возможно есть какая-нибудь процедура, типа "Отчистить кэш".
4. Если в модуле есть несколько файлов с кодом, а функции, которые являются интерфейсом, находятся не в файле my_module.module, надо ли о таком файле сообщать в файле my_module.info, чтобы его функции стали видны?

Спасибо за внимание!

0 Thanks

Комментарии

Аватар пользователя bumble bumble 11 марта 2018 в 1:28

1. Если модуль написан в процедурном стиле - все функции (процедуры) будут "глобальными". Drupal загружает все включенные модули.
2. Принято начинать название функции с имени модуля, для того чтоб разграничить пространства имен. Ну, и название должно передавать смысл (задачу) ф-ции, желательно.
3. Поясните, какое значение Вы вкладываете в понятие "интерфейс модуля"? Вы можете подключить любой файл скрипта в любом месте, с помощью конструкций module_load_include (предпочтительно) или require_once.
4. Переменные, особенно глобальные - зло. Drupal автоматически загружает файлы модуля MODULE_NAME.module если он включен, а так же все файлы объявленные в MODULE_NAME.info в директиве files[]. По остальным - читать прошлый пункт.

Аватар пользователя Phjester Phjester 11 марта 2018 в 1:53

1. Функции в процедурном стиле

2. Ваш ответ понятен, но ясности не дал. Я столкнулся с такой проблемой:
Включил модуль
Понял что мне необходимо использовать функцию из модуля в другом месте
Искомая функция не находится файле MODULE_NAME.module, в другом. Этот файл я объявил в MODULE_NAME.info в директиве files[].
Попробовал вызвать функцию в devel и в ответ получил что данной функции не существует

3. Интерфейс - глобальные методы и функции модуля. В моем случае именно функции

4. Ошибка вышла - не переменные, а функции.

Вопрос во 2 пункте.

Аватар пользователя Phjester Phjester 11 марта 2018 в 2:05

Действительно могу.
Но Ваш ответ ясности не дал. Ведь я сделал как в инструкции - функция начинается с названия модуля. Файл объявил в нужной директиве файла .info. А функция так и не стала глобальной.
А может и стала, просто drual о ней еще не знает.
Мой вопрос в том как сделать функцию глобальной. Вы же не пишите include когда используюуете taxonomy_term_load() . Вот хочу так же.

Аватар пользователя bumble bumble 11 марта 2018 в 2:22

Перечитайте еще раз.

В .info реквайрить файлы нужно в весьма ограниченных случаях, чаще для загрузки классов. Крайне сомневаюсь что в Вашем случае это необходимо.

Если не хотите инклюдить файл для использования определенной функции - пишите ее в основном файле модуля, или заинклюдьте нужный файл там же для "глобального доступа".

Аватар пользователя jsv jsv 11 марта 2018 в 11:01

Создается впечатление, что он хочет в info прописать файл ВНЕ ПАПКИ модуля - то есть лежащий совсем в другом месте. А не выходит

Аватар пользователя jsv jsv 11 марта 2018 в 11:01

Создается впечатление, что он хочет в info прописать файл ВНЕ ПАПКИ модуля - то есть лежащий совсем в другом месте. А не выходит

Аватар пользователя Andruxa Andruxa 11 марта 2018 в 4:46
Phjester wrote:

Файл объявил в нужной директиве файла .info. А функция так и не стала глобальной.

А может и стала, просто drual о ней еще не знает.

На всякий случай уточню:
- модуль включен?
- после изменения кода кеш сброшен?
Бывает, что нужно сделать opcache_reset() при некоторых настройках opcache.

Аватар пользователя jsv jsv 11 марта 2018 в 20:09

Да не будет он ниче показывать, вангую это для взлома сайта тема, он там хочет прописать скрипт с другого сайта

Аватар пользователя bumble bumble 11 марта 2018 в 1:31
1

ЗЫ - для старта, очень полезным является "ковыряние" и рассмотрение со всех возможных сторон, модуля Examples for Developers. Там очень много примеров на все случаи жизни.
Качайте, открывайте, смотрите.

Аватар пользователя jsv jsv 11 марта 2018 в 11:00
Phjester wrote:

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

А не поясните, с чем связана такая экзотическая необходимость? Мне что-то в голову кроме неприятных для хозяина сайта вещей ничего не приходит.

Аватар пользователя jsv jsv 11 марта 2018 в 11:03
Phjester wrote:

4. Если в модуле есть несколько файлов с кодом, а функции, которые являются интерфейсом, находятся не в файле my_module.module, надо ли о таком файле сообщать в файле my_module.info, чтобы его функции стали видны?

если функция вызывается из меню - можете через hook_menu указать, в каком файле эта функция находится.