Всего 125 668 комментариев

Кирилл
19 марта 2021, 03:43
0
спасибо за совет

нашёл
Нет отображение производителей в MiniShop2

Думал вот как бы так сделать чтобы например при логине с настроенными определёнными ACL поставщик только свои заказы мог видеть

ради интереса разбирался

Пробывал поменять Orders

/assets/components/minishop2/js/mgr/orders/orders.form.js

miniShop2.panel.OrdersForm = function (config) {
    config = config || {};
    if (!config.id) {
        config.id = 'minishop2-form-orders';
    }

    Ext.apply(config, {
        layout: 'form',
        cls: 'main-wrapper',
        defaults: {msgTarget: 'under', border: false},
        anchor: '100% 100%',
        border: false,
        items: this.getFields(config),
        listeners: this.getListeners(config),
        buttons: this.getButtons(config),
        keys: this.getKeys(config),
    });
    miniShop2.panel.OrdersForm.superclass.constructor.call(this, config);
};
Ext.extend(miniShop2.panel.OrdersForm, MODx.FormPanel, {

    grid: null,

    getFields: function (config) {
        return [{
            layout: 'column',
            items: [{
                columnWidth: .308,
                layout: 'form',
                defaults: {anchor: '100%', hideLabel: true},
                items: this.getLeftFields(config),
            }, {
                columnWidth: .37,
                layout: 'form',
                defaults: {anchor: '100%', hideLabel: true},
                items: this.getCenterFields(config),
            }, {
                columnWidth: .322,
                layout: 'form',
                defaults: {anchor: '100%', hideLabel: true},
                items: this.getRightFields(config),
            }],
        }];
    },

    getLeftFields: function (config) {
        return [{
            xtype: 'datefield',
            id: config.id + '-begin',
            emptyText: _('ms2_orders_form_begin'),
            name: 'date_start',
            format: MODx.config['manager_date_format'] || 'Y-m-d',
            listeners: {
                select: {
                    fn: function () {
                        this.fireEvent('change');
                    }, scope: this
                },
            },
        }, {
            xtype: 'datefield',
            id: config.id + '-end',
            emptyText: _('ms2_orders_form_end'),
            name: 'date_end',
            format: MODx.config['manager_date_format'] || 'Y-m-d',
            listeners: {
                select: {
                    fn: function () {
                        this.fireEvent('change');
                    }, scope: this
                },
            },
        }, {
            xtype: 'minishop2-combo-status',
            id: config.id + '-status',
            emptyText: _('ms2_orders_form_status'),
            name: 'status',
            addall: true,
            listeners: {
                select: {
                    fn: function () {
                        this.fireEvent('change')
                    }, scope: this
                }
            }
        }];
    },

    getCenterFields: function () {
        return [{
            xtype: 'displayfield',
            id: 'minishop2-orders-info',
            html: String.format('\
                <table>\
                    <tr class="top">\
                        <td><span id="minishop2-orders-info-num">0</span>
{0}</td>\
                        <td><span id="minishop2-orders-info-sum">0</span>
{1}</td>\
                    </tr>\
                    <tr class="bottom">\
                        <td><span id="minishop2-orders-info-month-num">0</span>
{2}</td>\
                        <td><span id="minishop2-orders-info-month-sum">0</span>
{3}</td>\
                    </tr>\
                </table>',
                _('ms2_orders_form_selected_num'), _('ms2_orders_form_selected_sum'),
                _('ms2_orders_form_month_num'), _('ms2_orders_form_month_sum')
            ),
        }];
    },

    getRightFields: function (config) {
        return [{
            xtype: 'textfield',
            id: config.id + '-search',
            emptyText: _('ms2_orders_form_search'),
            name: 'query',
        }, {
            xtype: 'minishop2-combo-user',
            id: config.id + '-user',
            emptyText: _('ms2_orders_form_customer'),
            name: 'customer',
            allowBlank: true,
            listeners: {
                select: {
                    fn: function () {
                        this.fireEvent('change')
                    }, scope: this
                }
            }
        },

// то что было добавлено по примерному пониманию

        {
            xtype: 'minishop2-combo-vendor',
            id: config.id + '-user',
            emptyText: _('ms2_orders_form_vendor'),
            name: 'vendor',
            allowBlank: true,
            listeners: {
                select: {
                    fn: function () {
                        this.fireEvent('change')
                    }, scope: this
                }
            }
        },
//



         {
            xtype: 'minishop2-combo-context',
            id: config.id + '-context',
            emptyText: _('ms2_orders_form_context'),
            name: 'context',
            allowBlank: true,
            listeners: {
                select: {
                    fn: function () {
                        this.fireEvent('change')
                    }, scope: this
                }
            }
        }];
    },

    getListeners: function () {
        return {
            beforerender: function () {
                this.grid = Ext.getCmp('minishop2-grid-orders');
                var store = this.grid.getStore();
                var form = this;
                store.on('load', function (res) {
                    form.updateInfo(res.reader['jsonData']);
                });
            },
            afterrender: function() {
                var form = this;
                window.setTimeout(function() {
                    form.on('resize', function() {
                        form.updateInfo();
                    });
                }, 100);
            },
            change: function () {
                this.submit();
            },
        }
    },

    getButtons: function () {
        return [{
            text: '<i class="icon icon-times"></i> ' + _('ms2_orders_form_reset'),
            handler: this.reset,
            scope: this,
            iconCls: 'x-btn-small',
        }, {
            text: '<i class="icon icon-check"></i> ' + _('ms2_orders_form_submit'),
            handler: this.submit,
            scope: this,
            cls: 'primary-button',
            iconCls: 'x-btn-small',
        }];
    },

    getKeys: function () {
        return [{
            key: Ext.EventObject.ENTER,
            fn: function () {
                this.submit();
            },
            scope: this
        }];
    },

    submit: function () {
        var store = this.grid.getStore();
        var form = this.getForm();

        var values = form.getFieldValues();
        for (var i in values) {
            if (i != undefined && values.hasOwnProperty(i)) {
                store.baseParams[i] = values[i];
            }
        }
        this.refresh();
    },

    reset: function () {
        var store = this.grid.getStore();
        var form = this.getForm();

        form.items.each(function(f) {
            if (f.name == 'status') {
                f.clearValue();
            }
            else {
                f.reset();
            }
        });

        var values = form.getValues();
        for (var i in values) {
            if (values.hasOwnProperty(i)) {
                store.baseParams[i] = '';
            }
        }
        this.refresh();
    },

    refresh: function () {
        this.grid.getBottomToolbar().changePage(1);
    },

    updateInfo: function (data) {
        var arr = {
            'num': 'num',
            'sum': 'sum',
            'month-num': 'month_total',
            'month-sum': 'month_sum',
        };
        for (var i in arr) {
            if (!arr.hasOwnProperty(i)) {
                continue;
            }
            var text_size = 30;
            var elem = Ext.get('minishop2-orders-info-' + i);
            if (elem) {
                elem.setStyle('font-size', text_size + 'px');
                var val = data != undefined
                    ? data[arr[i]]
                    : elem.dom.innerText;
                var elem_width = elem.parent().getWidth();
                var text_width = val.length * text_size * .6;
                if (text_width > elem_width) {
                    for (var m = text_size; m >= 10; m--) {
                        if ((val.length * m * .6) < elem_width) {
                            break;
                        }
                    }
                    elem.setStyle('font-size', m + 'px');
                }
                elem.update(val);
            }
        }
    },

    focusFirstField: function () {
    },

});
Ext.reg('minishop2-form-orders', miniShop2.panel.OrdersForm);

