Владимир

Владимир

С нами с 21 июня 2017; Место в рейтинге пользователей: #481
Владимир
05 мая 2020, 16:56
0
Тоже столкнулся с проблемой. Для себя нашел решение:

1. Для правильных значений в фильтре, добавил код на onFinish:
$(".range-slider").ionRangeSlider({
        range: true,
        type: "double",
        keyboard: true,
        input_values_separator: ",",
        onFinish:function(ui){
	    $(".range-slider").val(ui.from + ',' + ui.to);
            $(".range-slider").trigger("change");
	},
    });

2. Для того чтобы отключить постоянную перезагрузку фильтра при перемещении ползунка, в коде слайдера отключить событие change, в этой строке:
this.old_from === this.result.from && this.old_to ===
                        this.result.to || this.is_start || (this.$cache.input.trigger("change"), this.$cache.input.trigger("input"));
Владимир
06 мая 2019, 21:51
0
Эти права нужны, только для этого source не нужно, так как все папки автоматически создаются, а файлы можно только загрузить в нужную папку, которая автоматом проставляется

Спасибо )
Владимир
06 мая 2019, 19:42
0
Спасибо, то что нужно )

Переопределил после клика на кнопку и перед загрузкой диспетчера файлов MODx.perm.directory_create и MODx.perm.file_create. Надеюсь это нигде боком не вылезет в другом месте. Вот код вместе с кнопкой, может кому нужно будет

{
                xtype: 'button',
                scope: this,
                cls: 'x-btn-icon icon-folder directoryIcon',
                tooltip: {text: _('orders_item_directory_files')},
                handler: function(btn,e) {
                    MODx.perm.directory_create = false;
                    MODx.perm.file_create = false;
                    var browser = MODx.load({
                        xtype: 'modx-browser',
                        id: Ext.id(),
                        multiple: true,
                        source: orders.config['source'],
                        openTo: config.record.object.id + '/',
                        rootId: config.record.object.id + '/',
                        rootVisible: false,
                        hideSourceCombo: true,
                    });
                    browser.show();
                }
            }
Владимир
11 марта 2019, 16:13
0
спасибо )

буду благодарен, если по второму варианту скинете код на примере дефолтного кода
Владимир
04 января 2019, 16:37
0
По п.3 у меня не работает поле Путь к активам. Все что не пропишу в этом поле все равно используется корневая директория assets, даже если оставить поле пустое или заполнить несуществующим путем. В чем здесь может быть проблема?
Владимир
05 декабря 2018, 14:31
1
0
Решил проблему, может кому пригодится. Все это работает под extends modObjectGetListProcessor, в методе prepareQueryBeforeCount

$c->leftJoin('ordersClientSender', 'Client');
$c->leftJoin('ordersSender', 'Sender', '`Client`.`sender` = `Sender`.`id`');
$c->select($this->modx->getSelectColumns($this->classKey, $this->classKey));;
$c->select(array(
    'senders' => 'GROUP_CONCAT(Sender.name)'
));
$c->groupby($this->classKey.'.name');
Владимир
11 октября 2018, 23:08
1
+2
Привожу код, как это можно реализовать через процессор возможно кому-то пригодится

Код кнопки/ссылки:
{
                        xtype: 'button',
                        scope: this,
                        enableToggle: true,
                        iconCls : 'icon icon-xls',
                        handler: orders.utils.renderXLS,
                    }

Код обработчика(здесь важно чтобы в поля id был установлен параметр id):
orders.utils.renderXLS = function() {
    var orderID = Ext.getCmp('id');
    var _params = {
        action: 'mgr/item/xls',
        orderID: orderID.getValue(),
        HTTP_MODAUTH: MODx.siteId
    };
    link = orders.config.connector_url + '?' + Ext.urlEncode(_params);
    var win = window.open(link, '_blank');
    win.focus();
};

Код процессора:
<?php

class ordersItemXlsGetListProcessor extends modObjectGetListProcessor
{

    public $objectType = 'ordersItem';
    public $classKey = 'ordersItem';
    public $defaultSortField = 'id';
    public $defaultSortDirection = 'ASC';
    public $languageTopics = ['orders:default'];

    public function prepareQueryBeforeCount(xPDOQuery $c) {
        $c->select($this->modx->getSelectColumns($this->classKey, $this->classKey));

        $orderID = $this->getProperty('orderID');
        if($orderID){
            $c->where([
                'id' => $orderID,
            ]);
        }

        return $c;
    }


    public function process() {

        $beforeQuery = $this->beforeQuery();
        if ($beforeQuery !== true) {
            return $this->failure($beforeQuery);
        }

        $data = $this->getData();

        $this->createExcel($data);

        return '';
    }

    public function createExcel(array $data) {
        foreach ($data['results'] as $object) {
            if ($this->checkListPermission && $object instanceof modAccessibleObject && !$object->checkPolicy('list')) {
                continue;
            }
            $orderArr = $this->prepareRow($object);
            break;
        }

       //код формирования Excel файла

       return '';

    }

}
return 'ordersItemXlsGetListProcessor';
Владимир
26 сентября 2018, 14:29
0
Осталась только проблема с лексиконом. Никак не получается его подключить в файл JS. Как я понимаю это нужно делать в плагине, но подключение $modx->lexicon->load('orders:default'); ничего не дает
Владимир
26 сентября 2018, 14:25
0
спасибо )

Проблему решил следующим образом

1. Добавил событие OnUserFormRender и код в плагин

case 'OnUserFormRender':
        if($mode != 'new'){
            $fieldExt = $user->getOne('Profile')->get('extended');
            $modx->regClientStartupHTMLBlock('
				<script type="text/javascript">
    				Ext.onReady(function() {
        				Ext.getCmp(\'modx-user-manager\').setValue(' . $fieldExt['manager'] . ');
					})	
				</script>
			');
        }
        break;
2. Добавил параметр ID , в результате получилось
items: [{
            id: 'modx-user-manager',
            xtype: 'modx-orders-manager',
            name: 'modx-user-manager',
            fieldLabel: 'Менеджер',
            width: 176,
        }
        ]
Владимир
21 сентября 2018, 16:14
0
спасибо то что нужно )

Единственное что у меня не сработала эта строка в компоненте
if (MODx.perm.edit_grid)
плагин данные передавал, но MODx.perm.edit_grid всегда возвращал false. Не знаю в чем здесь проблема, поэтому код с плагина переписал под контроллер компонента. Для меня это даже удобнее, если нужно будет добавлять новые настройки политики доступа.
Владимир
05 июня 2018, 12:01
1
0
спасибо, все работает замечательно

Единственный момент, если у вас есть вариант оплаты Наличными при получении, нужно вот здесь

elseif ($payment = $this->modx->getObject('msPayment',
	array('id' => $order->get('payment'), 'active' => 1))
)
заменить на

elseif ($payment = $this->modx->getObject('msPayment',
	array('id' => $order->get('payment'), 'active' => 1) && $order->get('payment') != 1)
			)
где 1 — ID оплаты Наличными при получении
Владимир
02 августа 2017, 18:29
0
Спасибо за советы. Для дерева ресурсов буду использовать miniShop2, для товаров отключу кэширование и это должно решить проблему с большим кэшем. В принципе других проблем наблюдаться не должно. Еще вопрос о поиске в админке, он будет «живой» после загрузки того количества товаров?
Владимир
21 июня 2017, 21:13
0
проблема была вот здесь

hiddenName: config.name || 'level'