Удобная установка дополнений

+17
681

Для того, чтобы избавится от экрана ввода каких-то данных при установке расширений открываем файл:

  1. public_html/system/controllers/admin/actions/install_ftp.php

Меняем его содержимое на это:

  1. <?php
  2.  
  3. class actionAdminInstallFtp extends cmsAction
  4. {
  5. public function run()
  6. {
  7. // если есть файлы для копирования
  8. if ($contents = $this->getPackageContentsDir()) {
  9. // копирование файлов и каталогов
  10. $this->recursive_copy($contents, PATH);
  11. }
  12.  
  13. // переадресация на завершение
  14. $this->redirectToAction('install/finish');
  15. }
  16.  
  17.  
  18. private function getPackageContentsDir()
  19. {
  20. $config = cmsConfig::getInstance();
  21.  
  22. $path = $config->upload_path . $this->installer_upload_path . DIRECTORY_SEPARATOR . 'package';
  23.  
  24. if (!is_dir($path)) {
  25. return false;
  26. }
  27.  
  28. return $path;
  29. }
  30.  
  31.  
  32. /**
  33.   * Рекурсивное копирование
  34.   * @param string $src
  35.   * @param string $dst
  36.   */
  37. private function recursive_copy($src, $dst)
  38. {
  39. $dir = opendir($src);
  40. @mkdir($dst);
  41. while ($file = readdir($dir)) {
  42. if (($file != '.') && ($file != '..')) {
  43. if (is_dir($src . DIRECTORY_SEPARATOR . $file)) {
  44. $this->recursive_copy($src . DIRECTORY_SEPARATOR . $file, $dst . DIRECTORY_SEPARATOR . $file);
  45. } else {
  46. copy($src . DIRECTORY_SEPARATOR . $file, $dst . DIRECTORY_SEPARATOR . $file);
  47. }
  48. }
  49. }
  50. closedir($dir);
  51. }
  52. }
  53.  

И всё.

Изображение

Изображение

Изображение

Прикреплённый файл:
Скачать 1 Кбскачан 19 раз
ftp
+1
My-InstantCMS.Ru My-InstantCMS.Ru 1 год назад #

Не знаю как с безопасностью, но очень полезное решение, так как FTP загрузчик движка не работает в 50% хостингах. 

Себе на локальку обязательно поставлю 👍

+1
Fuze Fuze 1 год назад #

В идеале нужно сделать чуть иначе. Проверять на возможность записи все целевые директории и файлы (если дополнение заменяет их, например пакет обновления). Если всё что нужно доступно для записи, то выполнять копирование без ftp, иначе давать как и сейчас диалог копирования по ftp.

0
IamB IamB 1 год назад #

Очень правильная идея, за это +.

Но реализация мой глаз не порадовала: Зачем это стыдливое запикивание @ mkdir()? К тому же совершенно ясно, что если не будет создана хотя бы одна необходимая директория, «никто никуда не поедет». Написал бы так

  1. if (mkdir($dst) !== true) {
  2. throw new \RuntimeException(sprintf("Директория %s не может быть создана", $dst));
  3. }

С copy() ситуация аналогичная. Если уж вы взялись именовать методы в CamelCase, то и продолжайте. recursive_copy() выглядит инородно и разрушает единообразие.

0
Сергей Сергеевич Сергей Сергеевич 1 год назад #

Как понимать это хамство?

0
Samber Samber 1 год назад #

Всем привет 🤝 Как называется HTML редактор 📝  в котором я пишу?  Хочу установить такой у себя на сайте 

Изображение
 

Make Make 1 год назад #
Комментарий удален

Еще от автора

Требование к рейтингу или репутации пользователя
Установка требований к рейтингу или репутации пользователя перед отображением записи
Нет такого
Отключение/скрытие страниц сайта/движка
Управление дополнительными стилями
Редактирование таблицы стилей из панели управления сайтом.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.