Как вы хотите определить свои общесистемные переменные в Drupal 6? - PullRequest
4 голосов
/ 07 апреля 2010

Я в моем файле модуля.Я хочу определить некоторые сложные переменные для использования во всем модуле.Для простых вещей я делаю это:

function mymodule_init() {
    define('SOME_CONSTANT', 'foo bar'); 
}

Но это не сработает для более сложных структур.Вот некоторые идеи, о которых я думал:

global:

function mymodule_init() {
    $GLOBALS['mymodule_var'] = array('foo' => 'bar');
}

variable_set:

function mymodule_init() {
    variable_set('mymodule_var', array('foo' => 'bar'));
}

свойство класса модуля:

class MyModule {
    static $var = array('foo' => 'bar');
}

Variable_set / _get выглядит как самый "друпальный" способ, но меня тянет к настройке класса.Есть ли какие-либо недостатки в этом?Есть еще какие-нибудь подходы?

Ответы [ 3 ]

3 голосов
/ 08 апреля 2010

Я не видел ни одного хранящего статические значения, которые являются объектами массива.

Для простых значений друпий способ состоит в том, чтобы поместить define в начало файла модуля .module. Этот файл загружается, когда модуль активирован, так что этого достаточно. Нет смысла помещать его в функцию hook_init.

variable_set сохраняет значение в базе данных, поэтому не запускайте его снова и снова. Вместо этого вы можете поместить его в ваш hook_install, чтобы определить их один раз. variable_set хорошо использовать, если значение может быть изменено в разделе администратора, но это не лучший выбор для хранения статической переменной, поскольку вам потребуется запрос для ее получения.

0 голосов
/ 11 апреля 2010

Всегда хорошая практика избегать глобалов.Так что это делает ваш выбор немного проще.

Если вы ошибаетесь в отношении класса, вы будете писать код, который не соответствует стандартам D6.Есть много модулей, которые делают это, но мне лично нравится держаться ближе к ядру Drupal, чтобы лучше понять его.А код, написанный в разных стилях через одно и то же приложение, может отрицательно сказаться на производительности и обслуживании.

variable_set () и define () совершенно разные.Используйте первое, когда вы можете ожидать, что эта информация изменится (переменная).Используйте последний для констант.Ваши требования должны быть ясны, какие из них использовать.

Не беспокойтесь слишком сильно о попадании в базу данных для variable_set / get.Если ваше программное обеспечение написано хорошо, оно почти не должно влиять на производительность.Подобные обходы производительности следует реализовывать только в том случае, если у ваших приложений есть серьезные проблемы с производительностью, а вы пробовали все остальное.

0 голосов
/ 07 апреля 2010

Я думаю, что все эти методы будут работать. Я никогда не использовал его таким образом, но я считаю, что модуль контекста (http://drupal.org/project/context) также имеет свой собственный API для хранения переменных в статическом кэше. Вы можете проверить документацию для модуля .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...