Овчинников Егор Эдуардович

Овчинников Егор Эдуардович

С нами с 25 января 2018; Место в рейтинге пользователей: #540
Не знал, что в одном индексе может быть несколько полей, очень полезный совет оказался.

Завтра попробую проверить с такой схемой и всеми названиями, как были раньше. Посмотрю, проблема в этом, или всё-же в другом.
Не может быть именно так:
order_id = 2 / field_id = 2
order_id = 2 / field_id = 2

Т.е. два объекта, у которых попарно равные order_id и field_id не могут существовать.

Не знал, что в одном индексе может быть несколько полей, посыпаю голову пеплом. Спасибо за полезный совет!
Так они и не unique.
Может быть такое:
order_id = 1 / field_id = 1
order_id = 1 / field_id = 2
order_id = 1 / field_id = 3
order_id = 2 / field_id = 1
order_id = 2 / field_id = 2
order_id = 2 / field_id = 3

Но не может быть такого:
order_id = 2 / field_id = 2
order_id = 2 / field_id = 2

Это проверяется на стороне сниппета при сохранении информации.

Или есть вариант делать unique именно по двум колонкам разом?
Если не составит труда, можете объяснить в чём проблема структуры?
Всю информацию заношу и получаю только по связке order_id и field_id. Каждое из этих полей может дублироваться, но двух объектов, у которых оба эти поля попарно равны — нет. Всё проверяю в сниппете, прежде чем занести.

Там суть, что нужно создавать таблицу, структура которой может расширяться по горизонтали -Fields (то, что выводится в header таблицы) и по вертикали — уже сами Orders (то, что создаёт ряды). А Values уже, соответственно, по пересечению горизонтального и вертикального.

p.s. извиняюсь, что на две ветки отвечать получилось.
Тоже думал об этом. Но нет, получал он именно тот объект, который я хотел (смотрел по значениям), уникальность именно по ['order_id' => 3, 'field_id' => 1]. Чистил таблицу, создавал 1 запись, её же получал и пытался редактировать — найн. Всё перепроверял на 1000 раз.

Да и в любом случае, как оно тогда могло заработать с другим именем таблицы, если структура осталась старой?
<object class="LjFieldvalue" table="lj_fieldvalue" extends="xPDOSimpleObject">
    <field key="order_id" dbtype="int" precision="11" phptype="integer" null="false" />
    <field key="field_id" dbtype="int" precision="11" phptype="integer" null="false" />
    <field key="value" dbtype="varchar" precision="191" phptype="string" null="false" />
</object>
Могу попозже повторить, но не знаю как получить хоть какую-то информацию, чтобы зарепортить о баге. Ошибок не возникало никаких абсолютно на всех уровнях log_level
Сначала создал копию с такой же структурой, но другим именем — сработало, удивился. Переименовал старую, обновил схему — и она заработала.

Смущает именно момент с тем, что newObject работал полностью — создавал, устанавливал значения, сохранял. getObject получал, set работал, но не сохранял. Самое странное, что save отдавал true…
Он возвращал true, хотя объект не сохранялся, в этом и проблема. Я нашёл несколько подобных проблем в eng форумах, но тоже без решений адекватных. Не знаю почему, но именно название LjValues не понравилось xPDO. Даже если менял все поля таблицы — всё равно. Проблема именно в названии. Когда поменял его — всё заработало.
Боже, я не знаю почему, но LjValues — плохое название. Просто переименовал в LjFieldvalue — всё изумительно.
И таблицу в modx_lj_fieldvalue.
Василий, если я правильно понял о чем вы, то это есть тут: клик

По крайней мере modx-соевые методы подтягивает. Вводишь run, предлагает runSnippet, runProcessor и т.д. И тоже с подсказками, какие параметры оно ждёт и т.д.

Конечнл, он далеко не такой мощный как Шторм, но мой дряблый пк Шторм не тянет, приходится вот так вот жить :)
Бинго!
Спасибо большое, кажется то, что нужно! Протестирую, опишу решение
Спасибо за ответ!
msOnSubmitOrder подойдёт для этих целей?

Суть такая: расчёт стоимости доставки можно произвести только после того, как известен город, указанный при оформлении заказа (скорее всего, это придётся разбить на 2 части — 1 будет считать и менять стоимость доставки во фронтенде, чтобы пользователь видел конечную цену), а дальше, в момент когда заказ создан, но пользователя ещё не перевело на оплату (mspYandexMoney), нужно изменить стоимость доставки, чтобы mspYandexMoney уже запросил сумму с ней.
О, нашёл.
В Hook Snippets — {«aftersave»:«test»}, в снипппете test получить объект так:

