Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #2
Павел Гвоздь
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.
Павел Гвоздь
29 мая 2016, 21:38
+2
Я для себя понимаю так:
Это тип, к которому будет приведено значение полученное из базы, средствами xPDO. То бишь dbtype может быть text, а phptype — и string, и json.

Я читаю здесь — github.com/modxcms/revolution/blob/89c79f7ae886184dd4136cfe09663bf5c019ee7d/core/model/schema/modx.mysql.schema.xml
Павел Гвоздь
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 мне удавалось его использовать.