Код, при деинсталяции модуля, удаляет все переменные с префиксом 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
Похожие записи
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
- Views сортировка по выражению/условию/формуле
- Views фильтр "товар имеет опубликованную вариацию"
- Модуль EAV Field — хранение большого числа характеристик сущности в одном поле
- Добавить сторонней контент сущности своё базовое поле (base field)
Комментарии
Только таблица в запросе должна называться varibales. И по-моему нужно удалять через variable_del(), а то есть много модулей, у которых название начинается одинаково и отличается только тем что идет после "_". Таким образом можно удалить и переменные установленные другими модулями.
всё же variable
нужно, но не всегда удобно
если ваш модуль соблюдает соглашение по именованию переменных —
modulename_varname
, то проблем быть не должноДа вы правы, таблица называется variable.
Допустим вас стоит 3 реально существующих модуля ajax, ajax_tabs, ajax_load. Вы удаляете модуль ajax и ваш запрос удалит все переменные вида ajax_%, то есть соответственно переменные модулей ajax_tabs и ajax_load тоже, так как переменные созданные этими модулями(вида ajax_tabs_% и ajax_load_%) попадают под паттерн ajax_%.
хм, ситуация возможная =)
в этом сучае нужно писать
LIKE ajax_tabs\_% и LIKE ajax_load\_% :)
Добавить комментарий