$object = & $modx->getOption('object',$scriptProperties,null);
$properties = $modx->getOption('scriptProperties',$scriptProperties,array());
$postvalues = $modx->getOption('postvalues',$scriptProperties,array());
Евгений, добрейшего вечера. Я тот самый пользователь, который будет выносить мозги с нетипичными задачами =(
Что можно сделать, если категорий невероятно много, и их список просто не влазит в поле «страницы»? там макс.длина 255… И будет ли фильтр адекватной работать если категорий >200?

Можно ли как-то выслеживать нужные страницы по ID шаблона, а не id ресурса? seofilter_templates с этим ведь не справится, он только добавляет id ресурсов в список, правильно понимаю?
да, мне уже рассказали на тостере какая мне нужна формула и куда копать.
Но у меня 2 класса образования. Первый год шёл ремонт в школе, а второй — не было учителя ©

Однако, считаю что штука необходимая. Может даже такие страницы не заносить в общий список или заносить как «комбинация нескольких».

p.s. было бы неплохо дописать где-нибудь в доках или в сплывающих подсказках, что в полях можно использовать {$_modx->resource.pagetitle} и прочие безобразия. Жутко помогает, если нужно сделать в title схему pagetitle — brand color, т.к. через автоматическое добавления он пишет только после значений фильтров (brand color pagetitle), что не всегда подходит.
Просто это не совсем очевидно, но нужно =)
Хм, ну фильтр же всё автоматически выравнивает, т.е. в каком порядке не выбирай, всегда будет brand=1,2,8,12, вариант 1,12,8,2 невозможен.
И, соответственно, вариантов подбора уже меньше, и дубли можно не делать. Я даже Тостер сегодня мучил подобным вопросом, как просчитать все варианты перебора без повторений =)
Здравствуйте.
Например, по производителям. Кто-то желает купить кроссовки проверенных марок — ставит несколько брендов и уже по ним выбирает. И вот с этим беда, только в ручную вбивать все варианты (1,2,3 = adidas-nike-reebok)
Нашёл у вас на гитхабе пример идеальный =) Всё ясно и просто, как солнечный день. Спасибо за уделённое время и что дали направление, искал по гитхабу «tpl: new Ext.XTemplate» и разобрался уже по коду =)

Может кому пригодится тоже:
miniShop2.combo.Product = function (config) {
    config = config || {};
    Ext.applyIf(config, {
        id: 'minishop2-combo-product',
        fieldLabel: _('ms2_product_name'),
        fields: ['id', 'pagetitle', 'parents'],
        valueField: 'id',
        displayField: 'pagetitle',
        name: 'product',
        hiddenName: 'product',
        allowBlank: false,
        url: miniShop2.config['connector_url'],
        baseParams: {
            action: 'mgr/product/getlist',
            combo: true,
            id: config.value
        },
        tpl: new Ext.XTemplate('\
            <tpl for=".">\
                <div class="x-combo-list-item minishop2-product-list-item" ext:qtip="{pagetitle}">\
                    <tpl if="parents">\
                        <span class="parents">\
                            <tpl for="parents">\
                                <nobr><small>{pagetitle} / </small></nobr>\
                            </tpl>\
                        </span>
\
                    </tpl>\
                    <span><small>({id})</small> <b>{pagetitle}</b></span>\
                </div>\
            </tpl>', {compiled: true}
        ),
        pageSize: 5,
        emptyText: _('ms2_combo_select'),
        editable: true,
    });
    miniShop2.combo.Product.superclass.constructor.call(this, config);
};
Ext.extend(miniShop2.combo.Product, MODx.combo.ComboBox);
Ext.reg('minishop2-combo-product', miniShop2.combo.Product);
Владимир, спасибо за ответ. Можно несколько уточнений, если вы не против?

Смотрите.
В home.panel.js добавляю:

{
   xtype: 'modExtra-item-card'
   ,cls: 'main-wrapper'
    ,preventRender: true
 }
Тут я получаю, что у моего нового таба в содержимом выводится нужный xtype, окей, всё хорошо.

А в item.card.js как мне это запилить? Я сколько читаю, не могу понять логику, как мне это собрать в одно целое.

Или я совсем неправильно думаю, и мне не нужно даже новый файл записывать, достаточно прямо в выводе таба это указать? Вот например:

{
    title: 'Название новой вкладки'
    ,defaults: { autoHeight: true }
    ,items: [{
        xtype: 'xtemplate',
        ,border: false
        ,cls: 'panel-desc'
        ,handler: function() {
            MODx.Ajax.request({
                url: MODx.config.connector_url, 
                params: { 
                    action: 'resource/getlist',
                },
                listeners: {
                    success: { 
                       //тут как-то вывести xtemplate
                    }
                }
            });
        },
    }]
},