при логине видит все заказы и даже можно листить по поставщику но неотображается вообще ничего

тоесть то что я примерно понял и помнял orders несильно помогло что то неучёл

поделитесь xtype описаниями minishop2 полей может из за этого нелиситься

как бы так сделать чтобы при логине только отображались заказы поставщика который указан в Vendor

Vendor в ms2 product там где цвет товара, вес товара, артикул

тоесть когда товар заказывается любой, в любом заказе товара данный Vendor учитывается

и кактобы так xtype правильно указать чтобы невыбиралось и по другим поставщикам нелистилось, фиксированный как бы select без возможности выбирать других поставщиков и смотреть их заказы
Александр
18 марта 2021, 23:03
0
Разобрался, через сниппет:
{'msOptions' | snippet : [
                'options' => 'my_tag'
            ]}
Спасибо за компонент
Артем
18 марта 2021, 22:23
+1
{set $result = []}
{foreach $array_test as $row}
  {if $row.id in keys $result}
    {$result[$row.id] += $row.count}
  {else}
    {$result[$row.id] = $row.count}
  {/if}
{/foreach}
Александр
18 марта 2021, 22:08
0
Только что заметил, если вывести с помощью тега modx
[[+tag]]
, ничего не выводит также.
А если так:
[[*tag]]
, то выводит:
Array ( [0] =>Содержимое тега )
То есть дело в феноме, ибо json и ещё в чем то.
Александр
18 марта 2021, 21:55
0
Подскажите пожалуйста. Текстовые поля выводятся, а если делаю тип поля: «Множественные значения», то не выводит ничего
Николай Савин
18 марта 2021, 21:22
+5
Давай серию уроков сделай. Это просто космическая польза будет сообществу!
Сергей
18 марта 2021, 21:13
0
Все отлично получилось, все завелось как и планировалось, благодарю!!!
Иван Бочкарев
18 марта 2021, 15:26
0
Спасибо! До следующих выходных обновим.

