Как мне установить переменные для variable_get ()?

9

Я пытаюсь понять variable_get(). До сих пор я читал, что вы можете устанавливать переменные в файле settings.php, используя $confмассив, и получать их позже в коде, используя variable_get(). Я прочитал, что вы также можете использовать variable_get()для извлечения значений из базы данных.

Как это работает?
Есть ли таблица, которая создается автоматически?
Как бы вы установили переменные, если эта возможность возможна?

cthrucode
источник

Ответы:

25

Может быть, вы надеетесь узнать, что variable_set - это волшебный способ хранения всех видов структурированных данных в вашей базе данных, а этот variable_get - способ его получения снова. К сожалению это не так.

«Постоянные переменные», как их часто называют, предназначены для относительно простых пар ключ-значение, которые должны сохраняться в запросах, пользователях и сеансах, часто до тех пор, пока администратор сайта не изменит значение. Хорошим примером является название сайта.

Итак, как это работает?

Когда Drupal загружается, все переменные читаются из кэша (если есть) или из таблицы переменных. (См. Variable_initialize для точного кода.) Переменные и хранятся в глобальной $confпеременной, огромный массив. Drupal делает это, потому что это более эффективно, чем выполнение запросов к базе данных каждый раз, когда требуется переменная. (Это также причина, по которой variable_set не подходит для больших двоичных объектов данных: они будут загружаться при каждом запросе!)

Всякий раз, когда вы используете variable_get('variable_name', 'default_value'), имя переменной ищется в массиве $ conf. Если он существует, значение возвращается; в противном случае возвращается значение по умолчанию.

Наконец, есть третий член семейства: variable_del . Как следует из названия, это удаляет переменную из таблицы переменных. Эта функция часто используется в реализациях hook_uninstall , удаляя переменные при удалении модуля.

Если вы ищете способы для хранения более сложных пользовательских структур данных в базе данных, посмотрите hook_schema и drupal_write_record или используйте систему сущностей Drupal и Entity API .

marcvangend
источник
7
Еще одно важное замечание заключается в том, variable_set()что кэш переменных перестраивается, поэтому он обычно зарезервирован для данных, которые достаточно долговечны и согласованны, например, настройки администратора и тому подобное. Или, другими словами, его не следует использовать вместо статических переменных между функциями, которые меняются во время сборки страницы, или как статические переменные.
Джимаджамма
5

Если вы используете Drush (настоятельно рекомендуется), вы можете drush vget > variables.txtиз командной строки создать текстовый файл со списком всех текущих переменных и их значений. Точно так же вы можете использовать drush vsetдля изменения установить любую переменную на другое значение.

См GitHub для получения более подробной информации о variable-get, variable-setи других полезных команд.

MRP
источник
3

Чтобы установить переменные, вы должны использовать variable_set () . Затем вы можете получить их с помощью variable_get () . Вы должны ознакомиться с сайтом Drupal API.

Переменные, если они хранятся, можно найти в таблице переменных.

Triskelion
источник
Из приведенного выше обсуждения не ясно, как установить переменную в пользовательском модуле. Итак, как установить переменную из пользовательского модуля?
Fawwad