Создание плагина

#1 3 ноября 2013 в 23:16
Пробую писать плагин, с инсталлом разобрался, но не могу найти на примерах функцию удаления плагина. Например при включении плагина я произвожу некие действия с бд добавляя в таблицу поля, как мне при выключении плагина их удалить?
#2 3 ноября 2013 в 23:26
picaboo, не видел такого чтобы при выключении плагина, модуля и таблицы в БД удалялись.
Сужу по простым примерам и на своем опыте — могу ошибаться.
#3 3 ноября 2013 в 23:30
я перешерстил все мне доступные, все оставляют после себя "мусор".

есть функции public function install() и public function upgrade(){

больше не могу найти ничего, даже в plugin.class.php нет ничего
#4 3 ноября 2013 в 23:36
Такой нет…
#5 3 ноября 2013 в 23:42
всё, спасибо, разобрался. удалять тоже можно.
#6 4 ноября 2013 в 00:29

всё, спасибо, разобрался. удалять тоже можно.

picaboo
Какое решение нашли?
#7 4 ноября 2013 в 00:47
сделал другой плагин, который удаляет при установке все что создал первый.:)
#8 4 ноября 2013 в 01:06
эмм я бы сделал иначе..

Вот так:

создал файл
uninstall.php

  1. define("VALID_CMS", 1);
  2.  
  3. include('core/cms.php');
  4. $inCore = cmsCore::getInstance();
  5. if (!$inCore->getPluginId('имя плагина')){
  6. //так плагин удалён теперь можно удалить остатки
  7. //выполняем запросы к базе данных
  8.  
  9. echo 'Остатки плагина ИМЯ очищены';
  10. }
#9 4 ноября 2013 в 01:25
думал об этом, но не знаю как привязать к кнопке удаления выполнение скрипта или вызов файла, а так получится что нужно руками вызывать.
пока сделал так
  1.  
  2. <?php
  3. class p_sdf_uninstall extends cmsPlugin {
  4.  
  5.  
  6. public function __construct(){
  7.  
  8. parent::__construct();
  9.  
  10. $this->info['plugin'] = 'p_sdf_uninstall';
  11. $this->info['title'] = 'SDF Plugin unistall';
  12. $this->info['description'] = 'Удаление плагина SDF.Нажмите для удаления плагина SDF';
  13. $this->info['author'] = 'me';
  14. $this->info['version'] = '1.0';
  15. }
  16.  
  17. public function install(){
  18.  
  19. //
  20. //удаляем что создали
  21. //
  22. //
  23.  
  24. // return parent::install(); не нужно чтобы не светится в установленных
  25.  
  26. }
  27. }
  28. ?>
  29.  
#10 4 ноября 2013 в 12:36

сделал другой плагин, который удаляет при установке все что создал первый.:)

picaboo
Как-то не совсем по фен-шую получается. Вариант Димитриуса тоже не то. Нужно каждый раз лезть по фтп. Лучше будет так:
1. Открываем файл /core/classes/plugin.class.php и создаем метод
  1.  
  2. public function remove($plugin_id) {
  3.  
  4. return $this->inCore->removePlugin($plugin_id);
  5.  
  6. }
  7.  
2. Далее хакнем админку, файл /admin/applets/install.php. Заменяем строку 510:
  1. $inCore->removePlugin($plugin_id);
на:
  1.  
  2. $plugin = $inCore->loadPlugin($plugin_id);
  3. if (!$plugin){ cmsCore::redirectBack(); }
  4. $plugin->remove($plugin_id);
  5.  
3. В принципе и всё. Далее в файле плагина plugin.php можно вставить следующий метод:
  1.  
  2. public function remove($plugin_id){
  3. //далее выполняем какие-то действия, которые необходимо выполнить перед удалением
  4.  
  5. //непосредственно само удаление плагина
  6. return parent::remove($plugin_id);
  7. }
  8.  
Как-то так. Не проверял, но вроде бы должно работать.
#11 4 ноября 2013 в 12:47

Как-то не совсем по фен-шую получается. Вариант Димитриуса тоже не то. Нужно каждый раз лезть по фтп. Лучше будет так:

Марат
Марат, согласен. Мне знаком такой вариант решения, но такая задача не ставилась.
#12 4 ноября 2013 в 12:51
Марат, спасибо, но к сожалению тут если для себя — то можно хакнуть движок и вариант отличный, а если для общего пользования, то без внесения в дистрибутив — бессмысленно😥и проще сделать плагин для удаления плагина.
#13 4 ноября 2013 в 12:56
Вообще счас в голову пришла дурная мысль, что при инсталляции плагина, заставлять его создавать плагин для удаления, а при запуска плагина удаления — после выполнения кода удалять самому себя.

В принципе например инсталлятор форума SMF умеет сам создавать папки и записывать туда файл, а после того как закончилась инсталляция — удаляет самостоятельно инсталлятор на последнем шаге инсталляции.

Но это похоже как до Луны на ходулях добираться😊то еще извращение
#14 4 ноября 2013 в 15:41

Вообще счас в голову пришла дурная мысль, что при инсталляции плагина, заставлять его создавать плагин для удаления, а при запуска плагина удаления — после выполнения кода удалять самому себя.

picaboo

Кстати, это мысль из разряда The best! Удобно и практично…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.