Каждому пользователю отдельная папка для изображений в Joomla
Для одного из проектов понадобилось сделать форму добавления материалов. Так же нужно было добавить поле с intro картинкой. При выборе изображения у нас отображается общая папка для всех пользователей, что не есть хорошо, т.к. каждый сможет посмотреть фото других пользователей. Попытаемся это исправить.
К сожалению, придется затронуть исходники компонента. При обновлении код может затереться, придется его заново прописывать.
1. Для начала надо настроить медиа-менеджер. Заходим в его настройки
2. В «Путь к каталогу с изображениями» прописываем нужную папку, где будут лежать файлы для каждого отдельного пользователя и в конце добавляем /$id.
Идея такая — мы будем искать строку /$id и менять ее на id пользователя.
3. Отправляемся к файлу /components/com_media/media.php. В joomla 3 используется один файл для админки и сайта, править надо /components/administrator/com_media/media.php.
Ищем строку
1 | // Set the path definitions |
После нее добавляем
1 2 3 4 5 6 | $path = $params->get('image_path', 'images'); $path = str_replace('$id', $user->id, $path); $params->set('image_path', $path); if(!file_exists(JPATH_ROOT.'/'.$path)) { mkdir(JPATH_ROOT.'/'.$path); } |
Здесь мы считываем параметр, который указали в настройках. Заменяем $id на id текущего пользователя и переписываем значение параметра.
4. После тестирования обнаружилось, что после того, как изображение загружено и мы хотим его сменить — у нас некорректно отображается список файлов в папке. (для joomla 3 этот пункт пропускаем)
Поправить это можно в файле /libraries/joomla/form/fields/media.php
После
1 | // The button. |
Добавляем
1 2 3 4 5 | $user = JFactory::getUser(); $path = explode('/', JComponentHelper::getParams('com_media')->get('image_path', 'images')); array_shift($path); $path = str_replace('$id', $user->id, implode('/', $path)); $folder = str_replace($path, '', $folder); |
Все!
Недостаток в данном случае, что ограничение получают абсолютно все пользователи.
Комментарии к Каждому пользователю отдельная папка для изображений в Joomla (7)
Lex
Неплохо, может и с третьей прокатить. Но как быть с к2, туда ведь тоже прикрутить рут нужно, подправить медиа.пхп в папке контроллерс компонента. Есть соображения?
Delfi Post author
Увы, но с K2 очень давно не работал, не смогу подсказать, как мне кажется, там куда более сложнее реализовать, т.к. все таки конструктор.
Topis Started
Получается что удалять нельзя? Пробовал менять права, ничего не происходит.
Delfi Post author
Удалять должно быть можно. Сейчас не могу сориентировать, но возможно, где-то нужно подправить скрипт, который скорей всего при удалении учитывает старые пути.
Надо смотреть логи ошибок при удалении, что в них пишется.
topicstarted
Как в 3.22 сделать как же?
Delfi Post author
Поставил сейчас для теста. Как я понял, нужно делать правки только в одном файле.
Вместо /components/com_media/media.php идем в /administrator/components/com_media/media.php, т.е. они объединили код в один. Однако, тогда и в админке будет привязка к пользователю.
А файл /libraries/joomla/form/fields/media.php вообще убран. Но без него работает и так. Попробовал вставить картинку — все сработало и так.
virtschool inua
спасибо, то решение которое и искал, все получилось )