Всего 123 788 комментариев

Сергей С
16 июня 2023, 13:01
0
Будет ли работать если фид на стороннем сайте? Умеет ли обновлять уже загруженные товары? Подтянет ли фото со стороннего сайта? Зачем нужен feed_id?
Сергей С
16 июня 2023, 12:40
0
Так пробовал. не работает в самом начале оба эти варианта указал.
Кровельный
16 июня 2023, 12:21
0
Как добавить множественный список с автодополнением в ресурс/документ (свое кастомное поле tags_cloud), также как реализовано tags в ms2?
Например, у ресурса уже есть в бд значения ["тег 1","тег 2","тег 3"], но в супер-селекте они не выводятся и не вводятся. Есть у кого подсказка или решение?

В таблице modx_site_content добавлена структура tags_cloud
Плагин:
<?php
switch ($modx->event->name) {
    case "OnMODXInit":
        $modx->loadClass('modResource');    
        $map = array(
            'modResource' => array(
                'fields' => array(
                    'tags_cloud' => null,
                ),
                'fieldMeta' => array(
                    'tags_cloud' => array(
                        'dbtype' => 'varchar',
                        'precision' => '100',
                        'phptype' => 'json',
                        'null' => true,
                    ),
                ),
            ),
        );
        
        foreach ($map as $class => $data) {
            $modx->loadClass($class);
            foreach ($data as $tmp => $fields) {
                if ($tmp == 'fields') {
                    foreach ($fields as $field => $value) {
                        foreach (array('fields', 'fieldMeta', 'indexes') as $key) {
                            if (isset($data[$key][$field])) {
                                $modx->map[$class][$key][$field] = $data[$key][$field];
                            }
                        }
                    }
                } elseif ($tmp == 'composites' || $tmp == 'aggregates') {
                    foreach ($fields as $alias => $relation) {
                        if (!isset($modx->map[$class][$tmp][$alias])) {
                            $modx->map[$class][$tmp][$alias] = $relation;
                        }
                    }
                }
            }
        }
        break;
    case 'OnDocFormPrerender':
        $tags_cloud = $resource->get('tags_cloud');
        $tags_cloud = $modx->toJSON($tags_cloud);
        $modx->log(1, print_r($tags_cloud, 1));
        
        $modx->controller->addHtml("
        <script type='text/javascript'>
            Ext.ComponentMgr.onAvailable('modx-panel-resource', function(){
                const leftCol = this.items[1].items[0].items[0].items[0];
                const rightCol = this.items[1].items[0].items[0].items[1];
                config = [] || config || {};
                
                const tags_cloud = {
                    typeAhead: true,
                    triggerAction: 'all',
                    lazyRender: true,
                    resizable: true,
                    anchor: '100%',
                    description: '<b>[[*tags_cloud]]</br>Облако тегов</b>',
                    fieldLabel: 'Облако тегов',
                    id: 'modx-resource-tags_cloud',
                    maxLength:255,
                    msgTarget: 'under',
                    name:'tags_cloud',
                    hiddenName: 'tags_cloud',
                    xtype: 'superboxselect', // combo, modx-combo - одиночный выбор, а combobox и другие не работают
                    store: new Ext.data.JsonStore({
                        id: 'tags_cloud-store',
                        root: 'results',
                        autoLoad: false,
                        autoSave: false,
                        totalProperty: 'total',
                        //fields: ['value'],
                        fields: $tags_cloud,
                        url: MODx.config.connectorUrl,
                        baseParams: {
                            action: 'mgr/item/getoptions',
                            key: 'tags_cloud'
                        }
                    }),
                    mode: 'remote',
                    displayField: 'value',
                    valueField: 'value',
                    
                    extraItemCls: 'x-tags_cloud',
                    expandBtnCls: 'x-form-trigger',
                    clearBtnCls: 'x-form-trigger',
                    renderTo: Ext.getBody(),

                    editable: true,
                    selectOnFocus: false,
                    preventRender: true,
                    forceSelection: true,
                    enableKeyEvents: true,
                    displayField: ['value'],
                    valueField: ['value'],
                    //value: $tags_cloud,
                    hiddenValue: $tags_cloud,
                    emptyText: 'Выбирете или введите теги',
                    tpl: new Ext.XTemplate('<tpl for=\".\"><div class=\"x-combo-list-item\"><span>{value}</span></div></tpl>',{ compiled: true })
                }

                rightCol.items.splice(3, 0,  tags_cloud); // поле выводится там где сменить Шаблон, Пункт меню
            });
        </script>");
    break;
}
Артур Шевченко
16 июня 2023, 10:47
0
Скорее всего тут
'where' => '{«Data.is_general:=»:1,«OR:id:IN»:'.$dop.'}',
получается не валидный json. Думаю должно быть так
'where' => '{"Data.is_general:=":1,"OR:id:IN":"'.$dop.'"}',
Максим
16 июня 2023, 09:30
+1
Вся эта идея с генерацией уникального ключа для каждой формы, помещения по этому ключу данных в сессию, при отправке формы считываная этого с сессии… вызывает ощущение дикого костыля.
А для чего тогда нужно использовать сессии в PHP, если не для этого в том числе? Когда лет 10 назад (а то и больше) изучал PHP, препод как раз так и предлагал делать: хранить данные формы в сессии! Думаю, ничего принципиально нового в подходе не поменялось за это время… если мы говорим именно про PHP.
Александр Мельник
16 июня 2023, 07:36
+1
спасибо, Алексей.
нужная вещь и сделана с душой, код качественный.
Сергей С
15 июня 2023, 22:32
0
ну там огромный сниппет для ajax в нем подгружается список товаров. То есть внутри сниппета мы вызываем сниппет. И передаем параметры, а в выборке 'where' => '{«Data.is_general:=»:1,«OR:id:IN»:'.$dop.'}',
Смысл его весь скидывать если загвоздка в паре строк:
$dop = '83595,5693,4659';
$option_par = array(
'parents' => $parent,
'where' => '{«Data.is_general:=»:1,«OR:id:IN»:'.$dop.'}',
'limit' => 0,
'tpl' => 'tpl.checkbox',
);
$content = $modx->runSnippet('msProducts',$option_par);
Артур Шевченко
15 июня 2023, 21:37
0
Тогда код спиппета покажи
Сергей С
15 июня 2023, 21:31
0
Но это не феном. Это в сниппете там php.
Артур Шевченко
15 июня 2023, 19:31
0
Просто удали одинарные кавычки. А ещё конкатенация строк в Fenom делается через '~', а не через точку.
Vladislav
15 июня 2023, 17:16
0
если закомментировать эти строчки
//$q->groupby("{$this->classManager}.id");
        //$q->sortby("COUNT({$this->classChat}.mid)", "ASC");
в
modtelegrm.class.php
в методе
getAvailableManagerByUid()
то начинает работать, но это пока менеджер один, если будет больше одного, то не уверен что работоспособность сохраниться.
Vladislav
15 июня 2023, 16:07
0
С регистрацией менеджера в телеге разобрался. Пользователь искаля по полю email в профиле т.е. среди массива объектов ModUserProfile. Назначил пользователю email без собаки и домена, совпадающий с именем. Теперь стало так:

Но, в диалоге Хелпера все равно выводится «Нет доступных менеджеров». Буду думать дальше…
Евгений Webinmd
15 июня 2023, 14:21
0
в статье написано что можно. Также в исходниках есть файл, в котором можно прописать список полей. Такие же файлы есть для сниппетов/ресурсов/плагинов
Артур Шевченко
15 июня 2023, 13:58
0
Можно ли настраивать список создаваемых ТВ, сниппетов, ресурсов?
Валерий
14 июня 2023, 16:12
0
А вот у меня не сработала альтернативная проверка.
Единственное, у моей формы работает валидация на большинстве устройств, а вот у одного сотрудника на Safari 14 проверка не осуществляется и форма переходит на страницу «Спасибо». Сама форма, само собой, не отправляется.

Как думаете, что еще можно сделать? Кроме насильного обновления браузера…

[[!AjaxForm?
    &snippet=`FormIt`
    &preHooks=`Formit2AjaxUpload`
    &hooks=`AjaxUpload2Formit,AjaxUploadAttachments,pdf,email,FormItAutoResponder`
    &ajaxuploadFieldname=`image`
    &ajaxuploadTarget=`images/user/`
    &ajaxuploadUid=`image`
    &form=`tpl_form_ind_member`
    &emailTpl=`tpl_email`
    &pdfTpl=`tpl_PDF_ind_member`
    &cssTpl=`tpl_css_user`
    &author=`orgi_ru`
    &title=`Заявка: Гештальт-терапевт, действительный член`
    &emailSubject=`Заявка: Гештальт-терапевт, действительный член`
    &emailTo=`ysilence@yandex.ru,argigt@mail.ru`
    &emailFrom=`info@argigt.ru`
    &fiarReplyTo=`argigt@mail.ru`
    &fiarFrom=`info@argigt.ru`
    &fiarSender=`info@argigt.ru`
    &fiarFromName=`АРГИГТ`
    &fiarTpl=`tpl_email`
    &fiarToField=`email_sender`
    &fiarSubject=`Анкета на вступление в ассоциацию`
    &validate=`email_sender:email:required, fio_sender:required, phone_sender:required, passportNumber_sender:required, passportMVD_sender:required, passportDate_sender:required, adress_sender:required, born_sender:required, workPlace_sender:required, workPost_sender:required, instName_sender:required, instArgigt1_sender:required, instArgigt2_sender:required, instArgigt3_sender:required`
    &validationErrorMessage=`Ошибка в форме`
    &successMessage=`Сообщение отправлено`
    &submitVar=`fizassociate`
]]
И скрипт:

$(function(){
    $(document).on('af_complete', function(event, response) {
        var form = response.form;
        if (form.attr('id') == 'form-anketa' && response.success) {
    	   window.location.href = "https://argigt.ru/vasha-zayavka-otpravlena.html"
        }
    });
});
Miša Bulic
14 июня 2023, 15:47
+2
вот уже неделя прошла =)
Dan
Dan
13 июня 2023, 21:40
0
В плагине на событие msopOnModificationBeforeSave не получается сравнить старые и новые значения, ибо в этот момент новые значения уже сохранились у модификации. Вроде событие должно срабатывать до сохранения и можно сравнить массив $_POST и значения модификации. Но они равны.