Что касается демо сайта — он в работе.
Scorp Satex
18 марта 2021, 14:10
+2
Пожалуйста, обновите описание плагина и его требования тут: modstore.pro/packages/ecommerce/minishop2

Там все устарело: текст, фотки.

Так же было бы не плохо обновить демо версию тут: minishop2.com/

Движок, сам miniShop2, и включить показ админ панели miniShop2 в админке, чтобы было нагляднее как работать с заказами, опциями и т.д.

Это вводит в заблуждение новичков.
Артем
18 марта 2021, 14:03
+1
Тут речь про то, чтоб повысить в системных требованиях минишопа минимальную версию php
Тут речь про то, чтобы исправить шорткат на старый list, потому что никто в здравом уме не будет без мажорного релиза повышать требуемую версию php с 5.3 на 7.1.

P.S. Стрелочки с мобильной версии настолько удобные, что я даже случайно плюсанул тебе, ну да ладно.
Евгений Шеронов
18 марта 2021, 14:02
+4
Я тебе ещё в прошлом году присылал пример встраивания Vue.js в админку))
И вот только сейчас всё это выглядит как полноценный компонент.

Вообще разрабатывать гораздо приятнее и удобнее. Тот же hot-reload, обновляющий на странице только изменившуюся часть DOM, реактивность, роутинг, хранилище, прям хочется ещё что-то сделать)
Но всё равно, полноценный компонент слишком долго делать :(

Если сильно захотеть текущий компонент легко перенести из админки на фронт или вообще заюзать в другой CMS, так как старался абстрагироваться от MODX сущностей (не получилось).
Андрей Шевяков
18 марта 2021, 13:05
+1
{set $image = 'assets/files/' ~ $row.licimage}
<img class="portfolio-img" src="{$image | phpthumbon : 'w=1280&h=720&zc=0'}" alt="{$row.licalt}" title="{$row.licalt}">
Евгений
18 марта 2021, 12:05
0
батчер задачу решает но для юзера сложно и неудобно фильтровать. реально ли пункт из массовых действий перенести в collections? а именно перенос выбранных документов в другую папку
Николай Савин
18 марта 2021, 11:39
0
Ну мне сама тема не особо интересна, так что я не читал.
Aleksandr Huz
18 марта 2021, 11:29
+1
Интерфейс на Vue.js с визуальным добавлением узлов и атрибутов
В статье написано
Николай Савин
18 марта 2021, 11:05
0
С возвращением. Давно не было видно!
На чем интерфейс делал? Это же явно не extJS
Aleksanders
18 марта 2021, 09:12
0
Заменил код с пробелами:
return preg_replace('# "(.*?)" #', ' «$1» ', $input);
Как-то через раз заменяет кавычки.
Вот пример:
«Тракторист-машинист сельскохозяйственного производства» категорий «А","В","D"
"Слесарь по ремонту сельскохозяйственных машин и оборудования» 3 разряда
«Водитель автомобиля» категории "С"
Объявляем набор на курсы по подготовке водителей механических транспортных средств категории «В» и переподготовки водителей механических транспортных средств категории «В» на категорию "С".
Артур Шевченко
18 марта 2021, 08:21
0
А ты гуглить пробовал, говорят — помогает. Или думаешь ты первый, кто не знает как это сделать?
Для страницы продукта
{$_modx->getPlaceholder('vendor.name')}
Для страницы каталога
{$_pls['vendor.name']}
Для корзины
{$product['vendor.name']}
elec3c
17 марта 2021, 23:46
0
Решено. Сервер хостера кэширует всё в усмерть. Что бы решить проблему необходимо включить в htaccess следующие директивы
<IfModule mod_headers.c>
Header append Cache-Control «no-store, no-cache, must-revalidate»


# Заголовок Expires
<IfModule mod_expires.c>
ExpiresActive On ExpiresDefault «now»

После этого сбросить кэш в браузере. Это немного замедлит сайт, но корзинна и все динамические элементы станут работать корректно.
Артур Шевченко
17 марта 2021, 21:43
0
В самом простом случае надо просто добавить пробелы ведь и scr=" и href=" как правило без пробелов перед кавычкой пишут
preg_replace('# "(.*?)" #', ' «$1» ', $input);