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

Futuris
27 ноября 2022, 13:38
0
Вот так я я тогда))
Рушан
27 ноября 2022, 13:27
0
Всё решилось, написал хостеру, сказали, что то там поправили и вроде работает. Правда летит всё в спам.
Спасибо всем!
Futuris
27 ноября 2022, 11:57
0
Привет! Уже не помню — давно было. Вроде там чисто у хостеров был вопрос — написал им и все решилось.
Александр Туниеков
27 ноября 2022, 11:52
0
Из лицензии mSearch2
«that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs»
«вы можете изменить программное обеспечение или использовать его части
в новых бесплатных программах;»
Так получилось что в FacetSearch который я только что написал 90% кода в js файле скопированно из mSearch2.
По лицензии я вроде могу это делать? Как вы к этому относитесь?
Просто js код я придумать лучше не могу :-(. PHP часть совершенно другая.
Николай Савин
27 ноября 2022, 10:05
+3
Призываю всех участников беседы проявить сдержанность и дружелюбие (кому что проще) и далее обсуждать только тему поста без перехода на личности.
Alexey
27 ноября 2022, 00:03
0
После раздумий на свежую голову, допер наконец-то, что данные, которые прилетают в комбобокс из базы при открытии модального окна, нужно смотреть в общем процессоре get.class.php, а не процессоре, который в комбобокс отдает список пользователей. Разумеется, из процессора get приходит массив айдишников юзеров — skrinshoter.ru/s/261122/swgV0bFJ, а нужен массив, соответствующий комбобоксу — skrinshoter.ru/s/261122/OUfflCjn. Остальное дело техники, добавил нужный код в метод cleanup:

public function cleanup() {
    $array = $this->object->toArray();
    
    $tmp = [];
    foreach($array['properties'] as $key => $item) {
        if($tmp_user = $this->modx->getObject('modUser', $item)) {
            $tmp[$key]['id'] = $item;
            $tmp[$key]['username'] = $tmp_user->get('username');
        }
    }
    $array['properties'] = $tmp;

    return $this->success('', $array);
}

из кода самого комбика выкинул лишее:

RewardsPupil.combo.Options = function (config) {
    config = config || {};
    Ext.applyIf(config, {
        xtype: 'superboxselect',
        allowBlank: true,
        allowAddNewData: true,
        addNewDataOnBlur: false,
        resizable: true,
        name: 'properties',
        anchor: '100%',
        minChars: 2,
        store: new Ext.data.JsonStore({
            id: (config.name || 'properties') + '-store',
            root: 'results',
            autoLoad: true,
            autoSave: false,
            totalProperty: 'total',
            fields: ['username','id'],
            url: RewardsPupil.config.connector_url,
            baseParams: {
                action: 'mgr/user/getoptions',
            }
        }),
        mode: 'remote',
        displayField: 'username',
        displayFieldTpl: '{username} ({id})',
        valueField: 'id',
        triggerAction: 'all',
        extraItemCls: 'x-tag',
        expandBtnCls: 'x-form-trigger',
        clearBtnCls: 'x-form-trigger',
        renderTo: Ext.getBody(),
    });
    config.name += '[]';
    RewardsPupil.combo.Options.superclass.constructor.call(this,config);
};
Ext.extend(RewardsPupil.combo.Options, Ext.ux.form.SuperBoxSelect);
Ext.reg('rewardspupil-combo-options', RewardsPupil.combo.Options);

Всё завелось — skrinshoter.ru/s/261122/6GN8iS6i.

В который раз убеждаюсь, что нельзя упираться надолго, если не получается найти решение, только мозг закипает… Голову проветрил и сразу дело пошло.
Артур Шевченко
26 ноября 2022, 23:55
0
На сервере может быть запрет на отправку писем через функцию mail(), тогда надо настраивать SMTP. Ещё может быть запрет на отправку с рандомного ящика, но это как правило только на тех хостингах где чтобы отправлялись письма, нужно создавать почту на хостинге. Ещё отправитель может быть просто не указан или не указана тема письма. Ещё могут быть хуки, которые что-то ломают. Некорректная разметка. Ещё может быть поле указано в параметре validate, но не передаётся на сервер, так как его нет в форме.
Рушан
26 ноября 2022, 21:04
0
Здравствуйте!
А как вы решили эту проблему, что изменили на сервере?
У меня сейчас такая же проблема не проходит валидацию.
Артур Шевченко
26 ноября 2022, 12:13
0
miniShop2.Callbacks.add — это функция добавления твоего колбэка в массив колбэков. Ты можешь добавить свой коллбэк на событие Cart.add.before. И в этом коллбэке ты можешь проверять есть ли в куках id добавляемого товара, если нет записывать. Либо ты можешь слать запрос на сервер и там проверять что есть в корзине.
Сергей
26 ноября 2022, 11:55
0
А админке и в базе сделал, но не смог найти как сделать вывод с учетом отступов (с новой строки).

easyComm.plugin.myplugin = {
      getFields: function(config) {
            return {
                  field1: {xtype: 'textarea', fieldLabel: _('ec_message_field1'), anchor: '99%'},
                  field2: {xtype: 'textarea', fieldLabel: _('ec_message_field2'), anchor: '99%'},
            }
      }
      ,getColumns: function() {
            return {
                  field1: {width:50, sortable:true, name: 'field1'},
                  field2: {width:50, sortable:true, name: 'field2'}
            }
      }
};
И тут изменил
<?php
return array(
   'fields' => array(
        'field1' => NULL,
        'field2' => NULL,
    )
   ,'fieldMeta' => array(
        'field1' => array(
            'dbtype' => 'text'
            ,'precision' => '50'
            ,'phptype' => 'string'
            ,'null' => true
            ,'default' => NULL
        ),
        'field2' => array(
            'dbtype' => 'text'
            ,'precision' => '50'
            ,'phptype' => 'string'
            ,'null' => true
            ,'default' => NULL
        )
    )
    ,'indexes' => array(

    )
);
Сергей
26 ноября 2022, 10:41
0
Добрый день!
весь форум перечитал, но не нашел ответа.
Как сделать дополнительные поля в админке не imput а textarea?
Ввод сделать в виде textarea, но пробелы и табы не учитывается и текст слепляется. Думаю все из-за imput
Роман
26 ноября 2022, 10:02
0
Если коротко (а то запутанно мне кажется я описал), то я хочу при нажатии на кнопку проверять асинхронно, что есть в корзине и уже в зависимости от ответа через JS делать определенные действия.
Вот :)
Илья Александрович
26 ноября 2022, 00:03
1
+1
вот решение:
{'!mFilter2' | snippet : [
                            'class' => 'msProduct',
                            'element' => 'msProducts',
                            'loadModels' => 'msTopProducts',
                            'parents' => $_modx->resource.id,
                            'showHidden' => '0',
                            'showUnpublished' => '0',
                            'hideContainers' => '0',
                            'showLog' => '0',
                            'suggestions' => '1',
                            'ajaxMode' => 'default',
                            
                            'includeThumbs' => 'medium,480x576',
                            'tpls'  => 'tpl.product.block,tpl.product.row',
                            
                            'tplOuter' => 'tpl.mFilter2.outer',
                            'tplFilter.outer.default' => 'tpl.mFilter2.filter.outer',
                            'tplFilter.row.default' => 'tpl.mFilter2.filter.checkbox',
                            
                            'filters' => '
                                resource|parent:parents,
                            ',
    
                            'leftJoin'=>'{
                                "P1": {
                                    "class": "msProductOption",
                                    "on": "P1.key = \'p1\' and P1.product_id = msProduct.id"
                                },
                                "P2": {
                                    "class": "msProductOption",
                                    "on": "P2.key = \'p2\' and P2.product_id = msProduct.id"
                                },
                            	"msTopProduct" : {
                            		"class" : "msTopProduct",
                            		"alias" : "msTopProduct",
                            		"on" : ["msTopProduct.product_id = msProduct.id", "msTopProduct.category_id = ' ~ $_modx->resource.id ~ ' "]
                            	}
                            }',   
                        
                            'sortAliases' => '{"p1":"P1","p2":"P2"}',
                            'aliases' => 'p1|value==p1,p2|value==p2',
                            
                            'sortby' => '{"msTopProduct.rank":"DESC", "msProduct.menuindex":"ASC"}',
                            
                            'limit' => '9',
                            'pageLimit' => '7',
                            
                            'tplPage' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]">[[+pageNo]]</a></li>',
                            'tplPageWrapper' => '@INLINE <div class="col-12 pagination justify-content-center"><ul class="pagination">[[+first]][[+prev]][[+pages]][[+next]][[+last]]</ul></div>',
                            'tplPageActive' => '@INLINE <li class="page-item active"><span class="page-link">[[+pageNo]]</span></li>',
                            'tplPageFirst' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]"><i class="fas fa-angle-double-left"></i></a></li>',
                            'tplPageLast' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]"><i class="fas fa-angle-double-right"></i></a></li>',
                            'tplPagePrev' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]"><i class="fas fa-angle-left"></i></a></li>',
                            'tplPageNext' => '@INLINE <li class="page-item control"><a class="page-link" href="[[+href]]"><i class="fas fa-angle-right"></i></a></li>',
                            'tplPageSkip' => '@INLINE <li class="page-item disabled"><span>...</span></li>',
                            'tplPageFirstEmpty' => '@INLINE ',
                            'tplPageLastEmpty' => '@INLINE ',
                            'tplPagePrevEmpty' => '@INLINE ',
                            'tplPageNextEmpty' => '@INLINE ',
                            'ajaxTplMore' => '@INLINE <button class="btn btn-outline-danger rounded-0 my-3 btn-more">Загрузить ещё</button>',
                        ]}
