| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Никита Козин 25.06.2005 18:38
При загрузке модуля, я смотрю какие к нему прилагаются классы и записываю информацию о модулях и классах в табличку:^rem{ *** Устанавливаем классы *** }
^module_info.classes.menu{
^MAIN:pSQL.void{
INSERT INTO
engine_classes (
class_name,
module_id
)
VALUES (
'$module_info.classes.name',
^MAIN:pSQL.last_insert_id[engine_modules]
)
}
}
^dir_copy[$temp.dir/classes/;/classes/;$.is_recursive(1)]При удалении надо проверять, используются ли классы удаляемого модуля другими модулями, и если нет, то удалить их. И здесь я запутался :( @uninstallModule[module_id][classes]
$module_id(^module_id.int(0))
^if($module_id){
^rem{ *** Удаляем информацию о модуле из базы данных *** }
^MAIN:pSQL.table{
DELETE FROM
engine_modules
WHERE
module_id = $module_id
}
^rem{ *** Смотрим: какие классы использовал модуль... *** }
$classes[^MAIN:pSQL.table{
SELECT
module_id,
class_name
FROM
engine_classes
}]
$classes[
^rem{ *** Хэш всех классов всех модулей *** }
$.names[^classes.hash[class_name]]
^rem{ *** Таблица классов удаляемого модуля *** }
$.module[^classes.select($classes.module_id==$module_id)]
^rem{ *** Пустой таблица. Сюда будем добавлять имя класса, подлежащего удалению *** }
$.delete[^table::create{class_name}]
]
^classes.module.menu{
^if(
$classes.names.[$classes.module.class_name].count[] == 1
&& $classes.names.[$classes.module.class_name].module_id == $module_id
){
^classes.delete.append{$classes.module.class_name}
}
}
^classes.delete.menu{
^file:delete[/classes/$classes.delete.class_name]
}
^MAIN:pSQL.void{
DELETE FROM
engine_classes
WHERE
class_name IN (^classes.delete.menu{$classes.delete.class_name}[,])
}
}
# end @uninstallModule[]