Автосоздание папок в файловой системе для ресурсов
Добрый день.
Появилась задача по созданию для каждого ресурса своей отдельной папки и ограничению просмотра в файл-менеджере именно этой папки при редактировании ресурса. Вопрос как это реализовать.
Задача вроде простая — при создании ресурса для него должна создаваться отдельная папка в ФС и доступ должен быть только к ней (анпример при закгрузке картинок в tinyMCE). Причина такого ограничения банальна — девочки менеджеры в легкую удаляют целые каталоги несмотря на кучу предупреждений, поэтому давать им доступ к папке с файлами всех ресурсов очень чревато, в то же время запрещать удаление не хочется т.к. файлы периодически обновляются и замусоривать папки не хочется.
Явное решение — опираться на id ресурса. И для редактирования уже существующего ресурса оно вполне подходит (mediasource + сниппет из migx). Но проблема в том что для новых ресурсов не существует id.
Варианты решений:
1) прятать редактор текста и tv при создании ресурса и показывать при редактировании (после сохранения). Вариант некрасивый и не очень удобный так как не все ресурсы будут содержать какие либо файлы.
2) автосохранять ресурсы при нажатии «создать новый ресурс». тоже не очень красиво, но в принципе терпимо. Проблема в том на событие OnDocFormRender нам не приходит resource и мы не можем документ сразу сохранить. Можно конечно вызвать яваскриптом клик по кнопке сохранить, но хотелось бы поизящнее.
3) Автосохранять документ только при попытке вызвать файлменеджер. Не придумал как отловить это событие :-[
4) Пожалуй самое незаметное решение — добавить скрытый tv в который при создании нового документа будет генерироваться уникальное значение, на все аякс запросы добавить параметр с этим значением и соответственно в сниппете генерировать папку на основе этого значения…
Собственно вопрос кто что думает и может подскажет? Мне почему то кажется что я изобретаю велосипед и где-нибудь есть решение поставленной задачи, но я к сожалению ничего не нашел :(
Появилась задача по созданию для каждого ресурса своей отдельной папки и ограничению просмотра в файл-менеджере именно этой папки при редактировании ресурса. Вопрос как это реализовать.
Задача вроде простая — при создании ресурса для него должна создаваться отдельная папка в ФС и доступ должен быть только к ней (анпример при закгрузке картинок в tinyMCE). Причина такого ограничения банальна — девочки менеджеры в легкую удаляют целые каталоги несмотря на кучу предупреждений, поэтому давать им доступ к папке с файлами всех ресурсов очень чревато, в то же время запрещать удаление не хочется т.к. файлы периодически обновляются и замусоривать папки не хочется.
Явное решение — опираться на id ресурса. И для редактирования уже существующего ресурса оно вполне подходит (mediasource + сниппет из migx). Но проблема в том что для новых ресурсов не существует id.
Варианты решений:
1) прятать редактор текста и tv при создании ресурса и показывать при редактировании (после сохранения). Вариант некрасивый и не очень удобный так как не все ресурсы будут содержать какие либо файлы.
2) автосохранять ресурсы при нажатии «создать новый ресурс». тоже не очень красиво, но в принципе терпимо. Проблема в том на событие OnDocFormRender нам не приходит resource и мы не можем документ сразу сохранить. Можно конечно вызвать яваскриптом клик по кнопке сохранить, но хотелось бы поизящнее.
3) Автосохранять документ только при попытке вызвать файлменеджер. Не придумал как отловить это событие :-[
4) Пожалуй самое незаметное решение — добавить скрытый tv в который при создании нового документа будет генерироваться уникальное значение, на все аякс запросы добавить параметр с этим значением и соответственно в сниппете генерировать папку на основе этого значения…
Собственно вопрос кто что думает и может подскажет? Мне почему то кажется что я изобретаю велосипед и где-нибудь есть решение поставленной задачи, но я к сожалению ничего не нашел :(
Комментарии: 6
Поставьте www.modmore.com/extras/redactor/
[[+id]] if available, the ID of the current resource. Added in 1.2.7Я так понимаю будет та же самая проблема — для новых ресурсов айди не существует до первого сохранения.
таки да… А создать ресурс и нажать кнопку сохранить… а потом заниматься размещением контента.
Ну это мы с вами люди опытные и не забудем, а если вдруг забудем то поймем что не так. А девочки способные удалить папку с итогами за полгода несмотря на два предупреждения… :) Потому и скрывать редактор не хочу, будут же звонки с вопросами «я создаю страничку а где текст вводить не пойму», даже если там капсом написать что вначале документ надо сохранить. Вот к сожалению контингент пользователей будет именно как в анекдотах и цитатах с баша, поэтому пытаюсь придумать что-нибудь внешне незаметное, но при этом ограничивающее шаловливые ручки.
а что если отлавливать сам факт создания документа. зашёл менеджер, нажал создать документ, а в это время плагин создает документ и менеджер получает уже созданный документ. для менеджера это выглядит как только что созданный, а на самом деле документ уже создан, имеет id и другие параметры.
надеюсь донёс идею.
надеюсь донёс идею.
Хоть и старая тема, но может кому-то как и мне нужен подобный функционал, поэтому выкладываю простое решение здесь
1) ставим пакет mixedimage который создает поле загрузки файлов с расширенными параметрами
2) создаем поле TV из mixedimage и указываем в настройках путь до файла {id}/ и теперь загружаться фотка будет в отдельную папку с номером ID ресурса
3) создаем новый плагин и выбираем событие OnResourceDelete, и прописываем такой код:
1) ставим пакет mixedimage который создает поле загрузки файлов с расширенными параметрами
2) создаем поле TV из mixedimage и указываем в настройках путь до файла {id}/ и теперь загружаться фотка будет в отдельную папку с номером ID ресурса
3) создаем новый плагин и выбираем событие OnResourceDelete, и прописываем такой код:
/** recursive remove dir function */
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir . "/" . $object) == "dir") {
rrmdir($dir . "/" . $object);
} else {
@unlink($dir . "/" . $object);
}
}
}
reset($objects);
$success = @rmdir($dir);
}
}
$path = $modx->getOption('base_path') . 'assets/images/'; // replace with actual path to directory
$path .= $id;
rrmdir($path);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.