Drupal → Удаление переменных при деинсталяции модуля

20.10.2010

Код, при деинсталяции модуля, удаляет все переменные с префиксом modulename_, которые были созданы с помощью variable_set() или system_settings_form():

/**
 * Реализация hook_uninstall()
 */
function modulename_uninstall() {
  db_query("DELETE FROM {variable} WHERE name LIKE 'modulename\_%'");
}

Код необходимо поместить в файл modulename.install.

Добавлено 16/06/2011

Более правильный вариант:

/**
 * Реализация hook_uninstall()
 */
function modulename_uninstall() {
  foreach (array('modulename_var1', 'modulename_var2', ...) as $name) {
    variable_del($name);
  }
}
Написанное актуально для
Drupal 6, Drupal 7
Похожие записи

Комментарии

Только таблица в запросе должна называться varibales. И по-моему нужно удалять через variable_del(), а то есть много модулей, у которых название начинается одинаково и отличается только тем что идет после "_". Таким образом можно удалить и переменные установленные другими модулями.

Только таблица в запросе должна называться varibales

всё же variable

И по-моему нужно удалять через variable_del()

нужно, но не всегда удобно

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

если ваш модуль соблюдает соглашение по именованию переменных — modulename_varname, то проблем быть не должно

Да вы правы, таблица называется variable.
Допустим вас стоит 3 реально существующих модуля ajax, ajax_tabs, ajax_load. Вы удаляете модуль ajax и ваш запрос удалит все переменные вида ajax_%, то есть соответственно переменные модулей ajax_tabs и ajax_load тоже, так как переменные созданные этими модулями(вида ajax_tabs_% и ajax_load_%) попадают под паттерн ajax_%.

Гость
19.11.2010, 16:34

в этом сучае нужно писать
LIKE ajax_tabs\_% и LIKE ajax_load\_% :)

Добавить комментарий