Артур Шевченко
25 ноября 2022, 23:34
0
Наверное он доку открыл и понял, что leftJoin тут не нужен.
Hiiragi
25 ноября 2022, 23:21
0
как-то решилась проблема?
Руслан
25 ноября 2022, 23:09
0
Если включить премодерацию, то дополнительные поля не сработают. Вроде бы так писали. Премодерацию нужно будет делать после размещения отзыва.
Руслан
25 ноября 2022, 23:03
0
Решение нашёл. В файле /assets/components/tickets/js/mgr/comment/comment.window.js добавляете дополнительное поле

, {
		  xtype: 'displayfield',
		  fieldLabel: 'Комментарий',
		  html: config.record.properties['comment-plus'],
		  anchor: '99%',
		}
config.record.properties['comment-plus'] вместо comment-plus любой объект из поля properties в БД.
Руслан
25 ноября 2022, 23:02
0
Решение нашёл. В файле /assets/components/tickets/js/mgr/comment/comment.window.js добавляете дополнительное поле

, {
		  xtype: 'displayfield',
		  fieldLabel: 'Комментарий',
		  html: config.record.properties['comment-plus'],
		  anchor: '99%',
		}
config.record.properties['comment-plus'] вместо comment-plus любой объект из поля properties в БД.
Руслан
25 ноября 2022, 22:48
0
Решение нашёл. В файле /assets/components/tickets/js/mgr/comment/comment.window.js добавляете дополнительное поле

, {
		  xtype: 'displayfield',
		  fieldLabel: 'Комментарий',
		  html: config.record.properties['comment-plus'],
		  anchor: '99%',
		}
config.record.properties['comment-plus'] вместо comment-plus любой объект из поля properties в БД.
Алексей Смирнов
25 ноября 2022, 22:42
0
Приведите код который пытается отсортировать, то как вы делаете.
Тк не очень понятно в чем трудность.