Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #4
30 мая 2016, 00:49
3
+1
Итого вот:

В tpl.Tickets.comment.form вызываем форму загрузки файла:
{$_modx->runSnippet('!ufForm', [
    'class' => 'modUser',
    'list' => 'comment-' ~ $thread,
    'tplForm' => 'uf.form',
    'dropzone' => '{
        "maxFilesize": 2,
        "maxFiles": 5,
        "acceptedFiles": ".jpg, .jpeg, .gif, .png",
        "template": "edit"
    }',
])}

Важный момент, который ты почему-то не упомянул:
Чанк uf.form переписываем так, чтобы там не было тега form (заменяем его на div):
<div class="userfiles-form-wrapper">
    <div class="userfiles-form userfiles-dropzone" id="[[+propkey]]" data-clickable=".userfiles-form-clickable-[[+propkey]]" data-sorting="1">
        <div class="dz-message needsclick">[[%userfiles_msg_needsclick]]</div>
    </div>
    <a class="userfiles-form-clickable userfiles-form-clickable-[[+propkey]]">[[%userfiles_msg_select_files]]</a>
</div>
Не знаю, насколько это правильно, но работает. :)

В tpl.Tickets.comment.one.auth и tpl.Tickets.comment.one.guest прописываем вывод файлов комментария:
{$_modx->runSnippet('!pdoResources', [
    'class' => 'UserFile',
    'loadModels' => 'UserFiles',
    'limit' => 10,
    'tpl' => '@INLINE
        <div class="item pull-left">
            <a href="{$url}" rel="fancybox"><img src="{$thumb}" alt=""></a>
        </div>
    ',
    'leftJoin' => '{
        "Thumb": {
            "class": "UserFile",
            "on": "Thumb.parent = UserFile.id AND Thumb.properties LIKE \'%w\":120,\"h\":90%\'"
        }
    }',
    'select' => '{
        "UserFile": "url",
        "Thumb": "Thumb.url as thumb"
    }',
    'where' => '{
        "UserFile.class": "modUser",
        "UserFile.list": "comment-' ~ $id ~ '"
        
    }',
    'sortby' => '{"rank":"ASC"}',
])}

И плагин будет выглядеть так:
switch ($modx->event->name) {
    case 'OnCommentSave':
        if ($mode == 'new' && $modx->user->isAuthenticated($modx->context->key)) {
            $corePath = MODX_CORE_PATH.'components/userfiles/';
            if ($uf = $modx->getService('UserFiles', 'UserFiles', $corePath.'model/userfiles/', array('core_path' => $corePath))) {
                if ($files = $modx->getCollection('UserFile', array('parent' => $modx->user->id, 'list' => 'comment-'.$object->Thread->name))) {
                    foreach ($files as $file) {
                        $file->set('list', 'comment-'.$object->id);
                        $file->save();
                        
                        if ($children = $file->getMany('Children')) {
                            foreach ($children as $child) {
                                $child->remove();
                            }
                            $file->generateThumbnails();
                        }
                    }
                }
            }
        }
        break;
}

Костыльно, признаю… но другого ничего в голову не пришло. Помоему, просто с текущей версией UserFiles никак по другому не реализовать прикрепление изображений к комментариям.

— Обновлено --

Данная реализация разбивает файлы по группам comment-[[+id]], что позволяет более проще получить к ним доступ в бекенде на странице UserFiles или на вкладке UserFiles страницы редактирования юзера.
29 мая 2016, 23:55
+1
У тебя в плагине ошибка.
Ты получаешь все файлы юзера по его user_id, соответствующему свойству parent:
$files = $modx->getCollection('UserFile', array('parent' => $user_id));
Потом, ты у каждого файла перезаписываешь его parent, то бишь user_id, на id нового комментария:
$file->set('parent', $id);
Почему это плохо? Потому что юзер, чей id совпадает с id нового комментария, который ты напишешь, будет иметь доступ к тем фоткам, которые были добавлены в этот комментарий тобой. А ты доступа к этим фоткам уже не имеешь, по сути, ибо parent (читай user_id) файлов, которые были тобой загружены, уже не соответствует твоему user_id.
29 мая 2016, 21:38
+2
Я для себя понимаю так:
Это тип, к которому будет приведено значение полученное из базы, средствами xPDO. То бишь dbtype может быть text, а phptype — и string, и json.

Я читаю здесь — github.com/modxcms/revolution/blob/89c79f7ae886184dd4136cfe09663bf5c019ee7d/core/model/schema/modx.mysql.schema.xml
28 мая 2016, 22:34
0
Я не тестировал, но вряд ли.
23 мая 2016, 18:46
0
Скорее всего это из-за какого-то редактора, который навешивается на оригинальное поле контента. Я не тестировал пакет таким образом.
23 мая 2016, 15:48
0
В настройках контекстов погляди.
23 мая 2016, 15:45
0
Или может быть есть какое то решение что бы ограничить владельца сайта не натворить что нибудь в функционале сайта через админскую часть!
Этот компонент позволит сделать то, что нужно — modstore.pro/packages/users/modaccessmanager
22 мая 2016, 19:09
0
Прекрасно! А старый способ подключения колбеков останется?
16 мая 2016, 13:26
+1
Если я не ошибаюсь, то уже работает тег {ignore}. По крайней мере на крайних версиях pdoTools мне удавалось его использовать.
14 мая 2016, 14:10
+1
От этого безопасность страдает…
05 мая 2016, 23:33
0
А что не так с ExtJS?
05 мая 2016, 21:07
0
Поиграйся с сист. настройкой cache_resource, может поможет…
04 мая 2016, 16:59
0
Спасибо, я посмотрю, что можно с этим сделать. Что-то я не заметил этого раньше. А жаль.
27 апреля 2016, 17:51
0
Нет, такого нет. Это делается самостоятельно.
27 апреля 2016, 17:37
0
Нет. У меня загруз «по полной», что называется.
27 апреля 2016, 10:07
+1
Создашь плагин и отмечаешь галочками события, по которым он будет срабатывать.
25 апреля 2016, 13:03
+1
Автор очень занят, но не смотря на это начал разработку второй версии компонента, т.к. первая версия, как автор писал не раз, сделана настолько неправильно, что проще выпустить вторую, совершенно новую, без обратной совместимости с первой.
Вторая версия не будет ограничена только точками, в ней будет свой редактор карт, с ломанными линиями, многоугольниками и точками, что-то вроде официального конструктора, но написанного с нуля. Это будет отдельная вкладка в ресурсе. На примете ещё куча плюх, которые пока остаются в тайне. :)
24 апреля 2016, 21:23
+2
Поправил совместимость. Обновляйтесь.
24 апреля 2016, 09:48
0
Неа, там по иному делал я, т.к. реализация магазина требовала иного подхода. :)