Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #3
Павел Гвоздь
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.