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

Аватар пользователя Phjester

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

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

Тип материала:
Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя bumble
bumble 3 месяца назад

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

Аватар пользователя Phjester
Phjester 3 месяца назад

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

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

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

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

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

Аватар пользователя bumble
bumble 3 месяца назад
bumble написал:
Вы можете подключить любой файл скрипта в любом месте, с помощью конструкций module_load_include (предпочтительно) или require_once.
Аватар пользователя Phjester
Phjester 3 месяца назад

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

Аватар пользователя bumble
bumble 3 месяца назад

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

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

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

Аватар пользователя jsv
jsv 3 месяца назад

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

Аватар пользователя jsv
jsv 3 месяца назад

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

Аватар пользователя Andruxa
Andruxa 3 месяца назад
Phjester написал:
Файл объявил в нужной директиве файла .info. А функция так и не стала глобальной.

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

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

Аватар пользователя Phjester
Phjester 3 месяца назад

Модуль включен
Кэш сброшен

Аватар пользователя Andruxa
Andruxa 3 месяца назад

покажите, что в .module и в .info

Аватар пользователя jsv
jsv 3 месяца назад

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

Аватар пользователя jsv
jsv 3 месяца назад

файл в папке модуля?

Аватар пользователя bumble
bumble 3 месяца назад
1

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

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

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

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

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

Аватар пользователя Phjester
Phjester 1 месяц назад

Спасибо всем за ответы.
Использую module_load_include();