Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #4
05 июня 2016, 18:04
0
Думаю возможно, но надо будет ещё вешать плагин на событие OnUserSave.

если хочется без доп таблиц
Тут нет доп таблиц, здесь ты расширяешь системную таблицу своими полями.
04 июня 2016, 23:13
0
Спасибо за GROUP_CONCAT, разобрался.
А зачем тебе второй аккаунт тут?)
04 июня 2016, 20:48
0
Возможно, лучше джоинить изображения, чем вызывать в каждом комментарии pdoResources
Покажи, пожалуйста, пример, как ты заджоинишь к комментарию 10-50 файлов (в зависимости от кол-ва загруженных юзером) + превьюшки, если файл является изображением?
03 июня 2016, 20:37
0
Возможно ли получить в чанке tpl чистый урл от &pageId (без гет-параметра tag)?
Возможно, продублировав и дописав в сниппет то, что нужно.
03 июня 2016, 12:15
+2
Не писать свой обработчик. :)

1) Можешь заказать доработку.
2) Можешь написать в поддержку дополнения на modstore и расписать подробнее, прикрепив доступ к бекенду. Если там не долго, я постараюсь помочь.
01 июня 2016, 07:01
+2
Возможно причина в том, что процессор getlist неправильно отдаёт данные для комбобокса. А возможно, что надо не
new Ext.form.ComboBox
а
new MODx.combo.moSpecializations
писать.
Я не могу сказать точно, тебе будет проще всё это проверить самому. И вообще, неплохо почитать исходники компонентов, которые уже делают что-то подобное, например miniShop2 и сравнить со своим кодом. А также, читать документацию по ExtJS 3.4. И пробовать, пробовать, пробовать… У меня только так получается разобраться с ошибками при написании компонентов.
01 июня 2016, 05:38
+1
А возможно проверить, а потом спрашивать, если что-то не получается и проблему не удаётся решить?) Тем более, для проверок есть замечательный хостинг с тестовым тарифом за 0 рублей.
31 мая 2016, 07:18
0
Что значит «категории юзеров»? Как их разделять будешь? По участию в группе «Пациенты», «Врачи»?
Вообще можно, если так, но надо понимать, что при назначении группы, смены набора полей происходить не будет. Ибо при входе на страницу редактирования юзера в код будет подгружен один набор полей для нужной группы, либо не будет подгружен никакой вообще, т.к. юзер не состоит ни в той, ни в другой группе. И когда мы будем менять группу у юзера на вкладке «Права доступа», то нам нужно будет совершать перезагрузку страницы вручную, чтобы подгрузить нужный набор полей.
Проще создать отдельную вкладку для всех новых полей и там разделить их между собой либо подвкладками, как это сделано в новой версии miniShop2, либо FieldSet-ами.
31 мая 2016, 03:57
1
+2
Интересный момент в том, что эти поля можно вызывать во фронтенде, как обычные поля юзера:
[[+modx.user.id:userinfo=`new_checkbox`]]
[[+modx.user.id:userinfo=`new_field`]]
или
{0 | user : 'new_checkbox'}
{0 | user : 'new_field'}
30 мая 2016, 23:47
0
Володя, а возможно при вызове сниппета как-то отключить ручную сортировку файлов?
30 мая 2016, 13:46
0
Спасибо, готово! Была утрачена совместимость с ранними версия PHP, относительно 5.5. Обновил пакет на твоём сайте.

Я наверное первый бета-тестер)
Пакет тестировался на сайте заказчика пакета. Так что нет, ты не первый бета-тестер. Ты первый тестер с PHP 5.4. :)
30 мая 2016, 01:02
+2
Чтобы ufForm не мешал работать нативным модалкам Bootstrap, надо прописать это где-нибудь в шапке:
<script>
    jQuery.Modal = jQuery.Modal || true;
</script>

Надеюсь автор поправит этот неприятный момент в новой версии.
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.