Всего 123 801 комментарий

Сергей С
17 июня 2023, 12:46
0
Подписка для сайтов-зло. Заказчики хостинг и домен забывают как платить за год, а тут еще подписки дополнений. С точки зрения разработчиков удобно конечно и выгодно, но в итоге разрабу придется контролировать. Иначе раз в год у заказчика интернет магазин будет падать.
Сергей С
17 июня 2023, 12:34
0
так?
'productFields' => [
'weight' => 'name_Вес',
'pagetitle' => 'name',
'content' => 'description',
'made_in' => 'country_of_origin',
'price' => 'price',
'old_price' => 'oldprice',
'picture' => 'picture',
],
Артур Шевченко
17 июня 2023, 12:09
0
Будет ли работать если фид на стороннем сайте?
Будет, фид сначала скачивается на ваш сервер.

Умеет ли обновлять уже загруженные товары?
Если название в фиде и pagetitle на сайте совпадают, то да.

Подтянет ли фото со стороннего сайта?
Фото тянутся исключительно по полной ссылке, даже если они на вашем сервере лежат, они должны быть доступны по ссылке вида domain.ru/imagename.jpg

Зачем нужен feed_id?
По нему определяется вложенность категорий и принадлежность товара к категории
Николай Хохлунов
17 июня 2023, 11:16
+1
Не могу точно сказать, пока тестируем, может пару месяцев)
Павел Романов
17 июня 2023, 10:53
0
Потому что в коде нет элементов с id, которые указаны в ссылках.
Vladimir
17 июня 2023, 09:27
0
в итоге она открылась без сертификата просто rewrite engine on включил — там другая проблема возникла.
Dan
Dan
17 июня 2023, 08:01
0
Потому что у вас не подключен SSL сертификат, а по какой причине пометилась именно страница good — без понятий
Артур Шевченко
16 июня 2023, 21:58
0
Как долго компонет будет бесплатным?
Сергей С
16 июня 2023, 19:09
0
Попробую. Спасибо. Where уже в массив перевёл т.к. там несколько условий and, OR.
Dan
Dan
16 июня 2023, 16:53
+1
Во первых, $dop должна быть не строка, а массив и where вы можете указать тоже в виде массива:
//как должен выглядеть $dop = [1234,5678,89654,4848];
$option_par['where'] = [
    'Data.is_general' => 1,
    'OR:id:IN' => $dop
]
$modx->runSnippet('msProducts',$option_par);
Сергей С
16 июня 2023, 13:17
0
В какую настройку прописывать поле изображений? Несколько изображений он загрузит? в ms2gallery?
Сергей С
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);